package org.openlmis.core.view.widget; import android.view.View; import com.google.inject.Binder; import com.google.inject.Module; 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.exceptions.LMISException; import org.openlmis.core.model.Period; import org.openlmis.core.model.service.RequisitionPeriodService; import org.openlmis.core.utils.Constants; import org.robolectric.RuntimeEnvironment; import roboguice.RoboGuice; import static org.hamcrest.core.Is.is; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertThat; import static org.mockito.Matchers.anyString; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; @RunWith(LMISTestRunner.class) public class IncompleteRequisitionBannerTest { protected IncompleteRequisitionBanner incompleteRequisitionBanner; RequisitionPeriodService requisitionPeriodService; @Before public void setUp() throws Exception { requisitionPeriodService = mock(RequisitionPeriodService.class); RoboGuice.overrideApplicationInjector(RuntimeEnvironment.application, new Module() { @Override public void configure(Binder binder) { binder.bind(RequisitionPeriodService.class).toInstance(requisitionPeriodService); } }); } @Test public void shouldNotShowBannerWhenThereIsMissedRequisition() throws LMISException { when(requisitionPeriodService.hasMissedPeriod(anyString())).thenReturn(false); incompleteRequisitionBanner = new IncompleteRequisitionBanner(LMISTestApp.getContext()); assertEquals(incompleteRequisitionBanner.getVisibility(), View.GONE); } @Test public void shouldShowMultipleMissedMmiaAndViaRequisitionBanner() throws LMISException { when(requisitionPeriodService.hasMissedPeriod(anyString())).thenReturn(true); when(requisitionPeriodService.getIncompletePeriodOffsetMonth(Constants.VIA_PROGRAM_CODE)).thenReturn(2); when(requisitionPeriodService.getIncompletePeriodOffsetMonth(Constants.MMIA_PROGRAM_CODE)).thenReturn(2); incompleteRequisitionBanner = new IncompleteRequisitionBanner(LMISTestApp.getContext()); assertThat(incompleteRequisitionBanner.txMissedRequisition.getText().toString(), is("Your MMIA and VIA requisitions for multiple periods have not been completed")); } @Test public void shouldShowMultipleMissedViaRequisitionBanner() throws LMISException { when(requisitionPeriodService.hasMissedPeriod(anyString())).thenReturn(true); when(requisitionPeriodService.getIncompletePeriodOffsetMonth(Constants.VIA_PROGRAM_CODE)).thenReturn(2); when(requisitionPeriodService.getIncompletePeriodOffsetMonth(Constants.MMIA_PROGRAM_CODE)).thenReturn(0); incompleteRequisitionBanner = new IncompleteRequisitionBanner(LMISTestApp.getContext()); assertThat(incompleteRequisitionBanner.txMissedRequisition.getText().toString(), is("Your VIA requisitions for multiple periods have not been completed")); } @Test public void shouldShowMultipleMissedMmiaRequisitionBanner() throws LMISException { when(requisitionPeriodService.hasMissedPeriod(anyString())).thenReturn(true); when(requisitionPeriodService.getIncompletePeriodOffsetMonth(Constants.VIA_PROGRAM_CODE)).thenReturn(0); when(requisitionPeriodService.getIncompletePeriodOffsetMonth(Constants.MMIA_PROGRAM_CODE)).thenReturn(2); incompleteRequisitionBanner = new IncompleteRequisitionBanner(LMISTestApp.getContext()); assertThat(incompleteRequisitionBanner.txMissedRequisition.getText().toString(), is("Your MMIA for multiple periods have not been completed")); } @Test public void shouldShowSingleMissedViaRequisitionBanner() throws LMISException { Period period = new Period(new DateTime(DateTime.parse("2016-05-18"))); when(requisitionPeriodService.hasMissedPeriod(anyString())).thenReturn(true); when(requisitionPeriodService.getIncompletePeriodOffsetMonth(Constants.VIA_PROGRAM_CODE)).thenReturn(1); when(requisitionPeriodService.getMissedPeriodOffsetMonth(Constants.MMIA_PROGRAM_CODE)).thenReturn(0); when(requisitionPeriodService.generateNextPeriod(Constants.VIA_PROGRAM_CODE, null)).thenReturn(period); incompleteRequisitionBanner = new IncompleteRequisitionBanner(LMISTestApp.getContext()); assertThat(incompleteRequisitionBanner.txMissedRequisition.getText().toString(), is("Your VIA requisition for April 2016 to May 2016 has not been completed")); } @Test public void shouldShowSingleMissedMmiaRequisitionBanner() throws LMISException { Period period = new Period(new DateTime(DateTime.parse("2016-05-18"))); when(requisitionPeriodService.hasMissedPeriod(anyString())).thenReturn(true); when(requisitionPeriodService.getIncompletePeriodOffsetMonth(Constants.VIA_PROGRAM_CODE)).thenReturn(0); when(requisitionPeriodService.getIncompletePeriodOffsetMonth(Constants.MMIA_PROGRAM_CODE)).thenReturn(1); when(requisitionPeriodService.generateNextPeriod(Constants.MMIA_PROGRAM_CODE, null)).thenReturn(period); incompleteRequisitionBanner = new IncompleteRequisitionBanner(LMISTestApp.getContext()); assertThat(incompleteRequisitionBanner.txMissedRequisition.getText().toString(), is("Your MMIA for April 2016 to May 2016 has not been completed")); } @Test public void shouldShowSingleMissedViaAndMmiaRequisitionBanner() throws LMISException { Period period = new Period(new DateTime(DateTime.parse("2016-05-18"))); when(requisitionPeriodService.hasMissedPeriod(anyString())).thenReturn(true); when(requisitionPeriodService.getIncompletePeriodOffsetMonth(Constants.VIA_PROGRAM_CODE)).thenReturn(1); when(requisitionPeriodService.getIncompletePeriodOffsetMonth(Constants.MMIA_PROGRAM_CODE)).thenReturn(1); when(requisitionPeriodService.generateNextPeriod(Constants.VIA_PROGRAM_CODE, null)).thenReturn(period); incompleteRequisitionBanner = new IncompleteRequisitionBanner(LMISTestApp.getContext()); assertThat(incompleteRequisitionBanner.txMissedRequisition.getText().toString(), is("Your MMIA and VIA requisitions for April 2016 to May 2016 have not been completed")); } }