package org.openlmis.core.view.fragment;/* * This program is part of the OpenLMIS logistics management information * system platform software. * * Copyright © 2015 ThoughtWorks, Inc. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as published * by the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. This program is distributed in the * hope that it will be useful, but WITHOUT ANY WARRANTY; without even the * implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU Affero General Public License for more details. You should * have received a copy of the GNU Affero General Public License along with * this program. If not, see http://www.gnu.org/licenses. For additional * information contact info@OpenLMIS.org */ import android.app.Dialog; import android.app.DialogFragment; import android.content.Intent; import android.support.v7.app.AlertDialog; import android.view.View; import android.widget.TextView; import com.google.inject.Binder; import com.google.inject.Module; import org.apache.commons.lang.StringUtils; 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.exceptions.LMISException; import org.openlmis.core.manager.SharedPreferenceMgr; import org.openlmis.core.model.Program; import org.openlmis.core.model.RnRForm; import org.openlmis.core.model.builder.RequisitionBuilder; import org.openlmis.core.presenter.VIARequisitionPresenter; import org.openlmis.core.utils.Constants; import org.openlmis.core.utils.DateUtil; import org.openlmis.core.view.activity.VIARequisitionActivity; import org.openlmis.core.view.viewmodel.RequisitionFormItemViewModel; import org.openlmis.core.view.viewmodel.ViaKitsViewModel; import org.robolectric.Robolectric; import org.robolectric.RuntimeEnvironment; import org.robolectric.shadows.ShadowToast; import java.sql.Date; import java.util.ArrayList; import java.util.List; import roboguice.RoboGuice; import static org.assertj.core.api.Assertions.assertThat; import static org.junit.Assert.assertFalse; import static org.mockito.Matchers.any; import static org.mockito.Matchers.anyLong; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.never; import static org.mockito.Mockito.reset; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; @RunWith(LMISTestRunner.class) public class VIARequisitionFragmentTest { VIARequisitionFragment VIARequisitionFragment; VIARequisitionPresenter presenter; private List<RequisitionFormItemViewModel> formItemList; private Program program; private RnRForm form; @Before public void setup() throws Exception { presenter = mock(VIARequisitionPresenter.class); RoboGuice.overrideApplicationInjector(RuntimeEnvironment.application, new Module() { @Override public void configure(Binder binder) { binder.bind(VIARequisitionPresenter.class).toInstance(presenter); } }); 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")); formItemList = new ArrayList<>(); formItemList.add(RequisitionBuilder.buildFakeRequisitionViewModel()); when(presenter.getRequisitionFormItemViewModels()).thenReturn(formItemList); when(presenter.getViaKitsViewModel()).thenReturn(new ViaKitsViewModel()); when(presenter.getRnRForm()).thenReturn(form); when(presenter.getRnrFormStatus()).thenReturn(RnRForm.STATUS.DRAFT); VIARequisitionFragment = getVIARequisitionFragmentFromActivityWithIntent(); } private VIARequisitionFragment getVIARequisitionFragmentFromActivityWithIntent() { Intent intent = new Intent(); intent.putExtra(Constants.PARAM_FORM_ID, 1L); VIARequisitionActivity viaRequisitionActivity = Robolectric.buildActivity(VIARequisitionActivity.class).withIntent(intent).create().visible().get(); return (VIARequisitionFragment) viaRequisitionActivity.getFragmentManager().findFragmentById(R.id.fragment_requisition); } @Test public void shouldShowRequisitionPeriodOnTitle() { VIARequisitionFragment.refreshRequisitionForm(VIARequisitionFragment.presenter.getRnRForm()); assertThat(VIARequisitionFragment.getActivity().getTitle()).isEqualTo("Requisition - 21 Apr to 20 May"); } @Test public void shouldSetEmergencyViewWhenRnrIsEmergency() { LMISTestApp.getInstance().setCurrentTimeMillis(DateUtil.parseString("2015-04-21 17:30:00", DateUtil.DATE_TIME_FORMAT).getTime()); RnRForm rnRForm = VIARequisitionFragment.presenter.getRnRForm(); rnRForm.setEmergency(true); VIARequisitionFragment.refreshRequisitionForm(rnRForm); VIARequisitionFragment.consultationView.findViewById(R.id.edit_text).performClick(); assertThat(ShadowToast.getTextOfLatestToast()).isEqualTo("This information is not used when creating an emergency requisition"); assertThat(((TextView) VIARequisitionFragment.kitView.findViewById(R.id.et_via_kit_received_hf)).getText()).isEqualTo(StringUtils.EMPTY); assertThat(((TextView) VIARequisitionFragment.consultationView.findViewById(R.id.via_rnr_header)).getText()).isEqualTo("Emergency requisition balancete"); assertThat(VIARequisitionFragment.getActivity().getTitle().toString()).isEqualTo("Emergency requisition - 21 Apr"); } @Test public void shouldSetHistoryViewWhenRnrIsAuthorized() { RnRForm rnRForm = VIARequisitionFragment.presenter.getRnRForm(); rnRForm.setStatus(RnRForm.STATUS.AUTHORIZED); VIARequisitionFragment.refreshRequisitionForm(rnRForm); assertThat(View.GONE).isEqualTo(VIARequisitionFragment.actionPanelView.getVisibility()); rnRForm.setEmergency(true); VIARequisitionFragment.refreshRequisitionForm(rnRForm); assertThat(View.GONE).isEqualTo(VIARequisitionFragment.actionPanelView.getVisibility()); assertFalse(VIARequisitionFragment.vgContainer.findViewById(R.id.edit_text).hasOnClickListeners()); assertFalse(VIARequisitionFragment.kitView.findViewById(R.id.et_via_kit_opened_chw).hasOnClickListeners()); } @Test public void shouldGetIntentToRequisitionActivity() { long formId = 100L; Intent intent = VIARequisitionActivity.getIntentToMe(VIARequisitionFragment.getActivity(), formId); assertThat(intent).isNotNull(); assertThat(intent.getLongExtra(Constants.PARAM_FORM_ID, 0L)).isEqualTo(formId); } @Test public void shouldShowAlertDialogWhenPressedBack() { when(presenter.isDraft()).thenReturn(true); VIARequisitionFragment.onBackPressed(); DialogFragment fragment = (DialogFragment) (VIARequisitionFragment.getActivity().getFragmentManager().findFragmentByTag("back_confirm_dialog")); assertThat(fragment).isNotNull(); AlertDialog dialog = (AlertDialog) fragment.getDialog(); assertThat(dialog).isNotNull(); } @Test public void shouldNotRemoveRnrFormWhenGoBack() throws LMISException { VIARequisitionFragment.onBackPressed(); verify(presenter, never()).deleteDraft(); } @Test public void shouldShowSubmitSignatureDialog() { when(presenter.isDraftOrDraftMissed()).thenReturn(true); VIARequisitionFragment.showSignDialog(); DialogFragment fragment = (DialogFragment) (VIARequisitionFragment.getActivity().getFragmentManager().findFragmentByTag("signature_dialog")); assertThat(fragment).isNotNull(); Dialog dialog = fragment.getDialog(); assertThat(dialog).isNotNull(); String alertMessage = VIARequisitionFragment.getString(R.string.msg_via_submit_signature); assertThat(fragment.getArguments().getString("title")).isEqualTo(alertMessage); } @Test public void shouldShowApproveSignatureDialog() { when(presenter.isDraftOrDraftMissed()).thenReturn(false); VIARequisitionFragment.showSignDialog(); DialogFragment fragment = (DialogFragment) (VIARequisitionFragment.getActivity().getFragmentManager().findFragmentByTag("signature_dialog")); assertThat(fragment).isNotNull(); Dialog dialog = fragment.getDialog(); assertThat(dialog).isNotNull(); String alertMessage = VIARequisitionFragment.getString(R.string.msg_approve_signature_via); assertThat(fragment.getArguments().getString("title")).isEqualTo(alertMessage); } @Test public void shouldMessageNotifyDialog() { VIARequisitionFragment.showMessageNotifyDialog(); DialogFragment fragment = (DialogFragment) (VIARequisitionFragment.getActivity().getFragmentManager().findFragmentByTag("showMessageNotifyDialog")); assertThat(fragment).isNotNull(); AlertDialog dialog = (AlertDialog) fragment.getDialog(); assertThat(dialog).isNotNull(); } @Test public void shouldShowTheCannotInitFormToastWhenTheAllStockMovementsAreNotSyncDown() { reset(presenter); when(presenter.getRnrFormStatus()).thenReturn(RnRForm.STATUS.DRAFT); SharedPreferenceMgr.getInstance().setShouldSyncLastYearStockCardData(true); VIARequisitionFragment = getVIARequisitionFragmentFromActivityWithIntent(); String msg = VIARequisitionFragment.getString(R.string.msg_stock_movement_is_not_ready); assertThat(ShadowToast.getTextOfLatestToast()).isEqualTo(msg); verify(presenter, never()).loadData(anyLong(), any(Date.class)); } }