package org.openlmis.stockmanagement.repository; import org.junit.Test; import org.junit.experimental.categories.Category; import org.junit.runner.RunWith; import org.junit.runners.BlockJUnit4ClassRunner; import org.mockito.InjectMocks; import org.mockito.Mock; import org.openlmis.core.builder.FacilityBuilder; import org.openlmis.core.builder.ProductBuilder; import org.openlmis.core.domain.Facility; import org.openlmis.core.domain.Product; import org.openlmis.core.repository.FacilityRepository; import org.openlmis.core.repository.ProductRepository; import org.openlmis.db.categories.UnitTests; import org.openlmis.stockmanagement.domain.StockCard; import org.openlmis.stockmanagement.repository.mapper.StockCardMapper; import org.powermock.modules.junit4.PowerMockRunner; import org.powermock.modules.junit4.PowerMockRunnerDelegate; import static com.natpryce.makeiteasy.MakeItEasy.*; import static org.hamcrest.CoreMatchers.is; import static org.junit.Assert.assertThat; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; @Category(UnitTests.class) @RunWith(PowerMockRunner.class) @PowerMockRunnerDelegate(BlockJUnit4ClassRunner.class) public class StockCardRepositoryTest { @Mock StockCardMapper mapper; @Mock private FacilityRepository facilityRepository; @Mock private ProductRepository productRepository; private static final Facility defaultFacility; private static final Product defaultProduct; @InjectMocks private StockCardRepository stockCardRepository; static { defaultFacility = make(a(FacilityBuilder.defaultFacility, with(FacilityBuilder.facilityId, 1L))); defaultProduct = make(a(ProductBuilder.defaultProduct, with(ProductBuilder.code, "CODE"))); } @Test public void shouldGetStockCardIfItExists() { StockCard dummyCard = StockCard.createZeroedStockCard(defaultFacility, defaultProduct); when(mapper.getByFacilityAndProduct(defaultFacility.getId(), defaultProduct.getCode())).thenReturn(dummyCard); StockCard stockCard = stockCardRepository.getOrCreateStockCard(defaultFacility.getId(), defaultProduct.getCode()); assertThat(stockCard, is(dummyCard)); } @Test public void shouldCreateStockCardIfItDoesNotExist() { when(mapper.getByFacilityAndProduct(defaultFacility.getId(), defaultProduct.getCode())).thenReturn(null); when(facilityRepository.getById(defaultFacility.getId())).thenReturn(defaultFacility); when(productRepository.getByCode(defaultProduct.getCode())).thenReturn(defaultProduct); StockCard stockCard = stockCardRepository.getOrCreateStockCard(defaultFacility.getId(), defaultProduct.getCode()); verify(mapper).insert(stockCard); assertThat(stockCard.getFacility(), is(defaultFacility)); assertThat(stockCard.getProduct(), is(defaultProduct)); } }