diff options
7 files changed, 62 insertions, 7 deletions
diff --git a/src/main/kotlin/dev/dnpm/etl/processor/monitoring/Request.kt b/src/main/kotlin/dev/dnpm/etl/processor/monitoring/Request.kt index 67f450f..d62a503 100644 --- a/src/main/kotlin/dev/dnpm/etl/processor/monitoring/Request.kt +++ b/src/main/kotlin/dev/dnpm/etl/processor/monitoring/Request.kt @@ -54,6 +54,7 @@ data class Request( @Embedded.Nullable var report: Report? = null, @Column("submission_accepted") var submissionAccepted: Boolean = false, @Column("followup_count") var followupCount: Int = 0, + @Column("expected_followup_count") var expectedFollowupCount: Int = 0, ) { constructor( uuid: RequestId, diff --git a/src/main/kotlin/dev/dnpm/etl/processor/services/RequestProcessor.kt b/src/main/kotlin/dev/dnpm/etl/processor/services/RequestProcessor.kt index 00e6b73..e545644 100644 --- a/src/main/kotlin/dev/dnpm/etl/processor/services/RequestProcessor.kt +++ b/src/main/kotlin/dev/dnpm/etl/processor/services/RequestProcessor.kt @@ -113,6 +113,10 @@ class RequestProcessor( } } + val maxFollowUpCount = this.requestService.allRequestsByPatientPseudonym(request.patientPseudonym()) + .maxByOrNull { it.followupCount } + ?.followupCount ?: -1 + if ( appConfigProperties.postInitialSubmissionBlock && hasSuccessfulInitialSubmission(request.patientPseudonym()) && @@ -128,7 +132,8 @@ class RequestProcessor( submissionType = submissionType, status = RequestStatus.BLOCKED_INITIAL, tan = Tan(request.content.metadata?.transferTan.orEmpty()), - followupCount = request.content.followUps?.size ?: 0, + followupCount = maxFollowUpCount, + expectedFollowupCount = request.content.followUps?.size ?: 0, ) ) // Exit - no further processing @@ -166,7 +171,8 @@ class RequestProcessor( submissionType = submissionType, status = RequestStatus.UNKNOWN, tan = Tan(request.content.metadata?.transferTan.orEmpty()), - followupCount = request.content.followUps?.size ?: 0, + followupCount = maxFollowUpCount, + expectedFollowupCount = request.content.followUps?.size ?: 0, ) ) diff --git a/src/main/kotlin/dev/dnpm/etl/processor/services/ResponseProcessor.kt b/src/main/kotlin/dev/dnpm/etl/processor/services/ResponseProcessor.kt index 947ec17..2818e00 100644 --- a/src/main/kotlin/dev/dnpm/etl/processor/services/ResponseProcessor.kt +++ b/src/main/kotlin/dev/dnpm/etl/processor/services/ResponseProcessor.kt @@ -53,10 +53,12 @@ class ResponseProcessor( Report( "Keine Probleme erkannt", ) + it.followupCount = it.expectedFollowupCount } RequestStatus.WARNING -> { it.report = Report("Warnungen über mangelhafte Daten", event.body.orElse("")) + it.followupCount = it.expectedFollowupCount } RequestStatus.ERROR -> { diff --git a/src/main/resources/db/migration/mariadb/V0_16_3_1__ExpectedFollowUpCount.sql b/src/main/resources/db/migration/mariadb/V0_16_3_1__ExpectedFollowUpCount.sql new file mode 100644 index 0000000..ded8172 --- /dev/null +++ b/src/main/resources/db/migration/mariadb/V0_16_3_1__ExpectedFollowUpCount.sql @@ -0,0 +1,2 @@ +ALTER TABLE request ADD COLUMN expected_followup_count int DEFAULT 0; +UPDATE request SET expected_followup_count = -1;
\ No newline at end of file diff --git a/src/main/resources/db/migration/postgresql/V0_16_3_1__ExpectedFollowUpCount.sql b/src/main/resources/db/migration/postgresql/V0_16_3_1__ExpectedFollowUpCount.sql new file mode 100644 index 0000000..ded8172 --- /dev/null +++ b/src/main/resources/db/migration/postgresql/V0_16_3_1__ExpectedFollowUpCount.sql @@ -0,0 +1,2 @@ +ALTER TABLE request ADD COLUMN expected_followup_count int DEFAULT 0; +UPDATE request SET expected_followup_count = -1;
\ No newline at end of file diff --git a/src/test/kotlin/dev/dnpm/etl/processor/services/RequestProcessorTest.kt b/src/test/kotlin/dev/dnpm/etl/processor/services/RequestProcessorTest.kt index 0fea80a..7e771df 100644 --- a/src/test/kotlin/dev/dnpm/etl/processor/services/RequestProcessorTest.kt +++ b/src/test/kotlin/dev/dnpm/etl/processor/services/RequestProcessorTest.kt @@ -1294,7 +1294,8 @@ class RequestProcessorTest { assertThat(requestCaptor.firstValue).isNotNull assertThat(requestCaptor.firstValue.status).isEqualTo(RequestStatus.UNKNOWN) assertThat(requestCaptor.firstValue.submissionType).isEqualTo(SubmissionType.FOLLOWUP) - assertThat(requestCaptor.firstValue.followupCount).isEqualTo(1) + assertThat(requestCaptor.firstValue.followupCount).isEqualTo(0) + assertThat(requestCaptor.firstValue.expectedFollowupCount).isEqualTo(1) val eventCaptor = argumentCaptor<ResponseEvent>() verify(applicationEventPublisher, times(1)).publishEvent(eventCaptor.capture()) @@ -1415,7 +1416,8 @@ class RequestProcessorTest { assertThat(requestCaptor.firstValue).isNotNull assertThat(requestCaptor.firstValue.status).isEqualTo(RequestStatus.UNKNOWN) assertThat(requestCaptor.firstValue.submissionType).isEqualTo(SubmissionType.FOLLOWUP) - assertThat(requestCaptor.firstValue.followupCount).isEqualTo(1) + assertThat(requestCaptor.firstValue.followupCount).isEqualTo(0) + assertThat(requestCaptor.firstValue.expectedFollowupCount).isEqualTo(1) val eventCaptor = argumentCaptor<ResponseEvent>() verify(applicationEventPublisher, times(1)).publishEvent(eventCaptor.capture()) @@ -1522,6 +1524,8 @@ class RequestProcessorTest { assertThat(requestCaptor.firstValue).isNotNull assertThat(requestCaptor.firstValue.status).isEqualTo(RequestStatus.UNKNOWN) assertThat(requestCaptor.firstValue.submissionType).isEqualTo(SubmissionType.FOLLOWUP) + assertThat(requestCaptor.firstValue.followupCount).isEqualTo(0) + assertThat(requestCaptor.firstValue.expectedFollowupCount).isEqualTo(1) val eventCaptor = argumentCaptor<ResponseEvent>() verify(applicationEventPublisher, times(1)).publishEvent(eventCaptor.capture()) @@ -1645,6 +1649,7 @@ class RequestProcessorTest { assertThat(requestCaptor.firstValue.status).isEqualTo(RequestStatus.UNKNOWN) assertThat(requestCaptor.firstValue.submissionType).isEqualTo(SubmissionType.ADDITION) assertThat(requestCaptor.firstValue.followupCount).isEqualTo(1) + assertThat(requestCaptor.firstValue.expectedFollowupCount).isEqualTo(1) val eventCaptor = argumentCaptor<ResponseEvent>() verify(applicationEventPublisher, times(1)).publishEvent(eventCaptor.capture()) @@ -1786,7 +1791,8 @@ class RequestProcessorTest { assertThat(requestCaptor.firstValue).isNotNull assertThat(requestCaptor.firstValue.status).isEqualTo(RequestStatus.UNKNOWN) assertThat(requestCaptor.firstValue.submissionType).isEqualTo(SubmissionType.FOLLOWUP) - assertThat(requestCaptor.firstValue.followupCount).isEqualTo(2) + assertThat(requestCaptor.firstValue.followupCount).isEqualTo(1) + assertThat(requestCaptor.firstValue.expectedFollowupCount).isEqualTo(2) val eventCaptor = argumentCaptor<ResponseEvent>() verify(applicationEventPublisher, times(1)).publishEvent(eventCaptor.capture()) @@ -1910,6 +1916,7 @@ class RequestProcessorTest { assertThat(requestCaptor.firstValue.status).isEqualTo(RequestStatus.UNKNOWN) assertThat(requestCaptor.firstValue.submissionType).isEqualTo(SubmissionType.ADDITION) assertThat(requestCaptor.firstValue.followupCount).isEqualTo(1) + assertThat(requestCaptor.firstValue.expectedFollowupCount).isEqualTo(1) val eventCaptor = argumentCaptor<ResponseEvent>() verify(applicationEventPublisher, times(1)).publishEvent(eventCaptor.capture()) @@ -2004,7 +2011,8 @@ class RequestProcessorTest { assertThat(requestCaptor.firstValue).isNotNull assertThat(requestCaptor.firstValue.status).isEqualTo(RequestStatus.UNKNOWN) assertThat(requestCaptor.firstValue.submissionType).isEqualTo(SubmissionType.INITIAL) - assertThat(requestCaptor.firstValue.followupCount).isEqualTo(1) + assertThat(requestCaptor.firstValue.followupCount).isEqualTo(0) + assertThat(requestCaptor.firstValue.expectedFollowupCount).isEqualTo(1) val eventCaptor = argumentCaptor<ResponseEvent>() verify(applicationEventPublisher, times(1)).publishEvent(eventCaptor.capture()) @@ -2104,7 +2112,8 @@ class RequestProcessorTest { assertThat(requestCaptor.firstValue).isNotNull assertThat(requestCaptor.firstValue.status).isEqualTo(RequestStatus.UNKNOWN) assertThat(requestCaptor.firstValue.submissionType).isEqualTo(SubmissionType.ADDITION) - assertThat(requestCaptor.firstValue.followupCount).isEqualTo(0) + assertThat(requestCaptor.firstValue.followupCount).isEqualTo(-1) + assertThat(requestCaptor.firstValue.expectedFollowupCount).isEqualTo(0) val eventCaptor = argumentCaptor<ResponseEvent>() verify(applicationEventPublisher, times(1)).publishEvent(eventCaptor.capture()) diff --git a/src/test/kotlin/dev/dnpm/etl/processor/services/ResponseProcessorTest.kt b/src/test/kotlin/dev/dnpm/etl/processor/services/ResponseProcessorTest.kt index 441f3a9..c7a0af7 100644 --- a/src/test/kotlin/dev/dnpm/etl/processor/services/ResponseProcessorTest.kt +++ b/src/test/kotlin/dev/dnpm/etl/processor/services/ResponseProcessorTest.kt @@ -32,6 +32,7 @@ import org.junit.jupiter.api.BeforeEach import org.junit.jupiter.api.Test import org.junit.jupiter.api.extension.ExtendWith import org.junit.jupiter.params.ParameterizedTest +import org.junit.jupiter.params.provider.Arguments import org.junit.jupiter.params.provider.MethodSource import org.mockito.Mock import org.mockito.junit.jupiter.MockitoExtension @@ -115,6 +116,27 @@ class ResponseProcessorTest { assertThat(captor.firstValue.status).isEqualTo(requestStatus) } + @ParameterizedTest + @MethodSource("requestFollowUpCount") + fun shoulUpdateFollowUpCountFromExpectedFollowUpCountOnSuccess(requestStatus: RequestStatus, followUpCount: Int, expectedFollowUpCount: Int) { + doAnswer { + testRequest.followupCount = followUpCount + testRequest.expectedFollowupCount = expectedFollowUpCount + Optional.of(testRequest) + }.whenever(requestService).findByUuid(anyValueClass()) + + val event = + ResponseEvent(RequestId("TestID1234"), Instant.parse("2023-09-09T00:00:00Z"), requestStatus) + + this.responseProcessor.handleResponseEvent(event) + + val captor = argumentCaptor<Request>() + verify(requestService, times(1)).save(captor.capture()) + assertThat(captor.firstValue).isNotNull + assertThat(captor.firstValue.status).isEqualTo(requestStatus) + assertThat(captor.firstValue.followupCount).isEqualTo(expectedFollowUpCount) + } + companion object { @JvmStatic @@ -126,5 +148,16 @@ class ResponseProcessorTest { RequestStatus.DUPLICATION, ) } + + @JvmStatic + fun requestFollowUpCount(): Set<Arguments> { + return setOf( + Arguments.of(RequestStatus.SUCCESS, 1, 2), + Arguments.of(RequestStatus.WARNING, 1, 2), + Arguments.of(RequestStatus.ERROR, 1, 1), + Arguments.of(RequestStatus.DUPLICATION, 1, 1), + Arguments.of(RequestStatus.NO_CONSENT, 1, 1), + ) + } } } |
