package hu.lacimol.tutorial.todo;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import hu.lacimol.tutorial.todo.model.Comment;
import hu.lacimol.tutorial.todo.model.Todo;
import hu.lacimol.tutorial.todo.service.TodoServiceImpl;
import java.util.List;
import net.java.ao.EntityManager;
import net.java.ao.test.jdbc.Data;
import net.java.ao.test.jdbc.DatabaseUpdater;
import net.java.ao.test.jdbc.DynamicJdbcConfiguration;
import net.java.ao.test.jdbc.Jdbc;
import net.java.ao.test.junit.ActiveObjectsJUnitRunner;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import com.atlassian.activeobjects.external.ActiveObjects;
import com.atlassian.activeobjects.test.TestActiveObjects;
@RunWith(ActiveObjectsJUnitRunner.class)
@Jdbc(DynamicJdbcConfiguration.class)
@Data(TodoServiceImplTest.TodoServiceImplTestDatabaseUpdater.class)
public class TodoServiceImplTest {
private static final String TODO_DESC = "This is a todo";
private EntityManager entityManager;
private ActiveObjects ao;
private TodoServiceImpl todoService;
@Before
public void setUp() throws Exception {
assertNotNull(entityManager);
ao = new TestActiveObjects(entityManager);
todoService = new TodoServiceImpl(ao);
System.out.println("--- Do test ---");
}
@Test
public void testComments() throws Exception {
assertEquals(2, ao.find(Comment.class).length);
Todo todo = ao.find(Todo.class)[0];
assertEquals(2, todo.getComments().length);
}
@Test
public void testAdd() throws Exception {
final String description = TODO_DESC + "#1";
assertEquals(1, ao.find(Todo.class).length);
final Todo add = todoService.create(description);
assertFalse(add.getID() == 0);
ao.flushAll(); // clear all caches
final Todo[] todos = ao.find(Todo.class);
assertEquals(2, todos.length);
assertEquals(add.getID(), todos[1].getID());
assertEquals(description, todos[1].getDescription());
assertEquals(false, todos[1].isComplete());
}
@Test
public void testAll() throws Exception {
assertEquals(1, todoService.findAll().size());
final Todo todo = ao.create(Todo.class);
todo.setDescription("Some todo");
todo.save();
Comment comment = ao.create(Comment.class);
comment.setTodo(todo);
comment.setText("Comment text 3");
comment.save();
comment = ao.create(Comment.class);
comment.setTodo(todo);
comment.setText("Comment text 4");
comment.save();
ao.flushAll(); // clear all caches
final List<Todo> all = todoService.findAll();
assertEquals(2, all.size());
assertEquals(todo.getID(), all.get(1).getID());
assertEquals("Comment text 3", all.get(1).getComments()[0].getText());
}
public static class TodoServiceImplTestDatabaseUpdater implements DatabaseUpdater {
@SuppressWarnings("unchecked")
@Override
public void update(EntityManager em) throws Exception {
System.out.println("--- Create test data ---");
em.migrate(Todo.class, Comment.class);
final Todo todo = em.create(Todo.class);
todo.setDescription(TODO_DESC);
todo.save();
Comment comment = em.create(Comment.class);
comment.setTodo(todo);
comment.setText("Comment text 1");
comment.save();
comment = em.create(Comment.class);
comment.setTodo(todo);
comment.setText("Comment text 2");
comment.save();
}
}
}