package org.openlmis.core.view.widget;
import android.view.View;
import android.widget.TextView;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.openlmis.core.LMISTestApp;
import org.openlmis.core.LMISTestRunner;
import org.openlmis.core.R;
import org.openlmis.core.model.Regimen;
import org.openlmis.core.model.RegimenItem;
import org.openlmis.core.model.RnRForm;
import org.openlmis.core.presenter.MMIARequisitionPresenter;
import org.openlmis.core.view.activity.DummyActivity;
import org.openlmis.core.view.fragment.SimpleDialogFragment;
import org.robolectric.Robolectric;
import org.robolectric.RuntimeEnvironment;
import java.util.ArrayList;
import rx.Observable;
import rx.Subscriber;
import static junit.framework.Assert.assertEquals;
import static org.hamcrest.core.Is.is;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertThat;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import static org.roboguice.shaded.goole.common.collect.Lists.newArrayList;
@RunWith(LMISTestRunner.class)
public class MMIARegimeListTest {
private MMIARegimeList mmiaRegimeList;
private MMIARequisitionPresenter presenter;
private DummyActivity dummyActivity;
@Before
public void setUp() throws Exception {
dummyActivity = Robolectric.setupActivity(DummyActivity.class);
mmiaRegimeList = new MMIARegimeList(dummyActivity);
presenter = mock(MMIARequisitionPresenter.class);
mmiaRegimeList.presenter = presenter;
}
@Test
public void shouldCallDeleteMethodWhenDialogPositive() throws Exception {
mmiaRegimeList = spy(mmiaRegimeList);
RegimenItem item = new RegimenItem();
Observable<Void> value = Observable.create(new Observable.OnSubscribe<Void>() {
@Override
public void call(Subscriber<? super Void> subscriber) {
subscriber.onCompleted();
}
});
when(presenter.deleteRegimeItem(item)).thenReturn(value);
mmiaRegimeList.showDelConfirmDialog(item);
SimpleDialogFragment del_confirm_dialog = (SimpleDialogFragment) dummyActivity.getFragmentManager().findFragmentByTag("del_confirm_dialog");
SimpleDialogFragment.MsgDialogCallBack mListener = del_confirm_dialog.getMListener();
mListener.positiveClick("");
verify(presenter).deleteRegimeItem(item);
verify(mmiaRegimeList).refreshRegimeView();
}
@Test
public void shouldNotShowTheDelIconWhenTheFormIsAuthorised() throws Exception {
RnRForm rnRForm = new RnRForm();
rnRForm.setStatus(RnRForm.STATUS.AUTHORIZED);
Regimen regimen = new Regimen();
regimen.setType(Regimen.RegimeType.Adults);
RegimenItem regimenItem = new RegimenItem();
regimenItem.setRegimen(regimen);
ArrayList<RegimenItem> regimenItems = new ArrayList<>();
regimenItems.add(regimenItem);
rnRForm.setRegimenItemListWrapper(regimenItems);
when(presenter.getRnRForm()).thenReturn(rnRForm);
mmiaRegimeList.initView(new TextView(RuntimeEnvironment.application), presenter);
assertNull(mmiaRegimeList.getChildAt(1).findViewById(R.id.image_view_del));
}
@Test
public void shouldShowTheCustomRegimenWhenTheFormIsMissedAndNotAuthorised() throws Exception {
RnRForm rnRForm = new RnRForm();
rnRForm.setStatus(RnRForm.STATUS.DRAFT_MISSED);
Regimen regimen = new Regimen();
regimen.setType(Regimen.RegimeType.Adults);
RegimenItem regimenItem = new RegimenItem();
regimenItem.setRegimen(regimen);
ArrayList<RegimenItem> regimenItems = new ArrayList<>();
regimenItems.add(regimenItem);
rnRForm.setRegimenItemListWrapper(regimenItems);
when(presenter.getRnRForm()).thenReturn(rnRForm);
mmiaRegimeList.initView(new TextView(RuntimeEnvironment.application), presenter);
assertEquals(4, mmiaRegimeList.getChildCount());
}
@Test
public void shouldShowTheDelIconWhenTheFormIsNotAuthorised() throws Exception {
RnRForm rnRForm = new RnRForm();
rnRForm.setStatus(RnRForm.STATUS.DRAFT);
rnRForm.setRegimenItemListWrapper(newArrayList(generateRegimenItem()));
when(presenter.getRnRForm()).thenReturn(rnRForm);
mmiaRegimeList.initView(new TextView(LMISTestApp.getContext()), presenter);
assertThat(mmiaRegimeList.getChildAt(1).findViewById(R.id.image_view_del).getVisibility(), is(View.VISIBLE));
}
private RegimenItem generateRegimenItem() {
Regimen regimen = new Regimen();
regimen.setType(Regimen.RegimeType.Adults);
regimen.setName("customName");
regimen.setCustom(true);
RegimenItem regimenItem = new RegimenItem();
regimenItem.setRegimen(regimen);
return regimenItem;
}
}