package org.openlmis.core.view.activity;
import android.content.Intent;
import android.view.View;
import com.google.inject.AbstractModule;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.openlmis.core.LMISTestRunner;
import org.openlmis.core.R;
import org.openlmis.core.manager.MovementReasonManager;
import org.openlmis.core.model.StockCard;
import org.openlmis.core.model.builder.ProductBuilder;
import org.openlmis.core.model.builder.StockCardBuilder;
import org.openlmis.core.model.builder.StockMovementViewModelBuilder;
import org.openlmis.core.presenter.NewStockMovementPresenter;
import org.openlmis.core.utils.Constants;
import org.openlmis.core.view.viewmodel.LotMovementViewModel;
import org.openlmis.core.view.viewmodel.LotMovementViewModelBuilder;
import org.openlmis.core.view.viewmodel.StockMovementViewModel;
import org.robolectric.Robolectric;
import org.robolectric.RuntimeEnvironment;
import java.util.Arrays;
import roboguice.RoboGuice;
import static junit.framework.Assert.assertEquals;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
@RunWith(LMISTestRunner.class)
public class NewStockMovementActivityTest {
private NewStockMovementActivity newStockMovementActivity;
private NewStockMovementPresenter mockedPresenter;
@Before
public void setUp() throws Exception {
mockedPresenter = mock(NewStockMovementPresenter.class);
StockMovementViewModel stockMovementViewModel = new StockMovementViewModelBuilder().withIssued("100")
.withMovementDate("2011-11-11")
.withDocumentNo("12345")
.withNegativeAdjustment(null)
.withPositiveAdjustment(null)
.withIssued("100")
.withReceived(null)
.withStockExistence("200")
.withMovementReason(new MovementReasonManager.MovementReason(MovementReasonManager.MovementType.ISSUE, "ISSUE_1", "issue description")).build();
LotMovementViewModel lot1 = new LotMovementViewModelBuilder().setLotNumber("test1").setLotSOH("100").setQuantity("50").build();
LotMovementViewModel lot2 = new LotMovementViewModelBuilder().setLotNumber("test2").setLotSOH("100").setQuantity("50").build();
stockMovementViewModel.getExistingLotMovementViewModelList().addAll(Arrays.asList(lot1,lot2));
StockCard stockcard = new StockCardBuilder().setProduct(ProductBuilder.buildAdultProduct()).build();
stockMovementViewModel.setProduct(stockcard.getProduct());
when(mockedPresenter.getViewModel()).thenReturn(stockMovementViewModel);
when(mockedPresenter.getStockCard()).thenReturn(stockcard);
when(mockedPresenter.getMovementType()).thenReturn(MovementReasonManager.MovementType.ISSUE);
RoboGuice.overrideApplicationInjector(RuntimeEnvironment.application, new AbstractModule() {
@Override
protected void configure() {
bind(NewStockMovementPresenter.class).toInstance(mockedPresenter);
}
});
Intent intent = new Intent()
.putExtra(Constants.PARAM_STOCK_NAME, "test")
.putExtra(Constants.PARAM_MOVEMENT_TYPE, MovementReasonManager.MovementType.ISSUE)
.putExtra(Constants.PARAM_STOCK_CARD_ID, 0L)
.putExtra(Constants.PARAM_IS_KIT, false);
newStockMovementActivity = Robolectric.buildActivity(NewStockMovementActivity.class).withIntent(intent).create().get();
}
@After
public void teardown() {
RoboGuice.Util.reset();
}
@Test
public void shouldShowRequestedQuantityWhenMovementTypeIsIssue() {
assertEquals(View.VISIBLE, newStockMovementActivity.movementDetailsView.findViewById(R.id.ly_requested_quantity).getVisibility());
}
@Test
public void shouldNotShowActionAddNewLotWhenMovementTypeIsIssue() {
assertEquals(View.GONE, newStockMovementActivity.newMovementLotListView.findViewById(R.id.ly_action_panel).getVisibility());
}
@Test
public void shouldInitExistingLotList() {
assertEquals(View.VISIBLE, newStockMovementActivity.newMovementLotListView.findViewById(R.id.rv_existing_lot_list).getVisibility());
}
}