У меня есть FunctionalTest, который тестирует отправку в контроллер, а затем проверяет объекты модели, чтобы убедиться, что контроллер выполнил свою работу, например:
@Test
public void editUser(){
Logger.debug("Edit user test");
createNewUser();
final User user = User.<User>findAll().get(0);
POST("/ManageUser/save", ImmutableMap.of(
"user.id", user.getId().toString(),
"user.username", "test",
"user.email", "test@example.com",
"user.fullName", "Test Different"
));
User.em().flush();
User.em().clear(); // this is required so that it works on the mem DB
assertEquals(1, User.findAll().size());
assertEquals("Test Different", User.<User>findAll().get(0).fullName);
final User userAfterSave = User.<User>findAll().get(0);
assertFalse("New user should not be admin.", userAfterSave.isAdmin);
}
Это проходит при использовании базы данных mem
%test.db.url=jdbc:h2:mem:play;MODE=MYSQL;LOCK_MODE=0
Тем не менее, если я переключаюсь на mysql
%test.db=mysql://test:test@localhost/test
Это не сработает при втором утверждении "Сбой, ожидаемый: <Test [Differen]t>
, но был: <Test [Tes]t>
".Таким образом, при использовании mysql контроллер не сохраняет пользователя должным образом.
Что мне здесь не хватает, есть ли какие-то параметры управления транзакциями, которые мне нужно изменить, чтобы это работало?
контроллер просто вызывает user.merge (). save () для обновления пользователя, это как-то не так?