From 1f6e92eec68ee5af1344d75bc6a704c331c3320d Mon Sep 17 00:00:00 2001 From: Matias Wurschmidt-Wang Date: Tue, 10 Sep 2024 09:46:02 +0200 Subject: [PATCH] K1J-166: Add sjf to pdf logs if active user session with IntegrationParameters. --- .../web/csintegration/util/PDLLogService.java | 30 ++- .../log/factory/LogRequestFactory.java | 4 +- .../log/factory/LogRequestFactoryImpl.java | 5 - .../csintegration/util/PDLLogServiceTest.java | 226 +++++++++++++++++- .../service/log/LogRequestFactoryTest.java | 16 +- 5 files changed, 243 insertions(+), 38 deletions(-) diff --git a/web/src/main/java/se/inera/intyg/webcert/web/csintegration/util/PDLLogService.java b/web/src/main/java/se/inera/intyg/webcert/web/csintegration/util/PDLLogService.java index 2a6ad87373..05bc9f8b5a 100644 --- a/web/src/main/java/se/inera/intyg/webcert/web/csintegration/util/PDLLogService.java +++ b/web/src/main/java/se/inera/intyg/webcert/web/csintegration/util/PDLLogService.java @@ -39,13 +39,13 @@ public class PDLLogService { public void logCreated(Certificate certificate) { logService.logCreateIntyg( - logRequestFactory.createLogRequestFromCertificate(certificate) + logRequestFactory.createLogRequestFromCertificate(certificate, sjf()) ); } public void logCreatedWithIntygUser(Certificate certificate, IntygUser user) { logService.logCreateIntyg( - logRequestFactory.createLogRequestFromCertificate(certificate), + logRequestFactory.createLogRequestFromCertificate(certificate, sjf()), new LogUser.Builder(user.getHsaId(), user.getValdVardenhet().getId(), user.getValdVardgivare().getId()) .userName(user.getNamn()) .userAssignment(user.getSelectedMedarbetarUppdragNamn()) @@ -58,25 +58,25 @@ public void logCreatedWithIntygUser(Certificate certificate, IntygUser user) { public void logRead(Certificate certificate) { logService.logReadIntyg( - logRequestFactory.createLogRequestFromCertificate(certificate) + logRequestFactory.createLogRequestFromCertificate(certificate, sjf()) ); } public void logSaved(Certificate certificate) { logService.logUpdateIntyg( - logRequestFactory.createLogRequestFromCertificate(certificate) + logRequestFactory.createLogRequestFromCertificate(certificate, sjf()) ); } public void logDeleted(Certificate certificate) { logService.logDeleteIntyg( - logRequestFactory.createLogRequestFromCertificate(certificate) + logRequestFactory.createLogRequestFromCertificate(certificate, sjf()) ); } public void logSign(Certificate certificate) { logService.logSignIntyg( - logRequestFactory.createLogRequestFromCertificate(certificate) + logRequestFactory.createLogRequestFromCertificate(certificate, sjf()) ); } @@ -84,32 +84,32 @@ public void logPrinted(Certificate certificate) { final var status = certificate.getMetadata().getStatus(); if (status == CertificateStatus.UNSIGNED || status == CertificateStatus.LOCKED) { logService.logPrintIntygAsDraft( - logRequestFactory.createLogRequestFromCertificate(certificate) + logRequestFactory.createLogRequestFromCertificate(certificate, sjf()) ); } if (status == CertificateStatus.REVOKED) { logService.logPrintRevokedIntygAsPDF( - logRequestFactory.createLogRequestFromCertificate(certificate) + logRequestFactory.createLogRequestFromCertificate(certificate, sjf()) ); } if (status == CertificateStatus.SIGNED) { logService.logPrintIntygAsPDF( - logRequestFactory.createLogRequestFromCertificate(certificate) + logRequestFactory.createLogRequestFromCertificate(certificate, sjf()) ); } } public void logSent(Certificate certificate) { logService.logSendIntygToRecipient( - logRequestFactory.createLogRequestFromCertificate(certificate) + logRequestFactory.createLogRequestFromCertificate(certificate, sjf()) ); } public void logRevoke(Certificate certificate) { logService.logRevokeIntyg( - logRequestFactory.createLogRequestFromCertificate(certificate) + logRequestFactory.createLogRequestFromCertificate(certificate, sjf()) ); } @@ -120,4 +120,12 @@ public void logCreateMessage(String personId, String certificateId) { certificateId ); } + + private boolean sjf() { + final var user = webCertUserService.getUser(); + if (user == null) { + return false; + } + return user.getParameters() != null && user.getParameters().isSjf(); + } } diff --git a/web/src/main/java/se/inera/intyg/webcert/web/service/log/factory/LogRequestFactory.java b/web/src/main/java/se/inera/intyg/webcert/web/service/log/factory/LogRequestFactory.java index 462edbe1da..38e202b5b0 100644 --- a/web/src/main/java/se/inera/intyg/webcert/web/service/log/factory/LogRequestFactory.java +++ b/web/src/main/java/se/inera/intyg/webcert/web/service/log/factory/LogRequestFactory.java @@ -39,8 +39,6 @@ public interface LogRequestFactory { LogRequest createLogRequestFromUser(WebCertUser user, String patientId); LogRequest createLogRequestFromUser(WebCertUser user, String patientId, String intygsId); - - LogRequest createLogRequestFromCertificate(Certificate certificate); - + LogRequest createLogRequestFromCertificate(Certificate certificate, boolean sjf); } diff --git a/web/src/main/java/se/inera/intyg/webcert/web/service/log/factory/LogRequestFactoryImpl.java b/web/src/main/java/se/inera/intyg/webcert/web/service/log/factory/LogRequestFactoryImpl.java index e6e5e2060b..a66ebb1e8e 100644 --- a/web/src/main/java/se/inera/intyg/webcert/web/service/log/factory/LogRequestFactoryImpl.java +++ b/web/src/main/java/se/inera/intyg/webcert/web/service/log/factory/LogRequestFactoryImpl.java @@ -118,11 +118,6 @@ public LogRequest createLogRequestFromUser(WebCertUser user, String patientId, S return logRequest.build(); } - @Override - public LogRequest createLogRequestFromCertificate(Certificate certificate) { - return createLogRequestFromCertificate(certificate, false); - } - @Override public LogRequest createLogRequestFromCertificate(Certificate certificate, boolean sjf) { final var personId = certificate.getMetadata().getPatient().getPersonId().getId(); diff --git a/web/src/test/java/se/inera/intyg/webcert/web/csintegration/util/PDLLogServiceTest.java b/web/src/test/java/se/inera/intyg/webcert/web/csintegration/util/PDLLogServiceTest.java index 5bd760bfc5..9957eb4c56 100644 --- a/web/src/test/java/se/inera/intyg/webcert/web/csintegration/util/PDLLogServiceTest.java +++ b/web/src/test/java/se/inera/intyg/webcert/web/csintegration/util/PDLLogServiceTest.java @@ -21,6 +21,7 @@ import static org.junit.jupiter.api.Assertions.assertEquals; import static org.mockito.Mockito.doReturn; +import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; import org.junit.jupiter.api.Nested; @@ -38,6 +39,7 @@ import se.inera.intyg.webcert.web.service.log.factory.LogRequestFactory; import se.inera.intyg.webcert.web.service.user.WebCertUserService; import se.inera.intyg.webcert.web.service.user.dto.WebCertUser; +import se.inera.intyg.webcert.web.web.controller.integration.dto.IntegrationParameters; @ExtendWith(MockitoExtension.class) class PDLLogServiceTest { @@ -63,7 +65,24 @@ void shouldLogCreateCertificate() { final var expectedLogRequest = LogRequest.builder().build(); final var captor = ArgumentCaptor.forClass(LogRequest.class); - doReturn(expectedLogRequest).when(logRequestFactory).createLogRequestFromCertificate(CERTIFICATE); + doReturn(expectedLogRequest).when(logRequestFactory).createLogRequestFromCertificate(CERTIFICATE, false); + + pdlLogService.logCreated(CERTIFICATE); + + verify(logService).logCreateIntyg(captor.capture()); + + assertEquals(expectedLogRequest, captor.getValue()); + } + + @Test + void shouldLogCreateCertificateWithSjf() { + final var expectedLogRequest = LogRequest.builder().build(); + final var captor = ArgumentCaptor.forClass(LogRequest.class); + final var mockedUser = mock(WebCertUser.class); + + doReturn(expectedLogRequest).when(logRequestFactory).createLogRequestFromCertificate(CERTIFICATE, true); + doReturn(mockedUser).when(webCertUserService).getUser(); + doReturn(sjfIntegrationParameter()).when(mockedUser).getParameters(); pdlLogService.logCreated(CERTIFICATE); @@ -77,7 +96,25 @@ void shouldLogReadCertificate() { final var expectedLogRequest = LogRequest.builder().build(); final var captor = ArgumentCaptor.forClass(LogRequest.class); - doReturn(expectedLogRequest).when(logRequestFactory).createLogRequestFromCertificate(CERTIFICATE); + doReturn(expectedLogRequest).when(logRequestFactory).createLogRequestFromCertificate(CERTIFICATE, false); + + pdlLogService.logRead(CERTIFICATE); + + verify(logService).logReadIntyg(captor.capture()); + + assertEquals(expectedLogRequest, captor.getValue()); + } + + @Test + void shouldLogReadCertificateWithSjf() { + final var expectedLogRequest = LogRequest.builder().build(); + final var captor = ArgumentCaptor.forClass(LogRequest.class); + + final var mockedUser = mock(WebCertUser.class); + + doReturn(expectedLogRequest).when(logRequestFactory).createLogRequestFromCertificate(CERTIFICATE, true); + doReturn(mockedUser).when(webCertUserService).getUser(); + doReturn(sjfIntegrationParameter()).when(mockedUser).getParameters(); pdlLogService.logRead(CERTIFICATE); @@ -91,7 +128,24 @@ void shouldLogSavedCertificate() { final var expectedLogRequest = LogRequest.builder().build(); final var captor = ArgumentCaptor.forClass(LogRequest.class); - doReturn(expectedLogRequest).when(logRequestFactory).createLogRequestFromCertificate(CERTIFICATE); + doReturn(expectedLogRequest).when(logRequestFactory).createLogRequestFromCertificate(CERTIFICATE, false); + + pdlLogService.logSaved(CERTIFICATE); + + verify(logService).logUpdateIntyg(captor.capture()); + + assertEquals(expectedLogRequest, captor.getValue()); + } + + @Test + void shouldLogSavedCertificateWithSjf() { + final var expectedLogRequest = LogRequest.builder().build(); + final var captor = ArgumentCaptor.forClass(LogRequest.class); + final var mockedUser = mock(WebCertUser.class); + + doReturn(expectedLogRequest).when(logRequestFactory).createLogRequestFromCertificate(CERTIFICATE, true); + doReturn(mockedUser).when(webCertUserService).getUser(); + doReturn(sjfIntegrationParameter()).when(mockedUser).getParameters(); pdlLogService.logSaved(CERTIFICATE); @@ -105,7 +159,24 @@ void shouldLogDeletedCertificate() { final var expectedLogRequest = LogRequest.builder().build(); final var captor = ArgumentCaptor.forClass(LogRequest.class); - doReturn(expectedLogRequest).when(logRequestFactory).createLogRequestFromCertificate(CERTIFICATE); + doReturn(expectedLogRequest).when(logRequestFactory).createLogRequestFromCertificate(CERTIFICATE, false); + + pdlLogService.logDeleted(CERTIFICATE); + + verify(logService).logDeleteIntyg(captor.capture()); + + assertEquals(expectedLogRequest, captor.getValue()); + } + + @Test + void shouldLogDeletedCertificateWithSjf() { + final var expectedLogRequest = LogRequest.builder().build(); + final var captor = ArgumentCaptor.forClass(LogRequest.class); + final var mockedUser = mock(WebCertUser.class); + + doReturn(expectedLogRequest).when(logRequestFactory).createLogRequestFromCertificate(CERTIFICATE, true); + doReturn(mockedUser).when(webCertUserService).getUser(); + doReturn(sjfIntegrationParameter()).when(mockedUser).getParameters(); pdlLogService.logDeleted(CERTIFICATE); @@ -125,7 +196,27 @@ void shouldLogForDraft() { .status(CertificateStatus.UNSIGNED) .build(); CERTIFICATE.setMetadata(metadata); - doReturn(expectedLogRequest).when(logRequestFactory).createLogRequestFromCertificate(CERTIFICATE); + doReturn(expectedLogRequest).when(logRequestFactory).createLogRequestFromCertificate(CERTIFICATE, false); + + pdlLogService.logPrinted(CERTIFICATE); + + verify(logService).logPrintIntygAsDraft(captor.capture()); + assertEquals(expectedLogRequest, captor.getValue()); + } + + @Test + void shouldLogForDraftWithSjf() { + final var expectedLogRequest = LogRequest.builder().build(); + final var captor = ArgumentCaptor.forClass(LogRequest.class); + final var mockedUser = mock(WebCertUser.class); + final var metadata = CertificateMetadata.builder() + .status(CertificateStatus.UNSIGNED) + .build(); + CERTIFICATE.setMetadata(metadata); + + doReturn(expectedLogRequest).when(logRequestFactory).createLogRequestFromCertificate(CERTIFICATE, true); + doReturn(mockedUser).when(webCertUserService).getUser(); + doReturn(sjfIntegrationParameter()).when(mockedUser).getParameters(); pdlLogService.logPrinted(CERTIFICATE); @@ -141,7 +232,27 @@ void shouldLogForLockedDraft() { .status(CertificateStatus.LOCKED) .build(); CERTIFICATE.setMetadata(metadata); - doReturn(expectedLogRequest).when(logRequestFactory).createLogRequestFromCertificate(CERTIFICATE); + doReturn(expectedLogRequest).when(logRequestFactory).createLogRequestFromCertificate(CERTIFICATE, false); + + pdlLogService.logPrinted(CERTIFICATE); + + verify(logService).logPrintIntygAsDraft(captor.capture()); + assertEquals(expectedLogRequest, captor.getValue()); + } + + @Test + void shouldLogForLockedDraftWithSjf() { + final var expectedLogRequest = LogRequest.builder().build(); + final var captor = ArgumentCaptor.forClass(LogRequest.class); + final var mockedUser = mock(WebCertUser.class); + final var metadata = CertificateMetadata.builder() + .status(CertificateStatus.LOCKED) + .build(); + CERTIFICATE.setMetadata(metadata); + + doReturn(expectedLogRequest).when(logRequestFactory).createLogRequestFromCertificate(CERTIFICATE, true); + doReturn(mockedUser).when(webCertUserService).getUser(); + doReturn(sjfIntegrationParameter()).when(mockedUser).getParameters(); pdlLogService.logPrinted(CERTIFICATE); @@ -157,7 +268,27 @@ void shouldLogForSigned() { .status(CertificateStatus.SIGNED) .build(); CERTIFICATE.setMetadata(metadata); - doReturn(expectedLogRequest).when(logRequestFactory).createLogRequestFromCertificate(CERTIFICATE); + doReturn(expectedLogRequest).when(logRequestFactory).createLogRequestFromCertificate(CERTIFICATE, false); + + pdlLogService.logPrinted(CERTIFICATE); + + verify(logService).logPrintIntygAsPDF(captor.capture()); + assertEquals(expectedLogRequest, captor.getValue()); + } + + @Test + void shouldLogForSignedWithSjf() { + final var expectedLogRequest = LogRequest.builder().build(); + final var captor = ArgumentCaptor.forClass(LogRequest.class); + final var mockedUser = mock(WebCertUser.class); + final var metadata = CertificateMetadata.builder() + .status(CertificateStatus.SIGNED) + .build(); + CERTIFICATE.setMetadata(metadata); + + doReturn(expectedLogRequest).when(logRequestFactory).createLogRequestFromCertificate(CERTIFICATE, true); + doReturn(mockedUser).when(webCertUserService).getUser(); + doReturn(sjfIntegrationParameter()).when(mockedUser).getParameters(); pdlLogService.logPrinted(CERTIFICATE); @@ -173,7 +304,27 @@ void shouldLogForRevoked() { .status(CertificateStatus.REVOKED) .build(); CERTIFICATE.setMetadata(metadata); - doReturn(expectedLogRequest).when(logRequestFactory).createLogRequestFromCertificate(CERTIFICATE); + doReturn(expectedLogRequest).when(logRequestFactory).createLogRequestFromCertificate(CERTIFICATE, false); + + pdlLogService.logPrinted(CERTIFICATE); + + verify(logService).logPrintRevokedIntygAsPDF(captor.capture()); + assertEquals(expectedLogRequest, captor.getValue()); + } + + @Test + void shouldLogForRevokedWithSjf() { + final var expectedLogRequest = LogRequest.builder().build(); + final var captor = ArgumentCaptor.forClass(LogRequest.class); + final var mockedUser = mock(WebCertUser.class); + final var metadata = CertificateMetadata.builder() + .status(CertificateStatus.REVOKED) + .build(); + CERTIFICATE.setMetadata(metadata); + + doReturn(expectedLogRequest).when(logRequestFactory).createLogRequestFromCertificate(CERTIFICATE, true); + doReturn(mockedUser).when(webCertUserService).getUser(); + doReturn(sjfIntegrationParameter()).when(mockedUser).getParameters(); pdlLogService.logPrinted(CERTIFICATE); @@ -187,7 +338,24 @@ void shouldLogSignCertificate() { final var expectedLogRequest = LogRequest.builder().build(); final var captor = ArgumentCaptor.forClass(LogRequest.class); - doReturn(expectedLogRequest).when(logRequestFactory).createLogRequestFromCertificate(CERTIFICATE); + doReturn(expectedLogRequest).when(logRequestFactory).createLogRequestFromCertificate(CERTIFICATE, false); + + pdlLogService.logSign(CERTIFICATE); + + verify(logService).logSignIntyg(captor.capture()); + + assertEquals(expectedLogRequest, captor.getValue()); + } + + @Test + void shouldLogSignCertificateWithSjf() { + final var expectedLogRequest = LogRequest.builder().build(); + final var captor = ArgumentCaptor.forClass(LogRequest.class); + final var mockedUser = mock(WebCertUser.class); + + doReturn(expectedLogRequest).when(logRequestFactory).createLogRequestFromCertificate(CERTIFICATE, true); + doReturn(mockedUser).when(webCertUserService).getUser(); + doReturn(sjfIntegrationParameter()).when(mockedUser).getParameters(); pdlLogService.logSign(CERTIFICATE); @@ -200,7 +368,23 @@ void shouldLogSignCertificate() { void shouldLogSentCertificate() { final var expectedLogRequest = LogRequest.builder().build(); final var captor = ArgumentCaptor.forClass(LogRequest.class); - doReturn(expectedLogRequest).when(logRequestFactory).createLogRequestFromCertificate(CERTIFICATE); + doReturn(expectedLogRequest).when(logRequestFactory).createLogRequestFromCertificate(CERTIFICATE, false); + + pdlLogService.logSent(CERTIFICATE); + + verify(logService).logSendIntygToRecipient(captor.capture()); + assertEquals(expectedLogRequest, captor.getValue()); + } + + @Test + void shouldLogSentCertificateWithSjf() { + final var expectedLogRequest = LogRequest.builder().build(); + final var captor = ArgumentCaptor.forClass(LogRequest.class); + final var mockedUser = mock(WebCertUser.class); + + doReturn(expectedLogRequest).when(logRequestFactory).createLogRequestFromCertificate(CERTIFICATE, true); + doReturn(mockedUser).when(webCertUserService).getUser(); + doReturn(sjfIntegrationParameter()).when(mockedUser).getParameters(); pdlLogService.logSent(CERTIFICATE); @@ -212,7 +396,23 @@ void shouldLogSentCertificate() { void shouldLogRevokeCertificate() { final var expectedLogRequest = LogRequest.builder().build(); final var captor = ArgumentCaptor.forClass(LogRequest.class); - doReturn(expectedLogRequest).when(logRequestFactory).createLogRequestFromCertificate(CERTIFICATE); + doReturn(expectedLogRequest).when(logRequestFactory).createLogRequestFromCertificate(CERTIFICATE, false); + + pdlLogService.logRevoke(CERTIFICATE); + + verify(logService).logRevokeIntyg(captor.capture()); + assertEquals(expectedLogRequest, captor.getValue()); + } + + @Test + void shouldLogRevokeCertificateWithSjf() { + final var expectedLogRequest = LogRequest.builder().build(); + final var captor = ArgumentCaptor.forClass(LogRequest.class); + final var mockedUser = mock(WebCertUser.class); + + doReturn(expectedLogRequest).when(logRequestFactory).createLogRequestFromCertificate(CERTIFICATE, true); + doReturn(mockedUser).when(webCertUserService).getUser(); + doReturn(sjfIntegrationParameter()).when(mockedUser).getParameters(); pdlLogService.logRevoke(CERTIFICATE); @@ -231,4 +431,8 @@ void shouldLogCreateMessage() { verify(logService).logCreateMessage(webCertUser, PERSON_ID, CERTIFICATE_ID); } + + private IntegrationParameters sjfIntegrationParameter() { + return IntegrationParameters.of(null, null, null, null, null, null, null, null, null, true, false, false, false); + } } diff --git a/web/src/test/java/se/inera/intyg/webcert/web/service/log/LogRequestFactoryTest.java b/web/src/test/java/se/inera/intyg/webcert/web/service/log/LogRequestFactoryTest.java index fa7d2327a1..cbe5c185af 100644 --- a/web/src/test/java/se/inera/intyg/webcert/web/service/log/LogRequestFactoryTest.java +++ b/web/src/test/java/se/inera/intyg/webcert/web/service/log/LogRequestFactoryTest.java @@ -280,39 +280,39 @@ void setUp() { @Test void shallReturnIntygsId() { - assertEquals(CERTIFICATE_ID, logRequestFactory.createLogRequestFromCertificate(certificate).getIntygId()); + assertEquals(CERTIFICATE_ID, logRequestFactory.createLogRequestFromCertificate(certificate, false).getIntygId()); } @Test void shallReturnPatientId() { assertEquals(PATIENT_ID, - logRequestFactory.createLogRequestFromCertificate(certificate).getPatientId().getPersonnummerWithDash() + logRequestFactory.createLogRequestFromCertificate(certificate, false).getPatientId().getPersonnummerWithDash() ); } @Test void shallReturnCareUnitId() { - assertEquals(UNIT_ID, logRequestFactory.createLogRequestFromCertificate(certificate).getIntygCareUnitId()); + assertEquals(UNIT_ID, logRequestFactory.createLogRequestFromCertificate(certificate, false).getIntygCareUnitId()); } @Test void shallReturnCareUnitName() { - assertEquals(UNIT_NAME, logRequestFactory.createLogRequestFromCertificate(certificate).getIntygCareUnitName()); + assertEquals(UNIT_NAME, logRequestFactory.createLogRequestFromCertificate(certificate, false).getIntygCareUnitName()); } @Test void shallReturnCareGiverId() { - assertEquals(CARE_PROVIDER_ID, logRequestFactory.createLogRequestFromCertificate(certificate).getIntygCareGiverId()); + assertEquals(CARE_PROVIDER_ID, logRequestFactory.createLogRequestFromCertificate(certificate, false).getIntygCareGiverId()); } @Test void shallReturnCareGiverName() { - assertEquals(CARE_PROVIDER_NAME, logRequestFactory.createLogRequestFromCertificate(certificate).getIntygCareGiverName()); + assertEquals(CARE_PROVIDER_NAME, logRequestFactory.createLogRequestFromCertificate(certificate, false).getIntygCareGiverName()); } @Test void shallNotIncludeAdditionalInfoIfNotSjf() { - assertNull(logRequestFactory.createLogRequestFromCertificate(certificate).getAdditionalInfo()); + assertNull(logRequestFactory.createLogRequestFromCertificate(certificate, false).getAdditionalInfo()); } @Test @@ -322,7 +322,7 @@ void shallReturnAdditionalInfoForSjf() { @Test void shallNotIncludePatientNameBecauseRequirementToHandleProtectedPersons() { - assertNull(logRequestFactory.createLogRequestFromCertificate(certificate).getPatientName()); + assertNull(logRequestFactory.createLogRequestFromCertificate(certificate, false).getPatientName()); } }