package org.openlmis.core.view.holder; import android.app.Fragment; import android.graphics.drawable.ColorDrawable; import android.view.LayoutInflater; 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.R; import org.openlmis.core.model.RnRForm; import org.openlmis.core.model.builder.RequisitionBuilder; import org.openlmis.core.view.activity.DummyActivity; import org.openlmis.core.view.viewmodel.RequisitionFormItemViewModel; import org.openlmis.core.view.viewmodel.RnRFormItemAdjustmentViewModel; import org.robolectric.Robolectric; import org.robolectric.RuntimeEnvironment; import java.util.Arrays; import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.MatcherAssert.assertThat; import static org.junit.Assert.assertNotNull; @RunWith(LMISTestRunner.class) public class RequisitionFormViewHolderTest { private RequisitionFormViewHolder viewHolder; private RequisitionFormItemViewModel viewModel; private DummyActivity dummyActivity; @Before public void setup() { dummyActivity = Robolectric.setupActivity(DummyActivity.class); View itemView = LayoutInflater.from(dummyActivity).inflate(R.layout.item_requisition_body, null, false); viewHolder = new RequisitionFormViewHolder(itemView); viewModel = RequisitionBuilder.buildFakeRequisitionViewModel(); } @Test public void shouldHighLightRequestAmount() { viewHolder.populate(viewModel, RnRForm.STATUS.DRAFT); int bgReqColor = ((ColorDrawable) viewHolder.requestAmount.getBackground()).getColor(); int bgAprColor = ((ColorDrawable) viewHolder.approvedAmount.getBackground()).getColor(); assertThat(bgReqColor, is(RuntimeEnvironment.application.getApplicationContext().getResources().getColor(R.color.color_white))); assertThat(bgAprColor, is(RuntimeEnvironment.application.getApplicationContext().getResources().getColor(android.R.color.transparent))); assertThat(viewHolder.requestAmount.isEnabled(), is(true)); assertThat(viewHolder.approvedAmount.isEnabled(), is(false)); } @Test public void shouldHighLightApprovedAmount() { viewHolder.populate(viewModel, RnRForm.STATUS.SUBMITTED); int bgReqColor = ((ColorDrawable) viewHolder.requestAmount.getBackground()).getColor(); int bgAprColor = ((ColorDrawable) viewHolder.approvedAmount.getBackground()).getColor(); assertThat(bgReqColor, is(RuntimeEnvironment.application.getApplicationContext().getResources().getColor(android.R.color.transparent))); assertThat(bgAprColor, is(RuntimeEnvironment.application.getApplicationContext().getResources().getColor(R.color.color_white))); assertThat(viewHolder.requestAmount.isEnabled(), is(false)); assertThat(viewHolder.approvedAmount.isEnabled(), is(true)); } @Test public void shouldUpdateApprovedAmountWhenRequestAmountChanged() { viewHolder.populate(viewModel, RnRForm.STATUS.DRAFT); viewHolder.requestAmount.setText("123"); assertThat(viewModel.getRequestAmount(), is("123")); assertThat(viewModel.getApprovedAmount(), is("123")); assertThat(viewHolder.requestAmount.getText().toString(), is("123")); } @Test public void shouldUpdateApprovedAmountModelWhenTextChanged() { viewHolder.populate(viewModel, RnRForm.STATUS.SUBMITTED); viewHolder.approvedAmount.setText("123"); assertThat(viewModel.getRequestAmount(), is("0")); assertThat(viewModel.getApprovedAmount(), is("123")); } @Test public void shouldOnlyShowAdjustIconWhenAdjustmentQuantityIsNotZero() throws Exception { viewHolder.populate(viewModel, RnRForm.STATUS.DRAFT); assertThat(viewHolder.adjustTheoreticalIcon.getVisibility(), is(View.GONE)); viewModel.setAdjustmentViewModels(Arrays.asList(generateAdjustmentViewModel())); viewHolder.populate(viewModel, RnRForm.STATUS.DRAFT); assertThat(viewHolder.adjustTheoreticalIcon.getVisibility(), is(View.VISIBLE)); } @Test public void shouldShowPopTipsTotalReminderIconClicked() { viewModel.setAdjustmentViewModels(Arrays.asList(generateAdjustmentViewModel())); viewHolder.populate(viewModel, RnRForm.STATUS.DRAFT); viewHolder.adjustTheoreticalIcon.performClick(); Fragment dialogFragment = dummyActivity.getFragmentManager().findFragmentByTag("adjustmentTheoreticalDialog"); assertNotNull(dialogFragment); } private RnRFormItemAdjustmentViewModel generateAdjustmentViewModel() { RnRFormItemAdjustmentViewModel adjustmentViewModel = new RnRFormItemAdjustmentViewModel(); adjustmentViewModel.setKitName("US kit"); adjustmentViewModel.setKitStockOnHand(100L); adjustmentViewModel.setQuantity(2); return adjustmentViewModel; } }