From d08c17c8e10cd924be57b68c464b72ad34b8235a Mon Sep 17 00:00:00 2001 From: Ana Medrano Date: Tue, 15 Oct 2024 17:09:34 -0700 Subject: [PATCH] Complete Transmissions work with test --- .../actions/UploadSubmissionToS3.java | 3 +- .../ilgcc/jobs/TransmissionsRecurringJob.java | 27 +-- .../jobs/EnqueueDocumentTransferTest.java | 127 ------------ .../jobs/TransmissionsRecurringJobTest.java | 188 +++++++++++------- 4 files changed, 138 insertions(+), 207 deletions(-) delete mode 100644 src/test/java/org/ilgcc/jobs/EnqueueDocumentTransferTest.java diff --git a/src/main/java/org/ilgcc/app/submission/actions/UploadSubmissionToS3.java b/src/main/java/org/ilgcc/app/submission/actions/UploadSubmissionToS3.java index 1fdb1adb..0a706150 100644 --- a/src/main/java/org/ilgcc/app/submission/actions/UploadSubmissionToS3.java +++ b/src/main/java/org/ilgcc/app/submission/actions/UploadSubmissionToS3.java @@ -44,7 +44,8 @@ public UploadSubmissionToS3(PdfService pdfService, CloudFileRepository cloudFile @Override public void run(Submission submission) { if (enableBackgroundJobs.equals("true") && waitForProviderResponseFlag.equals("false")) { - enqueueDocumentTransfer.enqueuePDFDocumentBySubmission(pdfService, cloudFileRepository, pdfTransmissionJob, submission, FileNameUtility.getFileNameForPdf(submission)); + enqueueDocumentTransfer.enqueuePDFDocumentBySubmission(pdfService, cloudFileRepository, pdfTransmissionJob, + submission, FileNameUtility.getFileNameForPdf(submission)); } } } \ No newline at end of file diff --git a/src/main/java/org/ilgcc/jobs/TransmissionsRecurringJob.java b/src/main/java/org/ilgcc/jobs/TransmissionsRecurringJob.java index 57cd917e..827109ff 100644 --- a/src/main/java/org/ilgcc/jobs/TransmissionsRecurringJob.java +++ b/src/main/java/org/ilgcc/jobs/TransmissionsRecurringJob.java @@ -36,13 +36,12 @@ public class TransmissionsRecurringJob { private final PdfTransmissionJob pdfTransmissionJob; private final EnqueueDocumentTransfer enqueueDocumentTransfer; - public TransmissionsRecurringJob( - S3PresignService s3PresignService, - TransmissionRepositoryService transmissionRepositoryService, - UserFileRepositoryService userFileRepositoryService, UploadedDocumentTransmissionJob uploadedDocumentTransmissionJob, - PdfService pdfService, + public TransmissionsRecurringJob(S3PresignService s3PresignService, + TransmissionRepositoryService transmissionRepositoryService, UserFileRepositoryService userFileRepositoryService, + UploadedDocumentTransmissionJob uploadedDocumentTransmissionJob, PdfService pdfService, CloudFileRepository cloudFileRepository, PdfTransmissionJob pdfTransmissionJob, - @Value("${il-gcc.dts.wait-for-provider-response}") String waitForProviderResponseFlag, EnqueueDocumentTransfer enqueueDocumentTransfer) { + @Value("${il-gcc.dts.wait-for-provider-response}") String waitForProviderResponseFlag, + EnqueueDocumentTransfer enqueueDocumentTransfer) { this.s3PresignService = s3PresignService; this.transmissionRepositoryService = transmissionRepositoryService; this.userFileRepositoryService = userFileRepositoryService; @@ -51,7 +50,7 @@ public TransmissionsRecurringJob( this.cloudFileRepository = cloudFileRepository; this.pdfTransmissionJob = pdfTransmissionJob; this.waitForProviderResponseFlag = waitForProviderResponseFlag; - this.enqueueDocumentTransfer=enqueueDocumentTransfer; + this.enqueueDocumentTransfer = enqueueDocumentTransfer; } @Recurring(id = "no-provider-response-job", cron = "0 * * * *") @@ -61,16 +60,20 @@ public void noProviderResponseJob() { if (submissionsWithoutTransmissions.isEmpty() || waitForProviderResponseFlag.equals("false")) { return; } else { - log.info(String.format("Running the 'No provider response job' for %s submissions", submissionsWithoutTransmissions.size())); + log.info(String.format("Running the 'No provider response job' for %s submissions", + submissionsWithoutTransmissions.size())); ZoneId chicagoTimeZone = ZoneId.of("America/Chicago"); ZonedDateTime todaysDate = OffsetDateTime.now().atZoneSameInstant(chicagoTimeZone); for (Submission submission : submissionsWithoutTransmissions) { if (!hasProviderResponse(submission) && providerApplicationHasExpired(submission, todaysDate)) { - enqueueDocumentTransfer.enqueuePDFDocumentBySubmission(pdfService, cloudFileRepository, pdfTransmissionJob, submission, FileNameUtility.getFileNameForPdf(submission, "No-Provider-Response")); - enqueueDocumentTransfer.enqueueUploadedDocumentBySubmission(userFileRepositoryService, uploadedDocumentTransmissionJob, s3PresignService, submission); + enqueueDocumentTransfer.enqueuePDFDocumentBySubmission(pdfService, cloudFileRepository, pdfTransmissionJob, + submission, FileNameUtility.getFileNameForPdf(submission, "No-Provider-Response")); + enqueueDocumentTransfer.enqueueUploadedDocumentBySubmission(userFileRepositoryService, + uploadedDocumentTransmissionJob, s3PresignService, submission); } else if (hasProviderResponse(submission) && providerApplicationHasExpired(submission, todaysDate)) { - log.error(String.format( - "The provider response exists but the provider response expired. Check submission: %s", submission.getId())); + log.error( + String.format("The provider response exists but the provider response expired. Check submission: %s", + submission.getId())); } } } diff --git a/src/test/java/org/ilgcc/jobs/EnqueueDocumentTransferTest.java b/src/test/java/org/ilgcc/jobs/EnqueueDocumentTransferTest.java deleted file mode 100644 index 222d04f6..00000000 --- a/src/test/java/org/ilgcc/jobs/EnqueueDocumentTransferTest.java +++ /dev/null @@ -1,127 +0,0 @@ -package org.ilgcc.jobs; - -import static java.time.Duration.ofMillis; -import static net.javacrumbs.jsonunit.assertj.JsonAssertions.assertThatJson; -import static org.assertj.core.api.Assertions.assertThat; -import static org.awaitility.Awaitility.await; -import static org.ilgcc.jobs.HttpClient.getJson; -import static org.jobrunr.server.BackgroundJobServerConfiguration.usingStandardBackgroundJobServerConfiguration; -import static org.junit.jupiter.api.Assertions.assertThrows; -import static org.mockito.ArgumentMatchers.any; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.when; -import formflow.library.data.Submission; -import formflow.library.data.SubmissionRepositoryService; -import java.io.ByteArrayInputStream; -import java.io.IOException; -import java.io.OutputStream; -import java.net.URL; -import java.time.OffsetDateTime; -import java.util.List; -import java.util.concurrent.TimeUnit; -import org.ilgcc.app.IlGCCApplication; -import org.ilgcc.app.data.Transmission; -import org.ilgcc.app.data.TransmissionRepositoryService; -import org.ilgcc.app.file_transfer.DocumentTransferRequestService; -import org.ilgcc.app.file_transfer.HttpUrlConnectionFactory; -import org.ilgcc.app.file_transfer.S3PresignService; -import org.ilgcc.app.utils.SubmissionTestBuilder; -import org.ilgcc.app.utils.enums.TransmissionStatus; -import org.ilgcc.app.utils.enums.TransmissionType; -import org.jobrunr.configuration.JobRunr; -import org.jobrunr.scheduling.JobScheduler; -import org.jobrunr.storage.InMemoryStorageProvider; -import org.junit.jupiter.api.AfterEach; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Test; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.boot.test.mock.mockito.MockBean; -import org.springframework.boot.test.mock.mockito.SpyBean; -import org.springframework.test.context.ActiveProfiles; -import java.net.HttpURLConnection; -import org.springframework.test.context.TestPropertySource; - - -@SpringBootTest(classes = IlGCCApplication.class) -@ActiveProfiles("test") -@TestPropertySource(properties = { - "DOCUMENT_TRANSFER_SERVICE_URL=http://localhost:8080", - "DOCUMENT_TRANSFER_SERVICE_CONSUMER_ID=test-consumer", - "DOCUMENT_TRANSFER_SERVICE_AUTH_TOKEN=test-token" -}) -class EnqueueDocumentTransferTest { - - private PdfTransmissionJob pdfTransmissionJob; - - @MockBean - private S3PresignService s3PresignService; - - @SpyBean - private TransmissionRepositoryService transmissionRepositoryService; - - @Autowired - SubmissionRepositoryService submissionRepositoryService; - - @MockBean - HttpUrlConnectionFactory httpUrlConnectionFactory; - - @MockBean - HttpURLConnection httpUrlConnection; - - @Autowired - DocumentTransferRequestService documentTransferRequestService; - - private static final InMemoryStorageProvider storageProvider = new InMemoryStorageProvider(); - - private JobScheduler jobScheduler; - - private Submission submission; - - private final String objectPath = "testPath"; - @Autowired - private Transmission transmission; - - @BeforeEach - void setUp() { - submission = new SubmissionTestBuilder() - .withParentDetails() - .withSubmittedAtDate(OffsetDateTime.now()) - .build(); - submissionRepositoryService.save(submission); - - jobScheduler = JobRunr.configure() - .useStorageProvider(storageProvider) - .useJobActivator(this::jobActivator) - .useDashboard() - .useBackgroundJobServer(usingStandardBackgroundJobServerConfiguration() - .andPollInterval(ofMillis(200))).initialize().getJobScheduler(); - - pdfTransmissionJob = new PdfTransmissionJob(s3PresignService, jobScheduler, documentTransferRequestService, transmissionRepositoryService); - } - - @AfterEach - public void stopJobRunr() { - JobRunr.destroy(); - } - - @Test - void whenUserFilesExistAndScannedAndClearCallEnqueueUploadedDocs() throws IOException { - assertThat(true).isTrue(); - } - - @Test - void whenCalledCallsEnquequePDFTransmission() throws IOException { - assertThat(true).isTrue(); - } - - - // Tells JobRunr's configuration what class will activate/call enqueue for jobs - private T jobActivator(Class clazz) { - return (T) pdfTransmissionJob; - } - - private String getSucceededJobs() { - return getJson("http://localhost:8000/api/jobs?state=SUCCEEDED"); - } -} \ No newline at end of file diff --git a/src/test/java/org/ilgcc/jobs/TransmissionsRecurringJobTest.java b/src/test/java/org/ilgcc/jobs/TransmissionsRecurringJobTest.java index ed479af4..c20272a8 100644 --- a/src/test/java/org/ilgcc/jobs/TransmissionsRecurringJobTest.java +++ b/src/test/java/org/ilgcc/jobs/TransmissionsRecurringJobTest.java @@ -1,59 +1,69 @@ package org.ilgcc.jobs; -import static org.assertj.core.api.AssertionsForClassTypes.assertThat; -import static org.ilgcc.app.utils.enums.TransmissionStatus.Queued; -import static org.ilgcc.app.utils.enums.TransmissionType.APPLICATION_PDF; - import formflow.library.data.Submission; -import formflow.library.data.SubmissionRepositoryService; -import static org.mockito.Mockito.*; - +import formflow.library.data.SubmissionRepository; +import formflow.library.data.UserFileRepositoryService; import formflow.library.file.CloudFileRepository; import formflow.library.pdf.PdfService; -import java.time.OffsetDateTime; import java.util.Date; -import java.util.logging.Logger; import org.ilgcc.app.IlGCCApplication; import org.ilgcc.app.data.Transmission; +import org.ilgcc.app.data.TransmissionRepository; import org.ilgcc.app.data.TransmissionRepositoryService; +import org.ilgcc.app.file_transfer.S3PresignService; import org.ilgcc.app.utils.SubmissionTestBuilder; +import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; -import org.mockito.MockedStatic; +import java.time.OffsetDateTime; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.boot.test.mock.mockito.MockBean; -import org.springframework.boot.test.mock.mockito.SpyBean; import org.springframework.test.context.ActiveProfiles; -import org.springframework.test.context.TestPropertySource; + +import static org.ilgcc.app.utils.enums.TransmissionStatus.Queued; +import static org.ilgcc.app.utils.enums.TransmissionType.APPLICATION_PDF; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.*; @SpringBootTest(classes = IlGCCApplication.class) @ActiveProfiles("test") -@TestPropertySource(properties = { - "WAIT_FOR_PROVIDER_RESPONSE_FLAG=true" -}) public class TransmissionsRecurringJobTest { + @Autowired - private TransmissionRepositoryService transmissionRepositoryService; + private SubmissionRepository submissionRepository; + @Autowired - private SubmissionRepositoryService submissionRepositoryService; + private TransmissionRepository transmissionRepository; + @Autowired - private TransmissionsRecurringJob transmissionsRecurringJob; -// @MockBean -// private EnqueueDocumentTransfer enqueueDocumentTransfer; + private TransmissionRepositoryService transmissionRepositoryService; + @Mock + private S3PresignService s3PresignService; + + @Mock + private UserFileRepositoryService userFileRepositoryService; + + @Mock + private UploadedDocumentTransmissionJob uploadedDocumentTransmissionJob; + + @Mock + private PdfService pdfService; - @MockBean - private PdfService mockedPdfService; - @MockBean - private CloudFileRepository mockedCloudFileRepository; - @MockBean - private PdfTransmissionJob mockedPdfTransmissionJob; - @MockBean - private Submission mockedSubmission; + @Mock + private CloudFileRepository cloudFileRepository; + @Mock + private PdfTransmissionJob pdfTransmissionJob; - private Logger mockLogger; + @Mock + private EnqueueDocumentTransfer enqueueDocumentTransfer; + + @InjectMocks + private TransmissionsRecurringJob transmissionsRecurringJob; private Submission expiredSubmission; private Submission transmittedSubmission; @@ -63,72 +73,116 @@ public class TransmissionsRecurringJobTest { @BeforeEach void setUp() { - transmittedSubmission = new SubmissionTestBuilder() + MockitoAnnotations.initMocks(this); + transmissionsRecurringJob = new TransmissionsRecurringJob( + s3PresignService, + transmissionRepositoryService, + userFileRepositoryService, + uploadedDocumentTransmissionJob, + pdfService, + cloudFileRepository, + pdfTransmissionJob, + "true", + enqueueDocumentTransfer + ); + } + + @AfterEach + protected void clearSubmissions() { + transmissionRepository.deleteAll(); + submissionRepository.deleteAll(); + } + + @Test + void enqueueDocumentTransferWillNotRunIfFlagIsOff() { + expiredSubmission = new SubmissionTestBuilder() .withParentDetails() .withSubmittedAtDate(OffsetDateTime.now().minusDays(7)) - .with("providerResponseSubmissionId", "123124") .build(); - submissionRepositoryService.save(transmittedSubmission); - transmissionRepositoryService.save(new Transmission(transmittedSubmission, null, Date.from(OffsetDateTime.now() - .toInstant()), Queued, APPLICATION_PDF, null)); + submissionRepository.save(expiredSubmission); + + transmissionsRecurringJob = new TransmissionsRecurringJob( + s3PresignService, + transmissionRepositoryService, + userFileRepositoryService, + uploadedDocumentTransmissionJob, + pdfService, + cloudFileRepository, + pdfTransmissionJob, + "false", + enqueueDocumentTransfer + ); + transmissionsRecurringJob.noProviderResponseJob(); + + verifyNoInteractions(enqueueDocumentTransfer); + } + @Test + void enqueueDocumentTransferIsOnlyCalledOnExpiredSubmissions() { unexpiredSubmission = new SubmissionTestBuilder() .withParentDetails() .withSubmittedAtDate(OffsetDateTime.now()) .build(); - submissionRepositoryService.save(unexpiredSubmission); + submissionRepository.save(unexpiredSubmission); expiredSubmission = new SubmissionTestBuilder() .withParentDetails() .withSubmittedAtDate(OffsetDateTime.now().minusDays(7)) .build(); - submissionRepositoryService.save(expiredSubmission); + submissionRepository.save(expiredSubmission); unsubmittedSubmission = new SubmissionTestBuilder() .withParentDetails() .build(); - submissionRepositoryService.save(unsubmittedSubmission); + submissionRepository.save(unsubmittedSubmission); - expiredUntransmittedSubmissionWithProviderResponse = new SubmissionTestBuilder() + transmissionsRecurringJob.noProviderResponseJob(); + + //Confirms that the method was called on the expired submission + verify(enqueueDocumentTransfer, times(1)).enqueuePDFDocumentBySubmission(eq(pdfService), eq(cloudFileRepository), + eq(pdfTransmissionJob), eq(expiredSubmission), any()); + verify(enqueueDocumentTransfer, times(1)).enqueueUploadedDocumentBySubmission(eq(userFileRepositoryService), + eq(uploadedDocumentTransmissionJob), eq(s3PresignService), eq(expiredSubmission)); + + verify(enqueueDocumentTransfer, never()).enqueuePDFDocumentBySubmission(eq(pdfService), eq(cloudFileRepository), + eq(pdfTransmissionJob), eq(unexpiredSubmission), any()); + verify(enqueueDocumentTransfer, never()).enqueueUploadedDocumentBySubmission(eq(userFileRepositoryService), + eq(uploadedDocumentTransmissionJob), eq(s3PresignService), eq(unexpiredSubmission)); + + verify(enqueueDocumentTransfer, never()).enqueuePDFDocumentBySubmission(eq(pdfService), eq(cloudFileRepository), + eq(pdfTransmissionJob), eq(unsubmittedSubmission), any()); + verify(enqueueDocumentTransfer, never()).enqueueUploadedDocumentBySubmission(eq(userFileRepositoryService), + eq(uploadedDocumentTransmissionJob), eq(s3PresignService), eq(unsubmittedSubmission)); + } + + @Test + void enqueueDocumentTransferWillNotBeCalledIfSubmissionHasTransmission() { + transmittedSubmission = new SubmissionTestBuilder() .withParentDetails() .withSubmittedAtDate(OffsetDateTime.now().minusDays(7)) .with("providerResponseSubmissionId", "123124") .build(); - submissionRepositoryService.save(expiredUntransmittedSubmissionWithProviderResponse); - - -// verify(enqueueDocumentTransfer).enqueuePDFDocumentBySubmission(mockedPdfService, mockedCloudFileRepository, mockedPdfTransmissionJob, eq(mockedSubmission), anyString()); -// doNothing().when(enqueueDocumentTransfer).enqueueUploadedDocumentBySubmission(any(), any(), any(), any()); - - } - + submissionRepository.save(transmittedSubmission); + transmissionRepositoryService.save(new Transmission(transmittedSubmission, null, Date.from(OffsetDateTime.now() + .toInstant()), Queued, APPLICATION_PDF, null)); - @Test - void noProviderResponseJobWillLogIfAnySubmissionsAreMissingTransmissions() { - MockedStatic mockedEnqueueDocumentTransfer = mockStatic(EnqueueDocumentTransfer.class); transmissionsRecurringJob.noProviderResponseJob(); - mockedEnqueueDocumentTransfer.verify() - verify(mockLogger).info(eq(String.format("Running the 'No provider response job' for %s submissions", 1))); - } - @Test - void submissionsWithoutProviderResponseWillCallDocumentTransferMethods() { -// Will spy on the enqueue methods and confirm that they have been called with the expected submissions - assertThat(true).isTrue(); + verifyNoInteractions(enqueueDocumentTransfer, pdfService, userFileRepositoryService); } @Test - void submissionsWithProviderResponseWillNotCallDocumentTransferMethods() { - assertThat(true).isTrue(); - -// Will spy on the enqueue methods and confirm that they have been called with the expected submissions - } + void enqueueDocumentTransferIsNotCalledOnExpiredUntransmittedSubmission() { + expiredUntransmittedSubmissionWithProviderResponse = new SubmissionTestBuilder() + .withParentDetails() + .withSubmittedAtDate(OffsetDateTime.now().minusDays(7)) + .with("providerResponseSubmissionId", "123124") + .build(); + submissionRepository.save(expiredUntransmittedSubmissionWithProviderResponse); - @Test - void submissionsNotExpiredWillNotCallDocumentTransferMethods() { - assertThat(true).isTrue(); + transmissionsRecurringJob.noProviderResponseJob(); - // Will spy on the enqueue methods and confirm that they have been NOT called with the expected submissions + verify(enqueueDocumentTransfer, never()).enqueuePDFDocumentBySubmission(any(), any(), any(), any(), any()); + verify(enqueueDocumentTransfer, never()).enqueueUploadedDocumentBySubmission(any(), any(), any(), any()); } - }