package net.johnpwood.android.standuptimer.test; import java.util.GregorianCalendar; import net.johnpwood.android.standuptimer.R; import net.johnpwood.android.standuptimer.TeamDetails; import net.johnpwood.android.standuptimer.dao.DAOFactory; import net.johnpwood.android.standuptimer.dao.MeetingDAO; import net.johnpwood.android.standuptimer.dao.TeamDAO; import net.johnpwood.android.standuptimer.model.Meeting; import net.johnpwood.android.standuptimer.model.Team; import android.app.AlertDialog; import android.content.Context; import android.content.Intent; import android.test.ActivityInstrumentationTestCase2; import android.test.RenamingDelegatingContext; import android.test.TouchUtils; import android.test.suitebuilder.annotation.MediumTest; import android.view.KeyEvent; import android.widget.ListView; import android.widget.TabHost; import android.widget.TextView; public class TeamDetailsTest extends ActivityInstrumentationTestCase2<TeamDetails> { private TeamDetails a = null; private TeamDAO teamDao = null; private MeetingDAO meetingDao = null; private DAOFactory daoFactory = DAOFactory.getInstance(); public TeamDetailsTest() { super("net.johnpwood.android.standuptimer", TeamDetails.class); } @Override protected void setUp() throws Exception { super.setUp(); daoFactory.setCacheDAOInstances(true); } private void setUpWithoutTestData() { Intent intent = new Intent(); intent.putExtra("teamName", "Test Team"); setActivityIntent(intent); a = getActivity(); daoFactory.setGlobalContext(new RenamingDelegatingContext(a, "test_")); teamDao = daoFactory.getTeamDAO(a); meetingDao = daoFactory.getMeetingDAO(a); } private void setUpWithTestData() { createTestData(); setUpWithoutTestData(); } @Override protected void tearDown() throws Exception { teamDao.deleteAll(); meetingDao.deleteAll(); super.tearDown(); } @MediumTest public void test_should_show_no_stats_or_meetings_if_team_has_no_meetings() throws Throwable { setUpWithoutTestData(); assertEquals(a.getString(R.string.no_meeting_stats), ((TextView) a.findViewById(R.id.meeting_team_name_label)).getText()); runTestOnUiThread(new Runnable() { public void run() { TabHost tabHost = (TabHost) a.findViewById(android.R.id.tabhost); tabHost.setCurrentTabByTag("meetings_tab"); ListView meetingListView = (ListView) tabHost.getCurrentView(); assertTrue(meetingListView.getAdapter().isEmpty()); } }); } @MediumTest public void test_meetings_tab_should_list_the_teams_meetings() throws Throwable { setUpWithTestData(); runTestOnUiThread(new Runnable() { public void run() { TabHost tabHost = (TabHost) a.findViewById(android.R.id.tabhost); tabHost.setCurrentTabByTag("meetings_tab"); ListView meetingListView = (ListView) tabHost.getCurrentView(); assertEquals(5, meetingListView.getAdapter().getCount()); } }); } @MediumTest public void test_stats_tab_should_show_stats_for_the_team_meetings() { setUpWithTestData(); assertEquals("Test Team", ((TextView) a.findViewById(R.id.meeting_team_name)).getText()); assertEquals("5", ((TextView) a.findViewById(R.id.number_of_meetings)).getText()); assertEquals("5.4", ((TextView) a.findViewById(R.id.avg_number_of_participants)).getText()); assertEquals("7:35", ((TextView) a.findViewById(R.id.avg_individual_status_length)).getText()); assertEquals("8:00", ((TextView) a.findViewById(R.id.avg_meeting_length)).getText()); assertEquals("0:22", ((TextView) a.findViewById(R.id.avg_quickest_status)).getText()); assertEquals("1:35", ((TextView) a.findViewById(R.id.avg_longest_status)).getText()); } @MediumTest public void test_can_delete_an_existing_team() { setUpWithTestData(); sendKeys(KeyEvent.KEYCODE_MENU, KeyEvent.KEYCODE_D); TouchUtils.clickView(this, a.getConfirmDeleteTeamDialog().getButton(AlertDialog.BUTTON_POSITIVE)); assertNull(teamDao.findByName("Test Team")); } @MediumTest public void test_deleting_a_team_can_be_aborted() { setUpWithTestData(); sendKeys(KeyEvent.KEYCODE_MENU, KeyEvent.KEYCODE_D); TouchUtils.clickView(this, a.getConfirmDeleteTeamDialog().getButton(AlertDialog.BUTTON_NEGATIVE)); assertNotNull(teamDao.findByName("Test Team")); } private void createTestData() { Context context = new RenamingDelegatingContext(getInstrumentation().getTargetContext(), "test_"); TeamDAO teamFixturesDao = daoFactory.getTeamDAO(context); MeetingDAO meetingFixturesDao = daoFactory.getMeetingDAO(context); Team team = teamFixturesDao.save(new Team("Test Team")); meetingFixturesDao.save(new Meeting(team, new GregorianCalendar(2010, 1, 5, 10, 15, 0).getTime(), 5, 301, 343, 30, 65)); meetingFixturesDao.save(new Meeting(team, new GregorianCalendar(2010, 1, 6, 10, 17, 0).getTime(), 8, 534, 550, 32, 120)); meetingFixturesDao.save(new Meeting(team, new GregorianCalendar(2010, 1, 7, 10, 16, 0).getTime(), 2, 234, 300, 23, 122)); meetingFixturesDao.save(new Meeting(team, new GregorianCalendar(2010, 1, 8, 10, 14, 0).getTime(), 3, 765, 765, 15, 78)); meetingFixturesDao.save(new Meeting(team, new GregorianCalendar(2010, 1, 9, 10, 12, 0).getTime(), 9, 444, 445, 10, 93)); } }