package se.chalmers.dat255.grupp12;
import org.junit.*;
import java.util.ArrayList;
import java.util.List;
import static org.junit.Assert.*;
/**
* Date: 2013-10-10
* Time: 14:13
*/
public class DatabaseTest {
private Database db;
@Before
public void setUp() {
db = Database.getInstance();
}
@Test
public void testGetInsertUser() throws Exception {
String userEmail = "johanmail1";
User johan = db.insertUser(new User("Johan", userEmail));
User newUser = db.getUser(johan.getId());
assertEquals("Inserted user is the same as get by id returns", newUser, johan);
newUser = db.getUser(userEmail);
assertEquals("Inserted user is the same as get by mail returns", newUser, johan);
}
@Test(expected = DataNotFoundException.class)
public void testDeleteUser() throws Exception {
User johan = new User("Johan", "johanmail3");
db.insertUser(johan);
db.deleteUser(johan.getId());
// Will throw DataNotFoundException if user doesn't exist
db.getUser(johan.getId());
}
@Test
public void testUpdateUser() throws Exception {
User johan = new User("Johan Lindskogen", "johanmail4");
db.insertUser(johan);
User newJohan = new User("Johan Hage", "johanmail5");
db.updateUser(johan, newJohan);
User u2 = db.getUser(newJohan.getId());
assertEquals("User from database is same as new user", newJohan, u2);
}
@Test
public void testGetLists() throws Exception {
User u = db.insertUser(new User("Johan", "johanmail6"));
TaskList list = new TaskList("List1");
TaskList list2 = new TaskList("List2");
TaskList list3 = new TaskList("List3");
db.insertList(list, u);
db.insertList(list2, u);
db.insertList(list3, u);
List<TaskList> lists = db.getLists(u);
assertTrue("List1 is in db", lists.contains(list));
assertTrue("List2 is in db", lists.contains(list2));
assertTrue("List3 is in db", lists.contains(list3));
}
@Test
public void testGetInsertList() throws Exception {
User u = db.insertUser(new User("Johan", "johanmail7"));
TaskList list = new TaskList("List");
db.insertList(list, u);
TaskList list2 = db.getList(list.getId());
assertEquals("List is inserted and got correctly", list, list2);
}
@Test
public void testUpdateList() throws Exception {
User johan = new User("Johan Lindskogen", "johanmail8");
db.insertUser(johan);
TaskList list1 = new TaskList("list1");
db.insertList(list1, johan);
TaskList newList = new TaskList("list2");
db.updateList(list1.getId(), newList);
TaskList l2 = db.getList(list1.getId());
assertEquals("User from database is same as new user", newList, l2);
}
@Test(expected = DataNotFoundException.class)
public void testDeleteList() throws Exception {
User johan = new User("Johan", "johanmail9");
db.insertUser(johan);
TaskList list = new TaskList("title");
db.insertList(list, johan);
db.deleteList(list.getId());
// Will throw DataNotFoundException if list doesn't exist
db.getList(list.getId());
}
@Test
public void testGetInsertTask() throws Exception {
User u = db.insertUser(new User("Johan", "johanmail10"));
TaskList list = new TaskList("List");
list.add(new Task("Tasktitle", 10, "Buy stuff", false));
db.insertList(list, u);
TaskList list2 = db.getList(list.getId());
assertEquals("List is inserted and got correctly", list, list2);
}
@Test
public void testUpdateTask() throws Exception {
User u = db.insertUser(new User("Johan", "johanmail11"));
TaskList list = new TaskList("List");
Task task = new Task("Tasktitle", 10, "Buy stuff", false);
list.add(task);
db.insertList(list, u);
Task newTask = new Task("New tasktitle", 11, "Buy more stuff", true);
db.updateTask(task.getId(), newTask);
assertEquals("Task is updated correctly", newTask, db.getTask(newTask.getId()));
}
@Test(expected = DataNotFoundException.class)
public void testDeleteTask() throws Exception {
User johan = new User("Johan", "johanmail12");
db.insertUser(johan);
TaskList list = new TaskList("title");
Task task = new Task("Task", 10, "Buy stuff", false);
db.insertList(list, johan);
db.deleteTask(task.getId());
// Will throw DataNotFoundException if task doesn't exist
db.getTask(task.getId());
}
@Test
public void testAssignUserToTask() throws Exception {
User johan = new User("Johan Lindskogen", "johanmail13");
db.insertUser(johan);
TaskList list = new TaskList("title");
Task task = new Task("Task", 10, "Buy stuff", false);
list.add(task);
db.insertList(list, johan);
db.assignUserToTask(task.getId(), johan);
List<Task> taskList = db.getUserTasks(johan);
assertTrue("User was assigned to task", taskList.contains(task));
}
@Test
public void testAssignUserToList() throws Exception {
User johan = new User("Johan Lindskogen", "johanmail14");
User johan2 = new User("Johan Hage", "johanmail15");
db.insertUser(johan);
db.insertUser(johan2);
TaskList list = new TaskList("title");
db.insertList(list, johan);
db.assignUserToList(johan2, list.getId());
TaskList dblist = db.getList(list.getId());
List<TaskList> taskLists = db.getLists(johan2);
assertTrue("User was assigned to list", taskLists.contains(list) && dblist.getCollaborators().contains(johan2));
int size = dblist.getCollaborators().size();
db.assignUserToList(johan2, list.getId());
dblist = db.getList(list.getId());
assertTrue("User assign was not duplicated", dblist.getCollaborators().size() == size);
}
@Test
public void testGetUserTasks() throws Exception {
User johan = new User("Johan Lindskogen", "johanmail16");
db.insertUser(johan);
TaskList list = new TaskList("title");
List<Task> tasks = new ArrayList<Task>();
tasks.add(new Task("title1"));
tasks.add(new Task("title2"));
tasks.add(new Task("title3"));
for (Task task : tasks) {
list.add(task);
}
db.insertList(list, johan);
for (Task task : tasks) {
db.assignUserToTask(task.getId(), johan);
}
List<Task> taskList = db.getUserTasks(johan);
assertTrue("Tasks assigned to User are saved and got correctly", taskList.containsAll(tasks));
}
@Test
public void testGetUsers() throws Exception {
User johan1 = db.insertUser(new User("Johan", "johansmail17"));
User johan2 = db.insertUser(new User("Johan", "johansmail18"));
User johan3 = db.insertUser(new User("Johan", "johansmail19"));
TaskList list = db.insertList(new TaskList("title"), johan1);
db.assignUserToList(johan2,list.getId());
db.assignUserToList(johan3,list.getId());
List<User> users = db.getUsers(list.getId());
assertTrue("Users successfully added to the list", users.contains(johan1) &&
users.contains(johan2) && users.contains(johan3));
}
@Test
public void testRemoveUserFromList() throws Exception {
User johan = new User("Johan", "johanmail20");
db.insertUser(johan);
TaskList list = db.insertList(new TaskList("title"),johan);
User johan2 = new User("Johan2", "johanmail21");
db.insertUser(johan2);
db.assignUserToList(johan2, list.getId());
assertTrue("User successfully added to list", db.getUsers(list.getId()).contains(johan2));
db.removeUserFromList(johan2.getId(), list.getId());
assertFalse("User successfully removed from list", db.getUsers(list.getId()).contains(johan2));
}
@Test(expected = DataNotFoundException.class)
public void testRemoveUserAndDeleteList() throws Exception{
User johan = new User("Johan", "johanmail22");
User ville = new User("ville", "johanmail23");
db.insertUser(johan);
db.insertUser(ville);
TaskList list = db.insertList(new TaskList("title"), johan);
db.assignUserToList(ville, list.getId());
assertTrue("User successfully added to list", db.getUsers(list.getId()).contains(ville));
db.deleteList(list.getId());
assertFalse("User successfully removed from list", db.getUsers(list.getId()).contains(ville));
db.getList(list.getId());
}
}