Hello all.
Trying to test play controller with some db operation in it, using custom WithApplication class.
Play 2.4+ Hibernate 4.3.9
Test Code:
public class AuthTest extends WithApplication {
@Override
public void startPlay()
{
Http.RequestBuilder request = new Http.RequestBuilder().method("POST").uri("");
Http.Request r = request.build();
Http.Cookie c = new Http.Cookie("application.lang.cookie","ru",null,null,null,true,true);
request.cookie(c);
super.startPlay();
Http.Context.current.set(new Http.Context(1L,
Mockito.mock(RequestHeader.class),
r,
Collections.<String, String>emptyMap(),
Collections.<String, String>emptyMap(),
Collections.<String, Object>emptyMap()));
Http.Context.current().changeLang("en");
}
@Override
public Application provideApplication() {
MockitoAnnotations.initMocks(this);
Module testModule = new AbstractModule() {
@Override
public void configure() {
bind(AuthServices.class)
.toInstance(authServices);
}
};
GuiceApplicationBuilder builder = new GuiceApplicationLoader()
.builder(new play.ApplicationLoader.Context(Environment.simple()))
.in(Mode.TEST)
.overrides(testModule);
return builder.build();
}
@Test
public void authByLoginErrorForm() {
Map<String, String> data = new HashMap<>();
data.put("username", "");
data.put("password", "");
Http.RequestBuilder request = new Http.RequestBuilder()
.method("POST")
.uri("/auth/login").bodyForm(data);
Result result = route(request, Helpers.DEFAULT_TIMEOUT);
assertTrue("Empty login or password", contentAsString(result).contains("WP_EMPTY_FIELDS"));
assertEquals("Form with errors must return 400 http code", 200, result.status());
}
}
[error] Test controller.AuthTest.authByLoginErrorForm failed: java.lang.IllegalStateException: Tried to remove the EntityManager, but none was set., took 0.091 sec
[error] at play.db.jpa.JPAEntityManagerContext.pop(JPAEntityManagerContext.java:74)
[error] at play.db.jpa.DefaultJPAApi.withTransaction(DefaultJPAApi.java:155)
[error] at play.db.jpa.DefaultJPAApi.withTransaction(DefaultJPAApi.java:195)
[error] at play.db.jpa.TransactionalAction.call(TransactionalAction.java:25)
[error] at play.core.j.JavaAction$$anonfun$7.apply(JavaAction.scala:108)
[error] at play.core.j.JavaAction$$anonfun$7.apply(JavaAction.scala:108)
[error] at scala.concurrent.impl.Future$PromiseCompletingRunnable.liftedTree1$1(Future.scala:24)
[error] at scala.concurrent.impl.Future$PromiseCompletingRunnable.run(Future.scala:24)
[error] at play.core.j.HttpExecutionContext$$anon$2.run(HttpExecutionContext.scala:56)
[error] at play.api.libs.iteratee.Execution$trampoline$.execute(Execution.scala:70)
[error] at play.core.j.HttpExecutionContext.execute(HttpExecutionContext.scala:48)
[error] at scala.concurrent.impl.Future$.apply(Future.scala:31)
[error] at scala.concurrent.Future$.apply(Future.scala:492)
[error] at play.core.j.JavaAction.apply(JavaAction.scala:108)
[error] at play.api.mvc.Action$$anonfun$apply$2$$anonfun$apply$5$$anonfun$apply$6.apply(Action.scala:112)
[error] at play.api.mvc.Action$$anonfun$apply$2$$anonfun$apply$5$$anonfun$apply$6.apply(Action.scala:112)
[error] at play.utils.Threads$.withContextClassLoader(Threads.scala:21)
[error] at play.api.mvc.Action$$anonfun$apply$2$$anonfun$apply$5.apply(Action.scala:111)
[error] at play.api.mvc.Action$$anonfun$apply$2$$anonfun$apply$5.apply(Action.scala:110)
[error] at scala.Option.map(Option.scala:146)
[error] at play.api.mvc.Action$$anonfun$apply$2.apply(Action.scala:110)
[error] at play.api.mvc.Action$$anonfun$apply$2.apply(Action.scala:103)
[error] at scala.concurrent.Future$$anonfun$flatMap$1.apply(Future.scala:251)
[error] at scala.concurrent.Future$$anonfun$flatMap$1.apply(Future.scala:249)
[error] at scala.concurrent.impl.CallbackRunnable.run(Promise.scala:32)
[error] at akka.dispatch.BatchingExecutor$AbstractBatch.processBatch(BatchingExecutor.scala:55)
[error] at akka.dispatch.BatchingExecutor$BlockableBatch$$anonfun$run$1.apply$mcV$sp(BatchingExecutor.scala:91)
[error] at akka.dispatch.BatchingExecutor$BlockableBatch$$anonfun$run$1.apply(BatchingExecutor.scala:91)
[error] at akka.dispatch.BatchingExecutor$BlockableBatch$$anonfun$run$1.apply(BatchingExecutor.scala:91)
[error] at scala.concurrent.BlockContext$.withBlockContext(BlockContext.scala:72)
[error] at akka.dispatch.BatchingExecutor$BlockableBatch.run(BatchingExecutor.scala:90)
[error] at akka.dispatch.TaskInvocation.run(AbstractDispatcher.scala:39)
[error] at akka.dispatch.ForkJoinExecutorConfigurator$AkkaForkJoinTask.exec(AbstractDispatcher.scala:409)
[error] at scala.concurrent.forkjoin.ForkJoinTask.doExec(ForkJoinTask.java:260)
[error] at scala.concurrent.forkjoin.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1339)
[error] at scala.concurrent.forkjoin.ForkJoinPool.runWorker(ForkJoinPool.java:1979)
[error] at scala.concurrent.forkjoin.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:107)
Can anyone get me hints how to correct test Transactional controller on mem (h2) db?