/*
* This program is part of the OpenLMIS logistics management information
* system platform software.
*
* Copyright © 2015 ThoughtWorks, Inc.
*
* 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. For additional
* information contact info@OpenLMIS.org
*/
package org.openlmis.core.view.fragment;
import android.app.Activity;
import android.content.Intent;
import android.view.View;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.openlmis.core.LMISTestRunner;
import org.openlmis.core.manager.SharedPreferenceMgr;
import org.openlmis.core.model.Product;
import org.openlmis.core.model.StockCard;
import org.openlmis.core.presenter.StockCardPresenter;
import org.openlmis.core.utils.Constants;
import org.openlmis.core.view.activity.StockCardListActivity;
import org.openlmis.core.view.adapter.StockCardListAdapter;
import org.openlmis.core.view.viewmodel.InventoryViewModel;
import org.openlmis.core.view.widget.ProductsUpdateBanner;
import org.robolectric.Robolectric;
import java.util.ArrayList;
import java.util.List;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.core.Is.is;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
@RunWith(LMISTestRunner.class)
public class StockCardListFragmentTest {
private StockCardListFragment fragment;
private List<InventoryViewModel> inventoryViewModels;
private ProductsUpdateBanner productUpdateBanner;
private SharedPreferenceMgr sharedPreferenceMgr;
@Before
public void setUp() {
fragment = buildFragment();
productUpdateBanner = mock(ProductsUpdateBanner.class);
sharedPreferenceMgr = mock(SharedPreferenceMgr.class);
fragment.sharedPreferenceMgr = sharedPreferenceMgr;
inventoryViewModels = new ArrayList<>();
for (int i = 0; i < 10; i++) {
StockCard stockCard = new StockCard();
stockCard.setStockOnHand(10 - i);
Product product = new Product();
product.setPrimaryName((char) ('A' + i) + " Product");
stockCard.setProduct(product);
inventoryViewModels.add(new InventoryViewModel(stockCard));
}
}
private StockCardListFragment buildFragment() {
StockCardListActivity stockCardListActivity = Robolectric.buildActivity(StockCardListActivity.class).create().get();
fragment = new StockCardListFragment();
stockCardListActivity.getFragmentManager().beginTransaction().add(fragment, null).commit();
fragment.presenter = mock(StockCardPresenter.class);
return fragment;
}
@Test
public void shouldSortListByProductName() {
when(fragment.presenter.getInventoryViewModels()).thenReturn(this.inventoryViewModels);
List<InventoryViewModel> inventoryViewModels = fragment.presenter.getInventoryViewModels();
StockCardListAdapter adapter = new StockCardListAdapter(new ArrayList<InventoryViewModel>(), null);
adapter.refreshList(inventoryViewModels);
adapter.sortByName(true);
List<InventoryViewModel> sortedList = adapter.getFilteredList();
assertThat(sortedList.get(0).getProduct().getPrimaryName(), is("A Product"));
assertThat(sortedList.get(1).getProduct().getPrimaryName(), is("B Product"));
assertThat(sortedList.get(2).getProduct().getPrimaryName(), is("C Product"));
}
@Test
public void shouldSortListBySOH() {
when(fragment.presenter.getInventoryViewModels()).thenReturn(inventoryViewModels);
StockCardListAdapter adapter = new StockCardListAdapter(new ArrayList<InventoryViewModel>(), null);
adapter.refreshList(inventoryViewModels);
adapter.sortBySOH(true);
List<InventoryViewModel> sortedList = adapter.getFilteredList();
assertThat(sortedList.get(0).getStockOnHand(), is(1L));
assertThat(sortedList.get(1).getStockOnHand(), is(2L));
assertThat(sortedList.get(2).getStockOnHand(), is(3L));
}
@Test
public void shouldRefreshBannerText() {
fragment.productsUpdateBanner = productUpdateBanner;
when(sharedPreferenceMgr.isNeedShowProductsUpdateBanner()).thenReturn(true);
when(productUpdateBanner.getVisibility()).thenReturn(View.VISIBLE);
fragment.onActivityResult(Constants.REQUEST_FROM_STOCK_LIST_PAGE, Activity.RESULT_OK, new Intent());
verify(productUpdateBanner).refreshBannerText();
}
@Test
public void shouldRefreshAndShowBannerWhenNeedShowBanner(){
fragment.productsUpdateBanner = productUpdateBanner;
fragment.onActivityResult(Constants.REQUEST_FROM_STOCK_LIST_PAGE, Activity.RESULT_OK, new Intent());
verify(productUpdateBanner).refreshBannerText();
}
}