/*
* Electronic Logistics Management Information System (eLMIS) is a supply chain management system for health commodities in a developing country setting.
*
* Copyright (C) 2015 John Snow, Inc (JSI). This program was produced for the U.S. Agency for International Development (USAID). It was prepared under the USAID | DELIVER PROJECT, Task Order 4.
*
* This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package org.openlmis.ivdform.service.report;
import org.junit.Before;
import org.junit.Test;
import org.junit.experimental.categories.Category;
import org.junit.runner.RunWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.runners.MockitoJUnitRunner;
import org.openlmis.db.categories.UnitTests;
import org.openlmis.ivdform.domain.reports.*;
import org.openlmis.ivdform.repository.reports.*;
import org.openlmis.ivdform.service.LineItemService;
import static java.util.Arrays.asList;
import static org.mockito.Mockito.verify;
@Category(UnitTests.class)
@RunWith(MockitoJUnitRunner.class)
public class LineItemServiceTest {
@Mock
LogisticsLineItemRepository logisticsRepository;
@Mock
DiseaseLineItemRepository diseaseLineItemRepository;
@Mock
CoverageItemRepository coverageItemRepository;
@Mock
AdverseEffectLineItemRepository adverseLineItemRepository;
@Mock
CampaignLineItemRepository campaignLineItemRepository;
@Mock
ColdChainLineItemRepository coldChainRepository;
@Mock
VitaminSupplementationLineItemRepository vitaminSupplementationLineItemRepository;
@InjectMocks
LineItemService service;
VaccineReport dbReport;
@Before
public void setUp() throws Exception {
dbReport = new VaccineReport();
dbReport.setId(2L);
}
@Test
public void shouldInsertLogisticsLineItems() throws Exception {
LogisticsLineItem lineItem = new LogisticsLineItem();
lineItem.setReportId(2L);
service.saveLogisticsLineItems(null, asList(lineItem), 2L, 1L);
verify(logisticsRepository).insert(lineItem);
}
@Test
public void shouldUpdateLogisticsLineItems() throws Exception {
LogisticsLineItem lineItem = new LogisticsLineItem();
lineItem.setReportId(2L);
lineItem.setId(2L);
lineItem.setProductId(23L);
dbReport.setLogisticsLineItems(asList(lineItem));
service.saveLogisticsLineItems(dbReport, asList(lineItem), 2L, 1L);
verify(logisticsRepository).update(lineItem);
}
@Test
public void shouldInsertDiseaseLineItems() throws Exception {
DiseaseLineItem lineItem = new DiseaseLineItem();
lineItem.setReportId(2L);
service.saveDiseaseLineItems(null, asList(lineItem), 2L);
verify(diseaseLineItemRepository).insert(lineItem);
}
@Test
public void shouldUpdateDiseaseLineItems() throws Exception {
DiseaseLineItem lineItem = new DiseaseLineItem();
lineItem.setId(2L);
lineItem.setReportId(2L);
dbReport.setDiseaseLineItems(asList(lineItem));
service.saveDiseaseLineItems(dbReport, asList(lineItem), 2L);
verify(diseaseLineItemRepository).update(lineItem);
}
@Test
public void shouldInsertCoverageLineItems() throws Exception {
VaccineCoverageItem lineItem = new VaccineCoverageItem();
lineItem.setReportId(2L);
service.saveCoverageLineItems(null, asList(lineItem), 2L, 2L);
verify(coverageItemRepository).insert(lineItem);
}
@Test
public void shouldUpdateCoverageLineItems() throws Exception {
VaccineCoverageItem lineItem = new VaccineCoverageItem();
lineItem.setReportId(2L);
lineItem.setId(2L);
lineItem.setDoseId(2L);
lineItem.setProductId(34L);
dbReport.setCoverageLineItems(asList(lineItem));
service.saveCoverageLineItems(dbReport, asList(lineItem), 2L, 2L);
verify(coverageItemRepository).update(lineItem);
}
@Test
public void shouldSaveAdverseEffectLineItems() throws Exception {
AdverseEffectLineItem lineItem = new AdverseEffectLineItem();
lineItem.setReportId(2L);
service.saveAdverseEffectLineItems(dbReport, asList(lineItem), 2L,2L);
verify(adverseLineItemRepository).insert(lineItem);
}
@Test
public void shouldUpdateAdverseEffectLineItems() throws Exception {
AdverseEffectLineItem lineItem = new AdverseEffectLineItem();
lineItem.setReportId(2L);
lineItem.setId(3L);
service.saveAdverseEffectLineItems(dbReport, asList(lineItem), 2L, 2L);
verify(adverseLineItemRepository).deleteLineItems(2L);
verify(adverseLineItemRepository).insert(lineItem);
}
@Test
public void shouldInsertCampaignLineItems() throws Exception {
CampaignLineItem lineItem = new CampaignLineItem();
lineItem.setReportId(2L);
service.saveCampaignLineItems(null, asList(lineItem), 2L, 2L);
verify(campaignLineItemRepository).insert(lineItem);
}
@Test
public void shouldUpdateCampaignLineItems() throws Exception {
CampaignLineItem lineItem = new CampaignLineItem();
lineItem.setReportId(2L);
lineItem.setId(2L);
service.saveCampaignLineItems(dbReport, asList(lineItem), 2L, 2L);
verify(campaignLineItemRepository).update(lineItem);
}
@Test
public void shouldSaveColdChainLIneItems() throws Exception {
ColdChainLineItem lineItem = new ColdChainLineItem();
lineItem.setReportId(2L);
service.saveColdChainLIneItems(null, asList(lineItem), 2L,2L);
verify(coldChainRepository).insert(lineItem);
}
@Test
public void shouldUpdateColdChainLIneItems() throws Exception {
ColdChainLineItem lineItem = new ColdChainLineItem();
lineItem.setId(3L);
lineItem.setReportId(2L);
lineItem.setEquipmentInventoryId(30L);
dbReport.setColdChainLineItems(asList(lineItem));
service.saveColdChainLIneItems(dbReport, asList(lineItem), 2L, 2L);
verify(coldChainRepository).update(lineItem);
}
@Test
public void shouldInsertVitaminLineItems() throws Exception {
VitaminSupplementationLineItem lineItem = new VitaminSupplementationLineItem();
lineItem.setReportId(2L);
service.saveVitaminLineItems(null, asList(lineItem), 2L, 2L);
verify(vitaminSupplementationLineItemRepository).insert(lineItem);
}
@Test
public void shouldUpdateVitaminLineItems() throws Exception {
VitaminSupplementationLineItem lineItem = new VitaminSupplementationLineItem();
lineItem.setId(3L);
lineItem.setVitaminAgeGroupId(2L);
lineItem.setVaccineVitaminId(3L);
lineItem.setReportId(2L);
dbReport.setVitaminSupplementationLineItems(asList(lineItem));
service.saveVitaminLineItems(dbReport, asList(lineItem), 2L, 2L);
verify(vitaminSupplementationLineItemRepository).update(lineItem);
}
}