package uk.ac.ox.zoo.seeg.abraid.mp.common.service.workflow.support; import org.joda.time.DateTime; import org.joda.time.DateTimeUtils; import org.junit.Before; import org.junit.Test; import uk.ac.ox.zoo.seeg.abraid.mp.common.domain.DiseaseGroup; import uk.ac.ox.zoo.seeg.abraid.mp.common.domain.DiseaseOccurrence; import uk.ac.ox.zoo.seeg.abraid.mp.common.domain.DiseaseOccurrenceStatus; import uk.ac.ox.zoo.seeg.abraid.mp.common.service.core.DiseaseService; import uk.ac.ox.zoo.seeg.abraid.mp.common.service.workflow.DiseaseOccurrenceValidationService; import java.util.Arrays; import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.Mockito.*; /** * Tests the AutomaticModelRunsEnabler class. * * Copyright (c) 2014 University of Oxford */ public class AutomaticModelRunsEnablerTest { private DiseaseService diseaseService; private DiseaseOccurrenceValidationService diseaseOccurrenceValidationService; private AutomaticModelRunsEnabler automaticModelRunsEnabler; @Before public void setUp() { diseaseService = mock(DiseaseService.class); diseaseOccurrenceValidationService = mock(DiseaseOccurrenceValidationService.class); automaticModelRunsEnabler = new AutomaticModelRunsEnabler(diseaseService, diseaseOccurrenceValidationService, 7); DateTimeUtils.setCurrentMillisFixed(DateTime.now().getMillis()); } @Test public void enableAutomaticModelRunsSavesAutomaticModelRunsStartDateOnDiseaseGroup() throws Exception { // Arrange int diseaseGroupId = 87; DiseaseGroup diseaseGroup = new DiseaseGroup(diseaseGroupId); when(diseaseService.getDiseaseGroupById(diseaseGroupId)).thenReturn(diseaseGroup); DateTime now = DateTime.now(); DateTimeUtils.setCurrentMillisFixed(now.getMillis()); // Act automaticModelRunsEnabler.enable(diseaseGroupId); // Assert verify(diseaseService).saveDiseaseGroup(diseaseGroup); assertThat(diseaseGroup.getAutomaticModelRunsStartDate()).isEqualTo(now); } @Test public void enableAutomaticModelRunsAddsValidationParametersToDiseaseOccurrence() throws Exception { // Arrange int diseaseGroupId = 87; DiseaseGroup diseaseGroup = new DiseaseGroup(diseaseGroupId); when(diseaseService.getDiseaseGroupById(diseaseGroupId)).thenReturn(diseaseGroup); DiseaseOccurrence occurrence1 = new DiseaseOccurrence(); DiseaseOccurrence occurrence2 = new DiseaseOccurrence(); occurrence1.setOccurrenceDate(DateTime.now().minusDays(21)); occurrence2.setOccurrenceDate(DateTime.now().minusDays(1)); when(diseaseService.getDiseaseOccurrencesYetToHaveFinalWeightingAssigned( diseaseGroupId, DiseaseOccurrenceStatus.READY, DiseaseOccurrenceStatus.AWAITING_BATCHING )).thenReturn( Arrays.asList(occurrence1, occurrence2) ); // Act automaticModelRunsEnabler.enable(diseaseGroupId); // Assert assertThat(occurrence1.getStatus()).isEqualTo(DiseaseOccurrenceStatus.DISCARDED_UNUSED); assertThat(occurrence1.getFinalWeighting()).isNull(); assertThat(occurrence1.getFinalWeightingExcludingSpatial()).isNull(); verify(diseaseOccurrenceValidationService).addValidationParameters(Arrays.asList(occurrence2)); verify(diseaseService).saveDiseaseOccurrence(occurrence1); verify(diseaseService).saveDiseaseOccurrence(occurrence2); } }