/* * Copyright (c) 2014. The Trustees of Indiana University. * * This version of the code is licensed under the MPL 2.0 Open Source license with additional * healthcare disclaimer. If the user is an entity intending to commercialize any application * that uses this code in a for-profit venture, please contact the copyright holder. */ package com.muzima.adapters.forms; import android.content.Context; import com.emilsjolander.components.stickylistheaders.StickyListHeadersListView; import com.muzima.api.model.Patient; import com.muzima.api.model.PatientIdentifier; import com.muzima.api.model.PersonName; import com.muzima.controller.FormController; import com.muzima.model.CompleteFormWithPatientData; import com.muzima.model.collections.CompleteFormsWithPatientData; import com.muzima.testSupport.CustomTestRunner; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.robolectric.Robolectric; import org.robolectric.RuntimeEnvironment; import org.robolectric.annotation.Config; import org.robolectric.shadows.ShadowLooper; import java.util.Collection; import java.util.concurrent.TimeUnit; import static com.muzima.adapters.forms.CompleteFormsAdapter.BackgroundQueryTask; import static java.util.Arrays.asList; import static org.hamcrest.core.Is.is; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertThat; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; @RunWith(CustomTestRunner.class) @Config(manifest= Config.NONE) public class CompleteFormsAdapterTest { private CompleteFormsAdapter formsAdapter; private FormController formController; @Before public void setUp() throws Exception { formController = mock(FormController.class); Context context = mock(Context.class); formsAdapter = new CompleteFormsAdapter(context, 0, formController){ @Override public void addAll(Collection<? extends CompleteFormWithPatientData> collection) { } }; Robolectric.getBackgroundThreadScheduler().pause(); Robolectric.getForegroundThreadScheduler().pause(); } @Test public void queryTask_shouldFetchAllCompletedForms() throws Exception, FormController.FormFetchException { BackgroundQueryTask queryTask = new BackgroundQueryTask(formsAdapter); CompleteFormsWithPatientData completeFormsWithPatientData = new CompleteFormsWithPatientData(); completeFormsWithPatientData.add(new CompleteFormWithPatientData()); when(formController.getAllCompleteFormsWithPatientData()).thenReturn(completeFormsWithPatientData); queryTask.execute(); Robolectric.flushBackgroundThreadScheduler(); assertEquals(completeFormsWithPatientData, queryTask.get(100, TimeUnit.MILLISECONDS)); } @Test public void shouldGroupPatients() throws Exception, FormController.FormFetchException { BackgroundQueryTask queryTask = new BackgroundQueryTask(formsAdapter); final Patient patient1 = patient("familyName", "middleName", "givenName", "identifier1"); final Patient patient2 = patient("familyName", "middleName", "givenName", "identifier2"); CompleteFormsWithPatientData completeFormsWithPatientData = new CompleteFormsWithPatientData() {{ add(completeFormWithPatientData(patient1)); add(completeFormWithPatientData(patient2)); add(completeFormWithPatientData(patient1)); }}; when(formController.getAllCompleteFormsWithPatientData()).thenReturn(completeFormsWithPatientData); StickyListHeadersListView listView = new StickyListHeadersListView(RuntimeEnvironment.application); listView.setAdapter(formsAdapter); formsAdapter.setListView(listView); queryTask.execute(); Robolectric.flushBackgroundThreadScheduler(); ShadowLooper.runUiThreadTasks(); assertThat(formsAdapter.getPatients(), is(asList(patient1, patient2))); } private CompleteFormWithPatientData completeFormWithPatientData(final Patient patient1) { return new CompleteFormWithPatientData() {{ setPatient(patient1); }}; } private Patient patient(String familyName, String middleName, String givenName, String identifier) { Patient patient = new Patient(); PersonName personName = new PersonName(); personName.setFamilyName(familyName); personName.setMiddleName(middleName); personName.setGivenName(givenName); patient.setNames(asList(personName)); PatientIdentifier personId = new PatientIdentifier(); personId.setIdentifier(identifier); patient.setIdentifiers(asList(personId)); return patient; } }