package org.openlmis.core.view.viewmodel; import org.junit.Test; import org.junit.runner.RunWith; import org.openlmis.core.LMISTestRunner; import org.openlmis.core.manager.MovementReasonManager; import org.openlmis.core.model.Period; import org.openlmis.core.model.Program; import org.openlmis.core.model.ProgramDataForm; import org.openlmis.core.model.ProgramDataFormItem; import org.openlmis.core.model.Signature; import org.openlmis.core.model.builder.ProgramDataColumnBuilder; import org.openlmis.core.utils.Constants; import org.openlmis.core.utils.DateUtil; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import static org.assertj.core.util.Lists.newArrayList; import static org.hamcrest.core.Is.is; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertThat; import static org.junit.Assert.assertTrue; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; @RunWith(LMISTestRunner.class) public class RapidTestReportViewModelTest { RapidTestReportViewModel viewModel; @Test public void shouldConvertToDataModel() throws Exception { viewModel = new RapidTestReportViewModel(Period.of(DateUtil.parseString("2016-09-11", DateUtil.DB_DATE_FORMAT))); RapidTestFormItemViewModel itemViewModel = mock(RapidTestFormItemViewModel.class); List<RapidTestFormItemViewModel> itemViewModelList = Arrays.asList(itemViewModel); viewModel.setItemViewModelList(itemViewModelList); Program program = new Program(Constants.RAPID_TEST_CODE, "name", "", false, null); viewModel.convertFormViewModelToDataModel(program); verify(itemViewModel).convertToDataModel(); assertEquals(DateUtil.parseString("2016-08-21", DateUtil.DB_DATE_FORMAT), this.viewModel.getRapidTestForm().getPeriodBegin()); assertEquals(DateUtil.parseString("2016-09-20", DateUtil.DB_DATE_FORMAT), this.viewModel.getRapidTestForm().getPeriodEnd()); } @Test public void shouldSetRapidTestFormAndUpdateStatus() throws Exception { viewModel = new RapidTestReportViewModel(Period.of(DateUtil.parseString("2016-09-11", DateUtil.DB_DATE_FORMAT))); ProgramDataForm rapidTestForm = new ProgramDataForm(); rapidTestForm.setStatus(ProgramDataForm.STATUS.DRAFT); viewModel.setRapidTestForm(rapidTestForm); assertEquals(RapidTestReportViewModel.Status.INCOMPLETE, viewModel.getStatus()); rapidTestForm.setStatus(ProgramDataForm.STATUS.AUTHORIZED); viewModel.setRapidTestForm(rapidTestForm); assertEquals(RapidTestReportViewModel.Status.COMPLETED, viewModel.getStatus()); rapidTestForm.setStatus(ProgramDataForm.STATUS.SUBMITTED); viewModel.setRapidTestForm(rapidTestForm); assertEquals(RapidTestReportViewModel.Status.INCOMPLETE, viewModel.getStatus()); rapidTestForm.setStatus(ProgramDataForm.STATUS.AUTHORIZED); rapidTestForm.setSynced(true); viewModel.setRapidTestForm(rapidTestForm); assertEquals(RapidTestReportViewModel.Status.SYNCED, viewModel.getStatus()); } @Test public void shouldConvertViewModelAndUpdateDataModel() throws Exception { viewModel = new RapidTestReportViewModel(Period.of(DateUtil.parseString("2016-09-11", DateUtil.DB_DATE_FORMAT))); MovementReasonManager.MovementReason reason1 = new MovementReasonManager.MovementReason(MovementReasonManager.MovementType.ISSUE, "ACC_EMERGENCY", "Acc emergency"); RapidTestFormItemViewModel itemViewModel = new RapidTestFormItemViewModel(reason1); RapidTestFormGridViewModel gridViewModel = new RapidTestFormGridViewModel(RapidTestFormGridViewModel.ColumnCode.HIVDetermine); gridViewModel.setPositiveValue("100"); gridViewModel.setConsumptionValue("1200"); itemViewModel.setRapidTestFormGridViewModelList(newArrayList(gridViewModel)); List<RapidTestFormItemViewModel> itemViewModelList = newArrayList(itemViewModel); this.viewModel.setItemViewModelList(itemViewModelList); ProgramDataForm rapidTestForm = new ProgramDataForm(); rapidTestForm.setStatus(ProgramDataForm.STATUS.DRAFT); rapidTestForm.setPeriodBegin(this.viewModel.getPeriod().getBegin().toDate()); rapidTestForm.setPeriodEnd(this.viewModel.getPeriod().getEnd().toDate()); this.viewModel.setRapidTestForm(rapidTestForm); this.viewModel.getRapidTestForm().getProgramDataFormItemListWrapper().add(new ProgramDataFormItem("name", new ProgramDataColumnBuilder().setCode("code").build(), 100)); Program program = new Program(Constants.RAPID_TEST_CODE, "name", "", false, null); this.viewModel.convertFormViewModelToDataModel(program); assertThat(this.viewModel.getRapidTestForm().getProgramDataFormItemListWrapper().size(), is(2)); assertThat(this.viewModel.getRapidTestForm().getProgramDataFormItemListWrapper().get(0).getProgramDataColumn().getCode(), is("CONSUME_HIVDETERMINE")); assertThat(this.viewModel.getRapidTestForm().getProgramDataFormItemListWrapper().get(0).getForm(), is(viewModel.getRapidTestForm())); assertThat(this.viewModel.getRapidTestForm().getProgramDataFormItemListWrapper().get(1).getProgramDataColumn().getCode(), is("POSITIVE_HIVDETERMINE")); assertThat(this.viewModel.getRapidTestForm().getProgramDataFormItemListWrapper().get(1).getForm(), is(viewModel.getRapidTestForm())); } @Test public void shouldValidateItemList() throws Exception { viewModel = new RapidTestReportViewModel(Period.of(DateUtil.parseString("2016-09-11", DateUtil.DB_DATE_FORMAT))); RapidTestFormItemViewModel itemViewModel1 = mock(RapidTestFormItemViewModel.class); RapidTestFormItemViewModel itemViewModel2 = mock(RapidTestFormItemViewModel.class); when(itemViewModel1.validate()).thenReturn(true); when(itemViewModel2.validate()).thenReturn(false); viewModel.setItemViewModelList(new ArrayList<RapidTestFormItemViewModel>()); viewModel.getItemViewModelList().add(itemViewModel1); assertTrue(viewModel.validate()); viewModel.getItemViewModelList().add(itemViewModel2); assertFalse(viewModel.validate()); } @Test public void shouldReturnIsAuthorized() throws Exception { viewModel = new RapidTestReportViewModel(Period.of(DateUtil.parseString("2016-09-11", DateUtil.DB_DATE_FORMAT))); assertFalse(viewModel.isAuthorized()); } @Test public void shouldSetSignature() throws Exception { viewModel = new RapidTestReportViewModel(Period.of(DateUtil.parseString("2016-09-11", DateUtil.DB_DATE_FORMAT))); assertNull(viewModel.getRapidTestForm().getStatus()); viewModel.addSignature("submit"); assertEquals(Signature.TYPE.SUBMITTER, viewModel.getRapidTestForm().getSignaturesWrapper().get(0).getType()); assertEquals("submit", viewModel.getRapidTestForm().getSignaturesWrapper().get(0).getSignature()); viewModel.addSignature("authorize"); assertEquals(Signature.TYPE.APPROVER, viewModel.getRapidTestForm().getSignaturesWrapper().get(1).getType()); assertEquals("authorize", viewModel.getRapidTestForm().getSignaturesWrapper().get(1).getSignature()); assertNotNull(viewModel.getRapidTestForm().getSubmittedTime()); } @Test public void shouldUpdateTotal() throws Exception { viewModel = new RapidTestReportViewModel(Period.of(DateUtil.parseString("2016-09-11", DateUtil.DB_DATE_FORMAT))); viewModel.getItemViewModelList().get(0).getGridHIVDetermine().setConsumptionValue("100"); viewModel.updateTotal(RapidTestFormGridViewModel.ColumnCode.HIVDetermine, true); assertEquals("100", viewModel.getItemTotal().getGridHIVDetermine().getConsumptionValue()); viewModel.getItemViewModelList().get(1).getGridHIVDetermine().setConsumptionValue("2333"); viewModel.updateTotal(RapidTestFormGridViewModel.ColumnCode.HIVDetermine, true); assertEquals("2433", viewModel.getItemTotal().getGridHIVDetermine().getConsumptionValue()); } }