diff --git a/src/main/java/gov/cabinetoffice/gap/applybackend/service/SubmissionService.java b/src/main/java/gov/cabinetoffice/gap/applybackend/service/SubmissionService.java index ba6a117f..65465967 100644 --- a/src/main/java/gov/cabinetoffice/gap/applybackend/service/SubmissionService.java +++ b/src/main/java/gov/cabinetoffice/gap/applybackend/service/SubmissionService.java @@ -613,5 +613,9 @@ public boolean isApplicantEligible(final String userId, final UUID submissionId, final Optional eligibilityResponse = getQuestionResponseByQuestionId(submission ,"ELIGIBILITY"); return eligibilityResponse.map(submissionQuestion -> submissionQuestion.getResponse().equals("Yes")).orElse(false); } + + public Optional getSubmissionById(final UUID submissionId) { + return submissionRepository.findById(submissionId); + } } diff --git a/src/main/java/gov/cabinetoffice/gap/applybackend/web/SubmissionController.java b/src/main/java/gov/cabinetoffice/gap/applybackend/web/SubmissionController.java index 6a8f204b..ad610fcc 100644 --- a/src/main/java/gov/cabinetoffice/gap/applybackend/web/SubmissionController.java +++ b/src/main/java/gov/cabinetoffice/gap/applybackend/web/SubmissionController.java @@ -382,6 +382,22 @@ public ResponseEntity isApplicantEligible(@PathVariable final UUID sub return ResponseEntity.ok(submissionService.isApplicantEligible(applicantId, submissionId, "ELIGIBILITY")); } + @GetMapping("/{submissionId}/application/status") + public ResponseEntity applicationStatus(@PathVariable final UUID submissionId) { + final String applicantId = getUserIdFromSecurityContext(); + Optional submission = submissionService.getSubmissionById(submissionId); + if (submission.isEmpty()) { + return ResponseEntity.notFound().build(); + } + + String submissionApplicant = submission.get().getApplicant().getUserId(); + if (submissionApplicant.equals(applicantId)) { + return ResponseEntity.ok(submission.get().getApplication().getApplicationStatus().name()); + } else { + return ResponseEntity.status(401).build(); + } + } + private GetSubmissionDto buildSubmissionDto(Submission submission) { List sections = new ArrayList<>(); for (SubmissionSection section : submission.getDefinition().getSections()) { diff --git a/src/test/java/gov/cabinetoffice/gap/applybackend/service/SubmissionServiceTest.java b/src/test/java/gov/cabinetoffice/gap/applybackend/service/SubmissionServiceTest.java index cb06c398..aeb6fafb 100644 --- a/src/test/java/gov/cabinetoffice/gap/applybackend/service/SubmissionServiceTest.java +++ b/src/test/java/gov/cabinetoffice/gap/applybackend/service/SubmissionServiceTest.java @@ -1625,6 +1625,15 @@ void isApplicantEligible_returnFalse() { assertThat(result).isFalse(); } + @Test + void getSubmissionById_ReturnsCorrectSubmission() { + Submission submission = Submission.builder().id(SUBMISSION_ID).build(); + when(submissionRepository.findById(SUBMISSION_ID)).thenReturn(Optional.of(submission)); + Optional result = serviceUnderTest.getSubmissionById(SUBMISSION_ID); + assertThat(result).isPresent(); + assertThat(result.get()).isEqualTo(submission); + } + } @Nested diff --git a/src/test/java/gov/cabinetoffice/gap/applybackend/web/SubmissionControllerTest.java b/src/test/java/gov/cabinetoffice/gap/applybackend/web/SubmissionControllerTest.java index 0b73d18a..911fcada 100644 --- a/src/test/java/gov/cabinetoffice/gap/applybackend/web/SubmissionControllerTest.java +++ b/src/test/java/gov/cabinetoffice/gap/applybackend/web/SubmissionControllerTest.java @@ -1028,6 +1028,37 @@ void isApplicantEligible_ReturnsExpectedResponse_ReturnFalse() { assertThat(response.getBody()).isFalse(); } + @Test + void applicationStatus_ReturnsExpectedResponse() { + GrantApplicant applicant = GrantApplicant.builder().userId(APPLICANT_USER_ID).build(); + GrantApplication application = GrantApplication.builder().applicationStatus(GrantApplicationStatus.REMOVED).build(); + Submission submission = Submission.builder().id(SUBMISSION_ID).application(application).applicant(applicant).build(); + when(submissionService.getSubmissionById(SUBMISSION_ID)).thenReturn(Optional.ofNullable(submission)); + final ResponseEntity response = controllerUnderTest.applicationStatus(SUBMISSION_ID); + + assertThat(response.getStatusCode()).isEqualTo(HttpStatus.OK); + assertThat(response.getBody()).isEqualTo("REMOVED"); + } + + @Test + void applicationStatus_ReturnsExpectedResponse_WhenSubmissionNotFound() { + when(submissionService.getSubmissionById(SUBMISSION_ID)).thenReturn(Optional.empty()); + final ResponseEntity response = controllerUnderTest.applicationStatus(SUBMISSION_ID); + + assertThat(response.getStatusCode()).isEqualTo(HttpStatus.NOT_FOUND); + } + + @Test + void applicationStatus_ReturnsUnauthorised_WhenIdMismatch() { + GrantApplicant applicant = GrantApplicant.builder().userId("testUserId").build(); + GrantApplication application = GrantApplication.builder().applicationStatus(GrantApplicationStatus.REMOVED).build(); + Submission submission = Submission.builder().id(SUBMISSION_ID).application(application).applicant(applicant).build(); + when(submissionService.getSubmissionById(SUBMISSION_ID)).thenReturn(Optional.ofNullable(submission)); + final ResponseEntity response = controllerUnderTest.applicationStatus(SUBMISSION_ID); + + assertThat(response.getStatusCode()).isEqualTo(HttpStatus.UNAUTHORIZED); + } + @Test void exportSingleSubmissionReturnsOdtFile() throws Exception { UUID submissionID = UUID.randomUUID();