package org.openlmis.core.view.holder; import android.view.LayoutInflater; import android.view.View; import com.google.inject.Binder; import com.google.inject.Module; 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.Product; import org.openlmis.core.model.Program; import org.openlmis.core.model.RnRForm; import org.openlmis.core.model.RnrFormItem; import org.openlmis.core.model.builder.ProductBuilder; import org.openlmis.core.model.builder.RnrFormItemBuilder; import org.openlmis.core.presenter.VIARequisitionPresenter; import org.openlmis.core.utils.DateUtil; import org.openlmis.core.view.activity.VIARequisitionActivity; import org.openlmis.core.view.fragment.SimpleDialogFragment; import org.openlmis.core.view.viewmodel.RequisitionFormItemViewModel; import org.robolectric.Robolectric; import org.robolectric.RuntimeEnvironment; import java.sql.Date; import roboguice.RoboGuice; import static org.assertj.core.api.Assertions.assertThat; import static org.junit.Assert.assertNotNull; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; @RunWith(LMISTestRunner.class) public class RequisitionProductViewHolderTest { private RequisitionProductViewHolder viewHolder; private VIARequisitionPresenter presenter; private Program program; private RnRForm form; @Before public void setUp() { View itemView = LayoutInflater.from(RuntimeEnvironment.application).inflate(R.layout.item_requisition_body_left, null, false); viewHolder = new RequisitionProductViewHolder(itemView); program = new Program(); program.setProgramCode("ESS_MEDS"); program.setProgramName("ESS_MEDS"); form = RnRForm.init(program, DateUtil.today()); form.setPeriodBegin(Date.valueOf("2015-04-21")); form.setPeriodEnd(Date.valueOf("2015-05-20")); presenter = mock(VIARequisitionPresenter.class); RoboGuice.overrideApplicationInjector(RuntimeEnvironment.application, new Module() { @Override public void configure(Binder binder) { binder.bind(VIARequisitionPresenter.class).toInstance(presenter); } }); when(presenter.getRnRForm()).thenReturn(form); when(presenter.getRnrFormStatus()).thenReturn(RnRForm.STATUS.DRAFT); } @Test public void shouldSetProductNameAndCode() { RnrFormItem formItem = new RnrFormItemBuilder().setProduct( new ProductBuilder().setPrimaryName("productName").setCode("08S42").build()) .build(); RequisitionFormItemViewModel viewModel = new RequisitionFormItemViewModel(formItem); viewHolder.populate(viewModel, presenter, LMISTestApp.getContext()); assertThat(viewHolder.productName.getText().toString()).isEqualTo("productName"); assertThat(viewHolder.productCode.getText().toString()).isEqualTo("08S42"); } @Test public void shouldSetDelIconForNewAddedProduct() throws Exception { RnrFormItem formItem = new RnrFormItemBuilder().setProduct( new ProductBuilder().setPrimaryName("productName").setCode("08S42").build()) .build(); formItem.setManualAdd(true); RequisitionFormItemViewModel viewModel = new RequisitionFormItemViewModel(formItem); viewHolder.populate(viewModel, presenter, LMISTestApp.getContext()); assertThat(viewHolder.ivDelete.getVisibility()).isEqualTo(View.VISIBLE); } @Test public void shouldNotShowDelIconForOldProduct() throws Exception { RnrFormItem formItem = new RnrFormItemBuilder().setProduct( new ProductBuilder().setPrimaryName("productName").setCode("08S42").build()).setRnrForm(new RnRForm()) .build(); RequisitionFormItemViewModel viewModel = new RequisitionFormItemViewModel(formItem); viewHolder.populate(viewModel, presenter, LMISTestApp.getContext()); assertThat(viewHolder.ivDelete.getVisibility()).isEqualTo(View.INVISIBLE); } @Test public void shouldShowDialogWhenClickDelIcon() throws Exception { VIARequisitionActivity viaRequisitionActivity = Robolectric.setupActivity(VIARequisitionActivity.class); Product product = new Product(); RnrFormItem rnrFormItem = new RnrFormItemBuilder().setProduct(product).setRequestAmount(100L).build(); viewHolder.populate(new RequisitionFormItemViewModel(rnrFormItem), presenter, viaRequisitionActivity); viewHolder.showDelConfirmDialog(rnrFormItem); SimpleDialogFragment del_confirm_dialog = (SimpleDialogFragment) viaRequisitionActivity.getFragmentManager().findFragmentByTag("del_confirm_dialog"); assertNotNull(del_confirm_dialog); } }