package net.johnpwood.android.standuptimer.test;
import net.johnpwood.android.standuptimer.Prefs;
import net.johnpwood.android.standuptimer.R;
import net.johnpwood.android.standuptimer.mock.ConfigureStandupTimerMock;
import org.easymock.EasyMock;
import android.content.Intent;
import android.test.ActivityUnitTestCase;
import android.test.suitebuilder.annotation.MediumTest;
import android.view.MenuItem;
import android.widget.Button;
import android.widget.Spinner;
import android.widget.TextView;
public class ConfigureStandupTimerTest extends ActivityUnitTestCase<ConfigureStandupTimerMock> {
private ConfigureStandupTimerMock a = null;
public ConfigureStandupTimerTest() {
super(ConfigureStandupTimerMock.class);
}
@Override
protected void setUp() throws Exception {
super.setUp();
Intent intent = new Intent(Intent.ACTION_MAIN);
a = startActivity(intent, null, null);
Prefs.setAllowUnlimitedParticipants(a, false);
Prefs.setAllowVariableMeetingLength(a, false);
a.onResume();
}
@MediumTest
public void test_less_than_1_meeting_participants_displays_error_dialog() {
TextView t = (TextView) a.findViewById(R.id.num_participants);
t.setText("0");
Button b = (Button) a.findViewById(R.id.start_button);
b.performClick();
assertTrue(a.showInvalidNumberOfParticipantsDialogCalled());
assertFalse(a.startTimerCalled());
}
@MediumTest
public void test_greater_than_20_meeting_participants_displays_error_dialog_if_unlimited_participants_not_allowed() {
TextView t = (TextView) a.findViewById(R.id.num_participants);
t.setText("21");
Button b = (Button) a.findViewById(R.id.start_button);
b.performClick();
assertTrue(a.showInvalidNumberOfParticipantsDialogCalled());
assertFalse(a.startTimerCalled());
}
@MediumTest
public void test_greater_than_20_meeting_participants_succeeds_if_unlimited_participants_is_allowed() {
Prefs.setAllowUnlimitedParticipants(a, true);
TextView t = (TextView) a.findViewById(R.id.num_participants);
t.setText("21");
Button b = (Button) a.findViewById(R.id.start_button);
b.performClick();
assertFalse(a.showInvalidNumberOfParticipantsDialogCalled());
assertTrue(a.startTimerCalled());
}
@MediumTest
public void test_valud_number_of_meeting_participants_starts_the_timer() {
TextView t = (TextView) a.findViewById(R.id.num_participants);
t.setText("11");
Button b = (Button) a.findViewById(R.id.start_button);
b.performClick();
assertFalse(a.showInvalidNumberOfParticipantsDialogCalled());
assertTrue(a.startTimerCalled());
}
@MediumTest
public void test_state_is_saved_when_timer_is_started() {
TextView t = (TextView) a.findViewById(R.id.num_participants);
t.setText("13");
Spinner s = a.getMeetingLengthSpinner();
s.setSelection(2);
Spinner s2 = (Spinner) a.findViewById(R.id.team_names);
s2.setSelection(0);
Button b = (Button) a.findViewById(R.id.start_button);
b.performClick();
a.loadState();
assertEquals(13, a.getNumParticipants());
assertEquals(15, a.getMeetingLength());
assertEquals(0, a.getTeamNamesPos());
}
@MediumTest
public void test_specifying_an_invalid_number_of_participants_shouldnt_crash_the_app() {
Prefs.setAllowUnlimitedParticipants(a, true);
TextView t = (TextView) a.findViewById(R.id.num_participants);
t.setText("2198723498239487239487234987");
Button b = (Button) a.findViewById(R.id.start_button);
b.performClick();
assertFalse(a.showInvalidNumberOfParticipantsDialogCalled());
assertTrue(a.startTimerCalled());
}
@MediumTest
public void test_starting_a_meeting_with_a_non_traditional_meeting_length() {
Prefs.setAllowVariableMeetingLength(a, true);
a.onResume();
TextView numParticipants = (TextView) a.findViewById(R.id.num_participants);
numParticipants.setText("11");
TextView meetingLength = a.getMeetingLengthEditText();
meetingLength.setText("13");
Button b = (Button) a.findViewById(R.id.start_button);
b.performClick();
assertFalse(a.showInvalidNumberOfParticipantsDialogCalled());
assertTrue(a.startTimerCalled());
assertEquals(13, a.getIntent().getIntExtra("meetingLength", 0));
}
@MediumTest
public void test_specifying_an_invalid_meeting_length_shouldnt_crash_the_app() {
Prefs.setAllowVariableMeetingLength(a, true);
a.onResume();
TextView numParticipants = (TextView) a.findViewById(R.id.num_participants);
numParticipants.setText("11");
TextView meetingLength = a.getMeetingLengthEditText();
meetingLength.setText("2198723498239487239487234987");
Button b = (Button) a.findViewById(R.id.start_button);
b.performClick();
assertFalse(a.showInvalidNumberOfParticipantsDialogCalled());
assertTrue(a.startTimerCalled());
}
@MediumTest
public void test_about_box_displayed_successfully() {
MenuItem menuItem = EasyMock.createMock(MenuItem.class);
EasyMock.expect(menuItem.getItemId()).andReturn(R.id.about);
EasyMock.replay(menuItem);
a.onOptionsItemSelected(menuItem);
assertTrue(a.displayAboutBoxCalled());
assertFalse(a.displayHelpDialogCalled());
assertFalse(a.displaySettingsCalled());
assertFalse(isFinishCalled());
EasyMock.verify(menuItem);
}
@MediumTest
public void test_help_dialog_displayed_successfully() {
MenuItem menuItem = EasyMock.createMock(MenuItem.class);
EasyMock.expect(menuItem.getItemId()).andReturn(R.id.help);
EasyMock.replay(menuItem);
a.onOptionsItemSelected(menuItem);
assertFalse(a.displayAboutBoxCalled());
assertTrue(a.displayHelpDialogCalled());
assertFalse(a.displaySettingsCalled());
assertFalse(isFinishCalled());
assertFalse(a.displayTeamConfigurationCalled());
EasyMock.verify(menuItem);
}
@MediumTest
public void test_settings_displayed_successfully() {
MenuItem menuItem = EasyMock.createMock(MenuItem.class);
EasyMock.expect(menuItem.getItemId()).andReturn(R.id.settings);
EasyMock.replay(menuItem);
a.onOptionsItemSelected(menuItem);
assertFalse(a.displayAboutBoxCalled());
assertFalse(a.displayHelpDialogCalled());
assertTrue(a.displaySettingsCalled());
assertFalse(isFinishCalled());
assertFalse(a.displayTeamConfigurationCalled());
EasyMock.verify(menuItem);
}
@MediumTest
public void test_team_configuration_displayed_successfully() {
MenuItem menuItem = EasyMock.createMock(MenuItem.class);
EasyMock.expect(menuItem.getItemId()).andReturn(R.id.teams);
EasyMock.replay(menuItem);
a.onOptionsItemSelected(menuItem);
assertFalse(a.displayAboutBoxCalled());
assertFalse(a.displaySettingsCalled());
assertFalse(isFinishCalled());
assertTrue(a.displayTeamConfigurationCalled());
EasyMock.verify(menuItem);
}
}