package org.openlmis.core.model.repository; import android.support.annotation.NonNull; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.openlmis.core.LMISRepositoryUnitTest; import org.openlmis.core.LMISTestRunner; import org.openlmis.core.exceptions.LMISException; import org.openlmis.core.model.Product; import org.openlmis.core.model.Program; import org.openlmis.core.model.RnRForm; import org.openlmis.core.model.RnrFormItem; import org.openlmis.core.model.builder.ProductBuilder; import org.robolectric.RuntimeEnvironment; import java.util.ArrayList; import java.util.List; import roboguice.RoboGuice; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.core.Is.is; import static org.roboguice.shaded.goole.common.collect.Lists.newArrayList; @RunWith(LMISTestRunner.class) public class RnrFormItemRepositoryTest extends LMISRepositoryUnitTest { RnrFormItemRepository rnrFormItemRepository; private RnrFormRepository rnrFormRepository; ProductRepository productRepository; ProgramRepository programRepository; ProductProgramRepository productProgramRepository; @Before public void setUp() throws LMISException { rnrFormItemRepository = RoboGuice.getInjector(RuntimeEnvironment.application).getInstance(RnrFormItemRepository.class); rnrFormRepository = RoboGuice.getInjector(RuntimeEnvironment.application).getInstance(RnrFormRepository.class); productRepository = RoboGuice.getInjector(RuntimeEnvironment.application).getInstance(ProductRepository.class); programRepository = RoboGuice.getInjector(RuntimeEnvironment.application).getInstance(ProgramRepository.class); productProgramRepository = RoboGuice.getInjector(RuntimeEnvironment.application).getInstance(ProductProgramRepository.class); } @Test public void shouldQueryListForLowStockByProductId() throws LMISException { RnRForm form = new RnRForm(); List<RnrFormItem> rnrFormItemList = new ArrayList<>(); Program program = new Program(); program.setProgramCode("1"); Product product = new Product(); product.setId(1); rnrFormItemList.add(getRnrFormItem(form, product, 1)); rnrFormItemList.add(getRnrFormItem(form, product, 2)); rnrFormItemList.add(getRnrFormItem(form, product, 3)); rnrFormItemList.add(getRnrFormItem(form, product, 0)); rnrFormItemList.add(getRnrFormItem(form, product, 5)); rnrFormItemList.add(getRnrFormItem(form, product, 7)); rnrFormItemRepository.batchCreateOrUpdate(rnrFormItemList); rnrFormRepository.create(form); List<RnrFormItem> rnrFormItemListFromDB = rnrFormItemRepository.queryListForLowStockByProductId(product); assertThat(rnrFormItemListFromDB.size(), is(3)); assertThat(rnrFormItemListFromDB.get(0).getInventory(), is(7L)); assertThat(rnrFormItemListFromDB.get(1).getInventory(), is(5L)); assertThat(rnrFormItemListFromDB.get(2).getInventory(), is(3L)); } @NonNull private RnrFormItem getRnrFormItem(RnRForm form, Product product, long inventory) { RnrFormItem rnrFormItem = new RnrFormItem(); rnrFormItem.setForm(form); rnrFormItem.setProduct(product); rnrFormItem.setInventory(inventory); return rnrFormItem; } @Test public void shouldListAllNewRnrItems() throws Exception { Product product1 = new ProductBuilder().setCode("P1").setIsActive(true).build(); productRepository.createOrUpdate(product1); RnrFormItem rnrFormItem = new RnrFormItem(); rnrFormItem.setProduct(product1); rnrFormItem.setRequestAmount(100L); rnrFormItem.setManualAdd(true); Product product2 = new ProductBuilder().setCode("P2").setIsActive(true).build(); productRepository.createOrUpdate(product2); RnrFormItem rnrFormItem2 = new RnrFormItem(); rnrFormItem2.setProduct(product2); rnrFormItem2.setRequestAmount(200L); rnrFormItemRepository.batchCreateOrUpdate(newArrayList(rnrFormItem, rnrFormItem2)); List<RnrFormItem> rnrFormItems = rnrFormItemRepository.listAllNewRnrItems(); assertThat(rnrFormItems.size(), is(1)); assertThat(rnrFormItems.get(0).getProduct().getCode(), is(product1.getCode())); assertThat(rnrFormItemRepository.listAllNewRnrItems().size(), is(1)); } @Test public void shouldDeleteOneRnrFormItem() throws Exception { Product product1 = new ProductBuilder().setCode("P1").setIsActive(true).build(); productRepository.createOrUpdate(product1); RnrFormItem rnrFormItem = new RnrFormItem(); rnrFormItem.setProduct(product1); rnrFormItem.setRequestAmount(100L); rnrFormItem.setManualAdd(true); Product product2 = new ProductBuilder().setCode("P2").setIsActive(true).build(); productRepository.createOrUpdate(product2); RnrFormItem rnrFormItem2 = new RnrFormItem(); rnrFormItem2.setProduct(product2); rnrFormItem2.setRequestAmount(200L); rnrFormItem2.setManualAdd(true); rnrFormItemRepository.batchCreateOrUpdate(newArrayList(rnrFormItem, rnrFormItem2)); rnrFormItemRepository.deleteRnrItem(rnrFormItem); List<RnrFormItem> rnrFormItems = rnrFormItemRepository.listAllNewRnrItems(); assertThat(rnrFormItems.size(), is(1)); assertThat(rnrFormItems.get(0).getProduct().getCode(), is(product2.getCode())); } }