Ninja framework changes
This commit is contained in:
parent
d21a7b9e5c
commit
e6f6fd1ca7
|
@ -0,0 +1,33 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
|
||||
<persistence xmlns="http://java.sun.com/xml/ns/persistence"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"
|
||||
version="2.0">
|
||||
|
||||
<!-- Database settings for development-->
|
||||
<persistence-unit name="dev_unit" transaction-type="RESOURCE_LOCAL">
|
||||
<provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
|
||||
|
||||
<properties>
|
||||
<property name="hibernate.connection.driver_class" value="org.h2.Driver"/>
|
||||
<property name="hibernate.dialect" value="org.hibernate.dialect.H2Dialect" />
|
||||
|
||||
<property name="hibernate.show_sql" value="true" />
|
||||
<property name="hibernate.format_sql" value="true" />
|
||||
<property name="hibernate.hbm2ddl.auto" value="update" />
|
||||
<property name="hibernate.connection.autocommit" value="true" />
|
||||
|
||||
<!-- Connection Pooling settings -->
|
||||
<property name="hibernate.connection.provider_class"
|
||||
value="org.hibernate.service.jdbc.connections.internal.C3P0ConnectionProvider" />
|
||||
|
||||
<property name="hibernate.c3p0.max_size" value="100" />
|
||||
<property name="hibernate.c3p0.min_size" value="0" />
|
||||
<property name="hibernate.c3p0.acquire_increment" value="1" />
|
||||
<property name="hibernate.c3p0.idle_test_period" value="300" />
|
||||
<property name="hibernate.c3p0.max_statements" value="0" />
|
||||
<property name="hibernate.c3p0.timeout" value="100" />
|
||||
</properties>
|
||||
</persistence-unit>
|
||||
</persistence>
|
|
@ -1,20 +1,3 @@
|
|||
/**
|
||||
* Copyright (C) 2012-2019 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
|
||||
package conf;
|
||||
|
||||
import java.util.List;
|
||||
|
|
|
@ -1,20 +1,3 @@
|
|||
/**
|
||||
* Copyright (C) 2012-2019 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
|
||||
package conf;
|
||||
|
||||
import com.google.inject.AbstractModule;
|
||||
|
@ -26,10 +9,8 @@ import services.UserServiceImpl;
|
|||
@Singleton
|
||||
public class Module extends AbstractModule {
|
||||
|
||||
|
||||
protected void configure() {
|
||||
|
||||
// bind your injections here!
|
||||
bind(UserService.class).to(UserServiceImpl.class);
|
||||
|
||||
}
|
||||
|
|
|
@ -1,23 +1,5 @@
|
|||
/**
|
||||
* Copyright (C) 2012-2019 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
|
||||
package conf;
|
||||
|
||||
|
||||
import ninja.AssetsController;
|
||||
import ninja.Router;
|
||||
import ninja.application.ApplicationRoutes;
|
||||
|
@ -29,19 +11,17 @@ public class Routes implements ApplicationRoutes {
|
|||
public void init(Router router) {
|
||||
|
||||
router.GET().route("/").with(ApplicationController::index);
|
||||
router.GET().route("/hello_world.json").with(ApplicationController::helloWorldJson);
|
||||
|
||||
router.GET().route("/hello").with(ApplicationController::helloWorld);
|
||||
router.GET().route("/userJson").with(ApplicationController::userJson);
|
||||
router.GET().route("/users").with(ApplicationController::fetchUsers);
|
||||
|
||||
///////////////////////////////////////////////////////////////////////
|
||||
// Assets (pictures / javascript)
|
||||
///////////////////////////////////////////////////////////////////////
|
||||
//Assets
|
||||
router.GET().route("/assets/webjars/{fileName: .*}").with(AssetsController::serveWebJars);
|
||||
router.GET().route("/assets/{fileName: .*}").with(AssetsController::serveStatic);
|
||||
|
||||
///////////////////////////////////////////////////////////////////////
|
||||
// Index / Catchall shows index page
|
||||
///////////////////////////////////////////////////////////////////////
|
||||
//Index
|
||||
router.GET().route("/.*").with(ApplicationController::index);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -15,12 +15,20 @@ application.name=baeldung ninja application
|
|||
application.cookie.prefix=NINJA
|
||||
|
||||
#ISO Language Code, optionally followed by a valid ISO Country Code.
|
||||
application.languages=en
|
||||
application.languages=fr,en
|
||||
|
||||
application.session.expire_time_in_seconds=3600
|
||||
application.session.send_only_if_changed=true
|
||||
application.session.transferred_over_https_only=false
|
||||
|
||||
ninja.port=8000
|
||||
|
||||
# enable ssl with self-signed cert in dev & test modes
|
||||
ninja.ssl.port=8443
|
||||
ninja.ssl.port=8001
|
||||
application.secret = fxSjSL9Q017BSL7gBnkyo2Prln7uXaXIT35gotXRIED8c46OSa8s4QdoIQdTsEtj
|
||||
|
||||
# h2 jpa configuration
|
||||
ninja.jpa.persistence_unit_name=dev_unit
|
||||
db.connection.url=jdbc:h2:./devDb
|
||||
db.connection.username=sa
|
||||
db.connection.password=
|
||||
|
|
|
@ -1,21 +1,2 @@
|
|||
#
|
||||
# Copyright (C) 2012 the original author or authors.
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
#
|
||||
|
||||
# This file is utf-8
|
||||
header.title=Hello World!
|
||||
header.home=BAM!
|
||||
hello.world=Hello World!
|
||||
hello.world.json=There is also Json rendering you can check out!
|
||||
header.home=Home!
|
||||
helloMsg=Hello, welcome to Ninja Framework!
|
|
@ -0,0 +1,2 @@
|
|||
header.home=Accueil!
|
||||
helloMsg=Bonjour, bienvenue dans Ninja Framework!
|
|
@ -1,36 +1,83 @@
|
|||
package controllers;
|
||||
|
||||
import ninja.Context;
|
||||
import ninja.Result;
|
||||
import ninja.Results;
|
||||
import ninja.i18n.Lang;
|
||||
import ninja.i18n.Messages;
|
||||
import ninja.jpa.UnitOfWork;
|
||||
import services.UserService;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Optional;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import javax.persistence.EntityManager;
|
||||
import javax.persistence.Query;
|
||||
|
||||
import org.apache.commons.logging.Log;
|
||||
import org.apache.commons.logging.LogFactory;
|
||||
|
||||
import com.google.inject.Provider;
|
||||
import com.google.inject.Singleton;
|
||||
|
||||
import models.User;
|
||||
import com.google.inject.persist.Transactional;
|
||||
|
||||
@Singleton
|
||||
public class ApplicationController {
|
||||
|
||||
@Inject
|
||||
Lang lang;
|
||||
|
||||
@Inject
|
||||
Messages msg;
|
||||
|
||||
private static Log logger = LogFactory.getLog(ApplicationController.class);
|
||||
|
||||
@Inject
|
||||
Provider<EntityManager> entitiyManagerProvider;
|
||||
|
||||
@Inject
|
||||
UserService userService;
|
||||
|
||||
public Result index() {
|
||||
return Results.html();
|
||||
Result result = Results.html();
|
||||
lang.setLanguage("fr", result);
|
||||
return result;
|
||||
|
||||
}
|
||||
|
||||
public Result userJson() {
|
||||
User user = userService.getUser();
|
||||
logger.info(user);
|
||||
return Results.json().render(user);
|
||||
}
|
||||
|
||||
public Result helloWorld(Context context) {
|
||||
Optional<String> language = Optional.of("en");
|
||||
String helloMsg = msg.get("helloMsg", language).get();
|
||||
return Results.text().render(helloMsg);
|
||||
}
|
||||
|
||||
public Result helloWorldJson() {
|
||||
SimplePojo simplePojo = new SimplePojo();
|
||||
simplePojo.content = "Hello World! Hello Json!";
|
||||
logger.info(userService.getUserName());
|
||||
return Results.json().render(simplePojo);
|
||||
@UnitOfWork
|
||||
public Result fetchUsers() {
|
||||
insertUser();
|
||||
EntityManager entityManager = entitiyManagerProvider.get();
|
||||
Query q = entityManager.createQuery("SELECT x FROM User x");
|
||||
List<User> users = (List<User>) q.getResultList();
|
||||
System.out.println(users);
|
||||
return Results.text().render("Done");
|
||||
}
|
||||
|
||||
public static class SimplePojo {
|
||||
public String content;
|
||||
@Transactional
|
||||
public Result insertUser() {
|
||||
EntityManager entityManager = entitiyManagerProvider.get();
|
||||
User user = userService.getUser();
|
||||
entityManager.persist(user);
|
||||
entityManager.flush();
|
||||
|
||||
return Results.text().render("Inserted");
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
|
|
@ -0,0 +1,22 @@
|
|||
package models;
|
||||
|
||||
import javax.persistence.Entity;
|
||||
import javax.persistence.GeneratedValue;
|
||||
import javax.persistence.GenerationType;
|
||||
import javax.persistence.Id;
|
||||
|
||||
@Entity
|
||||
public class User {
|
||||
|
||||
@Id
|
||||
@GeneratedValue(strategy=GenerationType.AUTO)
|
||||
Long id;
|
||||
|
||||
public String firstName;
|
||||
public String email;
|
||||
|
||||
public String toString() {
|
||||
return firstName + " : " + email;
|
||||
}
|
||||
|
||||
}
|
|
@ -1,7 +1,9 @@
|
|||
package services;
|
||||
|
||||
import models.User;
|
||||
|
||||
public interface UserService {
|
||||
|
||||
String getUserName();
|
||||
User getUser();
|
||||
|
||||
}
|
||||
|
|
|
@ -1,10 +1,15 @@
|
|||
package services;
|
||||
|
||||
import models.User;
|
||||
|
||||
public class UserServiceImpl implements UserService {
|
||||
|
||||
|
||||
@Override
|
||||
public String getUserName() {
|
||||
return "Eugen Parashic";
|
||||
public User getUser() {
|
||||
User user = new User();
|
||||
user.firstName = "Norman";
|
||||
user.email = "norman@email.com";
|
||||
return user;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -2,8 +2,8 @@
|
|||
<@layout.myLayout "Home page">
|
||||
|
||||
|
||||
<h1>${i18n("hello.world")}</h1>
|
||||
<p>${i18n("hello.world.json")}</p>
|
||||
<a href="/hello_world.json">Hello World Json</a>
|
||||
<h1>${i18n("helloMsg")}</h1>
|
||||
|
||||
<a href="/userJson">User Json</a>
|
||||
|
||||
</@layout.myLayout>
|
|
@ -6,11 +6,11 @@
|
|||
<span class="icon-bar"></span>
|
||||
<span class="icon-bar"></span>
|
||||
</button>
|
||||
<a class="navbar-brand" href="/">${i18n("header.title")}</a>
|
||||
</div>
|
||||
<div class="navbar-collapse collapse">
|
||||
<ul class="nav navbar-nav">
|
||||
<li class="active"><a href="/">${i18n("header.home")}</a></li>
|
||||
<li class=""><a href="/hello">Hello</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<!--/.navbar-collapse -->
|
||||
|
|
|
@ -1,78 +1,38 @@
|
|||
/**
|
||||
* Copyright (C) 2012-2019 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
/**
|
||||
* Copyright (C) 2013 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package controllers;
|
||||
|
||||
|
||||
import org.junit.Test;
|
||||
|
||||
import ninja.NinjaDocTester;
|
||||
import org.doctester.testbrowser.Request;
|
||||
import org.doctester.testbrowser.Response;
|
||||
import org.hamcrest.CoreMatchers;
|
||||
import static org.hamcrest.CoreMatchers.containsString;
|
||||
import static org.junit.Assert.assertThat;
|
||||
|
||||
import javax.inject.Inject;
|
||||
|
||||
import org.doctester.testbrowser.Request;
|
||||
import org.doctester.testbrowser.Response;
|
||||
import org.junit.Test;
|
||||
import org.mockito.Mock;
|
||||
|
||||
import ninja.NinjaDocTester;
|
||||
import services.UserService;
|
||||
|
||||
public class ApiControllerDocTesterTest extends NinjaDocTester {
|
||||
|
||||
String URL_INDEX = "/";
|
||||
String URL_HELLO_WORLD_JSON = "/hello_world.json";
|
||||
String URL_HELLO = "/hello";
|
||||
String URL_USER_JSON = "/userJson";
|
||||
String URL_USERS = "/users";
|
||||
|
||||
@Mock
|
||||
UserService userService;
|
||||
|
||||
@Test
|
||||
public void testGetIndex() {
|
||||
|
||||
Response response = makeRequest(
|
||||
Request.GET().url(
|
||||
testServerUrl().path(URL_INDEX)));
|
||||
|
||||
assertThat(response.payload, containsString("Hello World!"));
|
||||
assertThat(response.payload, containsString("BAM!"));
|
||||
|
||||
|
||||
Response response = makeRequest(Request.GET().url(testServerUrl().path(URL_INDEX)));
|
||||
assertThat(response.payload, containsString("Bonjour, bienvenue dans Ninja Framework!"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGetHelloWorldJson() {
|
||||
|
||||
Response response = makeRequest(
|
||||
Request.GET().url(
|
||||
testServerUrl().path(URL_HELLO_WORLD_JSON)));
|
||||
|
||||
ApplicationController.SimplePojo simplePojo
|
||||
= response.payloadJsonAs(ApplicationController.SimplePojo.class);
|
||||
|
||||
assertThat(simplePojo.content, CoreMatchers.equalTo("Hello World! Hello Json!"));
|
||||
|
||||
|
||||
public void testGetHello() {
|
||||
Response response = makeRequest(Request.GET().url(testServerUrl().path(URL_HELLO)));
|
||||
assertThat(response.payload, containsString("Hello, welcome to Ninja Framework!"));
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
|
|
@ -0,0 +1,41 @@
|
|||
package controllers;
|
||||
|
||||
import static org.hamcrest.CoreMatchers.containsString;
|
||||
import static org.junit.Assert.assertEquals;
|
||||
import static org.junit.Assert.assertNotEquals;
|
||||
import static org.junit.Assert.assertThat;
|
||||
|
||||
import javax.inject.Inject;
|
||||
|
||||
import org.doctester.testbrowser.Request;
|
||||
import org.doctester.testbrowser.Response;
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.mockito.Mock;
|
||||
|
||||
import ninja.NinjaRunner;
|
||||
import ninja.Result;
|
||||
import services.UserService;
|
||||
|
||||
@RunWith(NinjaRunner.class)
|
||||
public class ApiControllerMockTest {
|
||||
|
||||
@Inject private UserService userService;
|
||||
|
||||
ApplicationController applicationController;
|
||||
|
||||
@Before
|
||||
public void setupTest() {
|
||||
applicationController = new ApplicationController();
|
||||
applicationController.userService = userService;
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testThatGetUserJson() {
|
||||
Result result = applicationController.userJson();
|
||||
System.out.println(result.getRenderable());
|
||||
assertEquals(userService.getUser().toString(), result.getRenderable().toString());
|
||||
}
|
||||
|
||||
}
|
Loading…
Reference in New Issue