package es.usc.citius.servando.calendula.activities;
import android.content.Intent;
import android.support.test.InstrumentationRegistry;
import android.test.ActivityInstrumentationTestCase2;
import org.joda.time.LocalTime;
import org.junit.Before;
import org.junit.Test;
import es.usc.citius.servando.calendula.CalendulaApp;
import es.usc.citius.servando.calendula.R;
import es.usc.citius.servando.calendula.database.DB;
import es.usc.citius.servando.calendula.fragments.RoutineCreateOrEditFragment;
import es.usc.citius.servando.calendula.persistence.Routine;
import es.usc.citius.servando.calendula.util.TestUtils;
import static android.support.test.espresso.Espresso.onView;
import static android.support.test.espresso.action.ViewActions.clearText;
import static android.support.test.espresso.action.ViewActions.click;
import static android.support.test.espresso.action.ViewActions.typeText;
import static android.support.test.espresso.assertion.ViewAssertions.matches;
import static android.support.test.espresso.matcher.ViewMatchers.isDisplayed;
import static android.support.test.espresso.matcher.ViewMatchers.withId;
import static android.support.test.espresso.matcher.ViewMatchers.withText;
public class RoutinesActivityEditTest extends ActivityInstrumentationTestCase2<RoutinesActivity> {
public static final String NAME_BEFORE_EDIT = "Breakfast";
public static final String NAME_AFTER_EDIT = "Lunch";
private RoutinesActivity mActivity;
public RoutinesActivityEditTest() {
super(RoutinesActivity.class);
}
@Before
public void setUp() throws Exception {
super.setUp();
CalendulaApp.disableReceivers = true;
injectInstrumentation(InstrumentationRegistry.getInstrumentation());
DB.init(getInstrumentation().getContext());
DB.dropAndCreateDatabase();
// create medicine
Routine created = new Routine(new LocalTime(10, 15), NAME_BEFORE_EDIT);
created.save();
// set edit intent
Intent i = new Intent();
i.putExtra(CalendulaApp.INTENT_EXTRA_ROUTINE_ID, created.getId());
setActivityIntent(i);
mActivity = getActivity();
}
@Test
public void testActivityCreated() {
assertNotNull(mActivity);
}
@Test
public void testEditMedicine() {
assertEquals(1, DB.routines().count());
assertEquals(NAME_BEFORE_EDIT, DB.routines().findAll().get(0).name());
// type name
onView(withId(R.id.routine_edit_name)).perform(clearText()).perform(typeText(NAME_AFTER_EDIT));
// close Soft Keyboard
TestUtils.closeKeyboard();
// set routine time (not possible vía UI)
setTimepickerTime(20, 00);
// open time picker
onView(withId(R.id.button2)).perform(click());
// check its open
onView(withId(R.id.done_button)).check(matches(isDisplayed()));
// press done
onView(withId(R.id.done_button)).perform(click());
// check button has the correct time
onView(withId(R.id.button2)).check(matches(withText("20:00")));
// click save
onView(withId(R.id.add_button)).perform(click());
// find edited routine and do assertions
Routine r = DB.routines().findOneBy(Routine.COLUMN_NAME, NAME_AFTER_EDIT);
assertEquals(1, DB.routines().count());
assertNotNull(r);
assertEquals(NAME_AFTER_EDIT, r.name());
assertEquals(new LocalTime(20, 0), r.time());
}
private void setTimepickerTime(final int hour, final int minute) {
mActivity.runOnUiThread(new Runnable() {
@Override
public void run() {
RoutineCreateOrEditFragment f = (RoutineCreateOrEditFragment) mActivity.getViewPagerFragment(0);
f.onDialogTimeSet(0, hour, minute);
}
});
}
}