package org.openlmis.core.view.activity;
import android.app.Activity;
import android.content.Intent;
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.model.Product;
import org.openlmis.core.model.StockCard;
import org.openlmis.core.model.builder.ProductBuilder;
import org.openlmis.core.model.builder.StockCardBuilder;
import org.openlmis.core.presenter.StockCardPresenter;
import org.openlmis.core.utils.Constants;
import org.robolectric.Robolectric;
import org.robolectric.RuntimeEnvironment;
import org.robolectric.shadows.ShadowApplication;
import roboguice.RoboGuice;
import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import static org.robolectric.Shadows.shadowOf;
@RunWith(LMISTestRunner.class)
public class ArchivedDrugsListActivityTest {
private ArchivedDrugsListActivity archivedListActivity;
private StockCard stockCard;
private StockCardPresenter mockedPresenter;
@Before
public void setUp() {
mockedPresenter = mock(StockCardPresenter.class);
RoboGuice.overrideApplicationInjector(RuntimeEnvironment.application, new AbstractModule() {
@Override
protected void configure() {
bind(StockCardPresenter.class).toInstance(mockedPresenter);
}
});
archivedListActivity = Robolectric.buildActivity(ArchivedDrugsListActivity.class).create().get();
Product product = new ProductBuilder().setPrimaryName("Lamivudina 150mg").setCode("08S40").setStrength("10mg").setType("VIA").build();
stockCard = new StockCardBuilder()
.setProduct(product)
.setStockCardId(200L)
.setStockOnHand(100)
.build();
}
@After
public void tearDown() {
RoboGuice.Util.reset();
}
@Test
public void shouldViewMovementHistoryActivityWhenHistoryViewClicked() {
archivedListActivity.archiveStockCardListener.viewMovementHistory(stockCard);
Intent historyIntent = ShadowApplication.getInstance().getNextStartedActivity();
assertThat(historyIntent).isNotNull();
assertThat(historyIntent.getLongExtra(Constants.PARAM_STOCK_CARD_ID, 0)).isEqualTo(200L);
assertThat(historyIntent.getStringExtra(Constants.PARAM_STOCK_NAME)).isEqualTo("Lamivudina 150mg [08S40]");
assertThat(historyIntent.getBooleanExtra(Constants.PARAM_IS_FROM_ARCHIVE, false)).isTrue();
}
@Test
public void shouldArchiveBackStockCardWhenViewClicked() {
archivedListActivity.archiveStockCardListener.archiveStockCardBack(stockCard);
verify(mockedPresenter).archiveBackStockCard(stockCard);
verify(mockedPresenter, times(2)).loadStockCards(StockCardPresenter.ArchiveStatus.Archived);
assertThat(shadowOf(archivedListActivity).getResultCode()).isEqualTo(Activity.RESULT_OK);
}
}