package net.johnpwood.android.standuptimer.test.dao;
import java.util.GregorianCalendar;
import java.util.List;
import net.johnpwood.android.standuptimer.dao.CannotUpdateMeetingException;
import net.johnpwood.android.standuptimer.dao.MeetingDAO;
import net.johnpwood.android.standuptimer.model.Meeting;
import net.johnpwood.android.standuptimer.model.Team;
import android.test.AndroidTestCase;
import android.test.RenamingDelegatingContext;
import android.test.suitebuilder.annotation.MediumTest;
public class MeetingDAOTest extends AndroidTestCase {
private MeetingDAO dao = null;
@Override
protected void setUp() {
dao = new MeetingDAO(new RenamingDelegatingContext(mContext, "test_"));
}
@Override
protected void tearDown() {
dao.deleteAll();
dao.close();
}
@MediumTest
public void test_create_a_meeting() {
Meeting meeting = new Meeting(new Team("Test Team"), new GregorianCalendar(2010, 1, 5, 10, 15, 0).getTime(), 5, 240, 300, 30, 120);
meeting = dao.save(meeting);
assertNotNull(meeting.getId());
meeting = dao.findById(meeting.getId());
assertEquals("Test Team", meeting.getTeam().getName());
assertEquals(new GregorianCalendar(2010, 1, 5, 10, 15, 0).getTime(), meeting.getDateTime());
assertEquals(5f, meeting.getMeetingStats().getNumParticipants());
assertEquals(240.f, meeting.getMeetingStats().getIndividualStatusLength());
assertEquals(300f, meeting.getMeetingStats().getMeetingLength());
assertEquals(30f, meeting.getMeetingStats().getQuickestStatus());
assertEquals(120f, meeting.getMeetingStats().getLongestStatus());
}
@MediumTest
public void test_cannot_update_a_meeting_that_has_already_been_created() {
Meeting meeting = new Meeting(new Team("Test Team"), new GregorianCalendar(2010, 1, 5, 10, 15, 0).getTime(), 5, 240, 300, 30, 120);
meeting = dao.save(meeting);
try {
dao.save(meeting);
fail("Should have thrown an exception");
} catch (CannotUpdateMeetingException e) {
assertTrue(true);
}
}
@MediumTest
public void test_find_all_meetings_by_team_in_cronological_order() {
Team team = new Team("Test Team");
dao.save(new Meeting(team, new GregorianCalendar(2010, 1, 5, 10, 15, 0).getTime(), 5, 240, 300, 30, 120));
dao.save(new Meeting(team, new GregorianCalendar(2010, 1, 4, 10, 15, 0).getTime(), 5, 240, 300, 30, 120));
dao.save(new Meeting(team, new GregorianCalendar(2010, 1, 7, 10, 15, 0).getTime(), 5, 240, 300, 30, 120));
dao.save(new Meeting(team, new GregorianCalendar(2010, 1, 1, 10, 15, 0).getTime(), 5, 240, 300, 30, 120));
dao.save(new Meeting(team, new GregorianCalendar(2010, 1, 2, 10, 15, 0).getTime(), 5, 240, 300, 30, 120));
List<Meeting> meetings = dao.findAllByTeam(team);
assertEquals(5, meetings.size());
assertEquals(new GregorianCalendar(2010, 1, 7, 10, 15, 0).getTime(), meetings.get(0).getDateTime());
assertEquals(new GregorianCalendar(2010, 1, 5, 10, 15, 0).getTime(), meetings.get(1).getDateTime());
assertEquals(new GregorianCalendar(2010, 1, 4, 10, 15, 0).getTime(), meetings.get(2).getDateTime());
assertEquals(new GregorianCalendar(2010, 1, 2, 10, 15, 0).getTime(), meetings.get(3).getDateTime());
assertEquals(new GregorianCalendar(2010, 1, 1, 10, 15, 0).getTime(), meetings.get(4).getDateTime());
}
@MediumTest
public void test_delete_a_single_meeting() {
Meeting meeting = new Meeting(new Team("Test Team"), new GregorianCalendar(2010, 1, 5, 10, 15, 0).getTime(), 5, 240, 300, 30, 120);
meeting = dao.save(meeting);
meeting = dao.findById(meeting.getId());
assertNotNull(meeting.getId());
dao.delete(meeting);
meeting = dao.findById(meeting.getId());
assertNull(meeting);
}
@MediumTest
public void test_find_by_team_and_date() {
Team team = new Team("Test Team");
dao.save(new Meeting(team, new GregorianCalendar(2010, 1, 5, 10, 15, 0).getTime(), 5, 240, 300, 30, 120));
dao.save(new Meeting(team, new GregorianCalendar(2010, 1, 4, 10, 15, 0).getTime(), 5, 240, 300, 30, 120));
Meeting expected = dao.save(new Meeting(team, new GregorianCalendar(2010, 1, 7, 10, 15, 0).getTime(), 5, 240, 300, 30, 120));
dao.save(new Meeting(team, new GregorianCalendar(2010, 1, 1, 10, 15, 0).getTime(), 5, 240, 300, 30, 120));
dao.save(new Meeting(team, new GregorianCalendar(2010, 1, 2, 10, 15, 0).getTime(), 5, 240, 300, 30, 120));
Meeting actual = dao.findByTeamAndDate(team, new GregorianCalendar(2010, 1, 7, 10, 15, 0).getTime());
assertEquals(expected.getId(), actual.getId());
}
@MediumTest
public void test_delete_all_by_team() {
Team team = new Team("Test Team");
dao.save(new Meeting(team, new GregorianCalendar(2010, 1, 5, 10, 15, 0).getTime(), 5, 240, 300, 30, 120));
dao.save(new Meeting(team, new GregorianCalendar(2010, 1, 4, 10, 15, 0).getTime(), 5, 240, 300, 30, 120));
assertFalse(dao.findAllByTeam(team).isEmpty());
dao.deleteAllByTeam(team);
assertTrue(dao.findAllByTeam(team).isEmpty());
}
}