package org.openlmis.core.view.activity; import android.app.Activity; import android.content.Intent; import android.text.Html; import android.text.Spanned; import android.view.View; import com.google.inject.AbstractModule; import org.joda.time.DateTime; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.openlmis.core.LMISTestApp; import org.openlmis.core.LMISTestRunner; import org.openlmis.core.R; import org.openlmis.core.model.Inventory; import org.openlmis.core.presenter.SelectPeriodPresenter; import org.openlmis.core.utils.Constants; import org.openlmis.core.view.viewmodel.SelectInventoryViewModel; import org.openlmis.core.view.widget.SingleClickButtonListener; import org.robolectric.Robolectric; import org.robolectric.RuntimeEnvironment; import java.util.ArrayList; import java.util.Arrays; import java.util.Date; import java.util.List; import roboguice.RoboGuice; import static junit.framework.Assert.assertTrue; import static org.hamcrest.Matchers.is; import static org.junit.Assert.assertThat; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; import static org.robolectric.Shadows.shadowOf; @RunWith(LMISTestRunner.class) public class SelectPeriodActivityTest { private SelectPeriodPresenter mockedPresenter; private SelectPeriodActivity selectPeriodActivity; private DateTime currentDateTime; private List<SelectInventoryViewModel> inventoryList=new ArrayList<>(); @Before public void setUp() throws Exception { currentDateTime = new DateTime("2016-02-04"); LMISTestApp.getInstance().setCurrentTimeMillis(currentDateTime.getMillis()); mockedPresenter = mock(SelectPeriodPresenter.class); RoboGuice.overrideApplicationInjector(RuntimeEnvironment.application, new AbstractModule() { @Override protected void configure() { bind(SelectPeriodPresenter.class).toInstance(mockedPresenter); } }); Intent intent = new Intent(); intent.putExtra(Constants.PARAM_PROGRAM_CODE, "MMIA"); intent.putExtra(Constants.PARAM_IS_MISSED_PERIOD, true); selectPeriodActivity = Robolectric.buildActivity(SelectPeriodActivity.class).withIntent(intent).create().get(); List<SelectInventoryViewModel> selectInventoryViewModels = Arrays.asList( new SelectInventoryViewModel(generateInventoryWithDate(new DateTime("2016-01-25").toDate())), new SelectInventoryViewModel(generateInventoryWithDate(new DateTime("2016-01-22").toDate())), new SelectInventoryViewModel(generateInventoryWithDate(new DateTime("2016-01-19").toDate())) ); inventoryList.addAll(selectInventoryViewModels); } @Test public void shouldShowFormattedInstrumentTextAndLoadDataWhenActivityStarts() throws Exception { Spanned expectedFormattedText = Html.fromHtml(RuntimeEnvironment.application.getString( R.string.label_select_close_of_period, currentDateTime.monthOfYear().getAsShortText(), currentDateTime.toString("dd MMM"))); verify(mockedPresenter).loadData("MMIA"); assertThat(selectPeriodActivity.tvInstruction.getText().toString(), is(expectedFormattedText.toString())); } @Test public void shouldInVisibleWarningWhenUserChoseTheInventory() throws Exception { LMISTestApp.getInstance().setCurrentTimeMillis(100000); SingleClickButtonListener.isViewClicked = false; selectPeriodActivity.refreshDate(inventoryList); shadowOf(selectPeriodActivity.vgContainer).performItemClick(2); assertThat(selectPeriodActivity.tvSelectPeriodWarning.getVisibility(), is(View.INVISIBLE)); selectPeriodActivity.nextBtn.performClick(); assertTrue(selectPeriodActivity.isFinishing()); assertThat(shadowOf(selectPeriodActivity).getResultCode(), is(Activity.RESULT_OK)); Date selectedDate = (Date) shadowOf(selectPeriodActivity).getResultIntent().getSerializableExtra(Constants.PARAM_SELECTED_INVENTORY_DATE); assertThat(selectedDate, is(new DateTime("2016-01-19").toDate())); } @Test public void shouldCheckedDefaultInventoryDay() throws Exception { inventoryList.get(1).setChecked(true); selectPeriodActivity.refreshDate(inventoryList); assertThat(selectPeriodActivity.vgContainer.getCheckedItemPosition(), is(1)); } private Inventory generateInventoryWithDate(Date date) { Inventory inventory = new Inventory(); inventory.setCreatedAt(date); inventory.setUpdatedAt(date); return inventory; } }