@Test
  public void shouldReturnReturnedToLGAUtilizationItemWithCorrectUtilizationValue()
      throws Exception {
    commodityService.initialise(new User("test", "pass"));
    categoryService.clearCache();

    Commodity commodity = categoryService.all().get(6).getCommodities().get(0);

    Calendar calendar = Calendar.getInstance();
    Date today = calendar.getTime();

    assertNotNull(commodity);
    adjust(commodity, 2, false, AdjustmentReason.RETURNED_TO_LGA, adjustmentService);
    adjust(commodity, 3, false, AdjustmentReason.RETURNED_TO_LGA, adjustmentService);

    List<UtilizationItem> utilizationItems =
        commodityService.getMonthlyUtilizationItems(commodity, today);

    int expectedValue = 5;
    int utilizationValueIndex = DateUtil.dayNumber(today) - 1;

    assertThat(
        utilizationItems.get(5).getUtilizationValues().get(utilizationValueIndex).getValue(),
        is(expectedValue));
  }
 @Test
 public void shouldSaveCommodityActionWithDataSet() throws Exception {
   commodityService.initialise(new User("test", "pass"));
   Commodity testCommodity = commodityService.all().get(0);
   assertThat(testCommodity.getCommodityActionsSaved().size(), is(not(0)));
   CommodityAction actual =
       (CommodityAction) testCommodity.getCommodityActionsSaved().toArray()[0];
   assertThat(actual.getCommodityActionDataSets(), is(notNullValue()));
 }
  @Test
  public void shouldLoadAllCommodities() throws IOException {
    commodityService.initialise(new User("test", "pass"));
    List<Commodity> expectedCommodities = getDefaultCommodities(application);

    List<Commodity> commodities = commodityService.all();

    assertThat(commodities.size(), is(8));
    for (Commodity commodity : expectedCommodities) {
      assertThat(expectedCommodities, contains(commodity));
    }
  }
  @Test
  public void shouldReloadMostDispensedCommodities() throws Exception {
    commodityService.initialise(new User("test", "pass"));
    categoryService.clearCache();

    List<Commodity> mostConsumed = commodityService.getMost5HighlyDispensedCommodities();
    Commodity commodity = mostConsumed.get(0);
    String previousMostDispensedCommodity = commodity.getName();

    dispense(commodity, 20, dispensingService);

    commodity = commodityService.getMost5HighlyDispensedCommodities().get(0);
    assertThat(commodity.getName(), is(previousMostDispensedCommodity));
  }
  @Test
  public void shouldReturnMostConsumedCommodities() throws Exception {
    commodityService.initialise(new User("test", "pass"));
    categoryService.clearCache();

    List<Commodity> allCommodities = commodityService.all();
    Dispensing dispensing = new Dispensing();
    Commodity commodity = allCommodities.get(2);
    DispensingItem newDispensingItem = new DispensingItem(commodity, 3);
    dispensing.addItem(newDispensingItem);
    dispensingService.addDispensing(dispensing);

    List<Commodity> commodities = commodityService.getMost5HighlyDispensedCommodities();

    assertThat(commodities.get(0).getName(), is("Quinine"));
  }
  @Test
  public void shouldReturnClosingBalanceUtilizationItemWithCorrectUtilizationValue()
      throws Exception {
    commodityService.initialise(new User("test", "pass"));
    categoryService.clearCache();
    Commodity commodity = categoryService.all().get(0).getCommodities().get(0);

    Calendar calendar = Calendar.getInstance();
    Date today = calendar.getTime();

    int stockOnHand = commodity.getStockOnHand();
    dispense(commodity, 3, dispensingService);

    List<UtilizationItem> utilizationItems =
        commodityService.getMonthlyUtilizationItems(commodity, today);

    int expectedClosingStock = stockOnHand - 3;
    int utilizationValueIndex = DateUtil.dayNumber(today) - 1;
    assertThat(
        utilizationItems.get(4).getUtilizationValues().get(utilizationValueIndex).getValue(),
        is(expectedClosingStock));
  }
  @Test
  public void shouldReturnCorrectNumberOfUtilizationValuesForTheMonthInTheUtilizationItem()
      throws Exception {
    Commodity commodity = categoryService.all().get(0).getCommodities().get(0);

    Calendar calendar = Calendar.getInstance();
    Integer expectedItems = DateUtil.dayNumber(calendar.getTime());

    List<UtilizationItem> utilizationItems =
        commodityService.getMonthlyUtilizationItems(commodity, calendar.getTime());
    assertThat(utilizationItems.get(0).getUtilizationValues().size(), is(expectedItems));

    calendar.add(Calendar.MONTH, 2);
    utilizationItems = commodityService.getMonthlyUtilizationItems(commodity, calendar.getTime());
    assertThat(utilizationItems.size(), is(0));

    calendar = Calendar.getInstance();
    calendar.add(Calendar.MONTH, -1);
    expectedItems = DateUtil.maxMonthDate(calendar.getTime());
    utilizationItems = commodityService.getMonthlyUtilizationItems(commodity, calendar.getTime());
    assertThat(utilizationItems.get(0).getUtilizationValues().size(), is(expectedItems));
  }
  @Test
  public void shouldReturnReceivedUtilizationItemWithCorrectUtilizationValue() throws Exception {
    commodityService.initialise(new User("test", "pass"));
    categoryService.clearCache();

    Commodity commodity = categoryService.all().get(0).getCommodities().get(0);

    Calendar calendar = Calendar.getInstance();
    Date today = calendar.getTime();

    receive(commodity, 2, receiveService);
    receive(commodity, 3, receiveService);

    List<UtilizationItem> utilizationItems =
        commodityService.getMonthlyUtilizationItems(commodity, today);

    int expectedValue = 5;
    int utilizationValueIndex = DateUtil.dayNumber(today) - 1;

    assertThat(
        utilizationItems.get(2).getUtilizationValues().get(utilizationValueIndex).getValue(),
        is(expectedValue));
  }
 @Test
 public void shouldSaveStockLevelsOnInitialise() throws Exception {
   setUpInjection(
       this,
       new AbstractModule() {
         @Override
         protected void configure() {
           bind(LmisServer.class).toInstance(mockLmisServer);
           bind(CommodityActionService.class).toInstance(commodityActionService);
         }
       });
   spyedCommodityService = spy(commodityService);
   spyedCommodityService.initialise(new User("user", "user"));
   verify(commodityActionService).syncCommodityActionValues((User) any());
 }
 @Test
 public void shouldGetMonthlyStockCountDayAndSaveItToPreferences() throws Exception {
   commodityService.initialise(new User("test", "pass"));
   assertThat(sharedPreferences.getInt(CommodityService.MONTHLY_STOCK_COUNT_DAY, 0), is(MOCK_DAY));
 }
 @Test
 public void shouldSaveCommodityCommodityActivities() {
   commodityService.initialise(new User("test", "pass"));
   Commodity testCommodity = commodityService.all().get(0);
   assertThat(testCommodity.getCommodityActionsSaved().size(), is(not(0)));
 }
 @Test
 public void testShouldPrepareDefaultCommodities() throws Exception {
   commodityService.initialise(new User("test", "pass"));
   verifyAllCommodityCategories();
 }