diff --git a/src/main/java/uk/ac/sanger/sccp/stan/service/work/WorkServiceImp.java b/src/main/java/uk/ac/sanger/sccp/stan/service/work/WorkServiceImp.java index e5bc403a..64673816 100644 --- a/src/main/java/uk/ac/sanger/sccp/stan/service/work/WorkServiceImp.java +++ b/src/main/java/uk/ac/sanger/sccp/stan/service/work/WorkServiceImp.java @@ -113,7 +113,7 @@ public Work createWork(User user, String prefix, String workTypeName, String wor ReleaseRecipient workRequester = findOrCreateRequester(user, workRequesterName); ReleaseDestination leadDest; if (nullOrEmpty(facultyLead)) { - leadDest = null; + throw new IllegalArgumentException("No faculty lead specified."); } else { leadDest = destinationRepo.getByName(facultyLead); if (!leadDest.isEnabled()) { diff --git a/src/main/resources/schema.graphqls b/src/main/resources/schema.graphqls index 6e34e8e5..fa494b51 100644 --- a/src/main/resources/schema.graphqls +++ b/src/main/resources/schema.graphqls @@ -2524,7 +2524,7 @@ type Mutation { """Create a new work, which will be allocated a new work number with the given prefix.""" createWork(prefix: String!, workType: String!, workRequester: String!, project: String!, program: String!, costCode: String!, numBlocks: Int, numSlides: Int, numOriginalSamples: Int, omeroProject: String, - ssStudyId: Int, facultyLead: String): Work! + ssStudyId: Int, facultyLead: String!): Work! """Update the status of an existing work.""" updateWorkStatus(workNumber: String!, status: WorkStatus!, commentId: Int): WorkWithComment! """Update the number of blocks field in a work.""" diff --git a/src/test/java/uk/ac/sanger/sccp/stan/integrationtest/TestWorkMutation.java b/src/test/java/uk/ac/sanger/sccp/stan/integrationtest/TestWorkMutation.java index 39d559fa..ca7e4913 100644 --- a/src/test/java/uk/ac/sanger/sccp/stan/integrationtest/TestWorkMutation.java +++ b/src/test/java/uk/ac/sanger/sccp/stan/integrationtest/TestWorkMutation.java @@ -44,6 +44,8 @@ public class TestWorkMutation { private OmeroProjectRepo omeroProjectRepo; @Autowired private DnapStudyRepo dnapStudyRepo; + @Autowired + private ReleaseDestinationRepo releaseDestinationRepo; @Transactional @Test @@ -57,9 +59,10 @@ public void testWork() throws Exception { User normaluser = entityCreator.createUser("user1", User.Role.normal); OmeroProject omero = omeroProjectRepo.save(new OmeroProject("om_proj")); DnapStudy study = dnapStudyRepo.save(new DnapStudy(123, "S123")); + ReleaseDestination rd = releaseDestinationRepo.save(new ReleaseDestination(null, "Kurt")); String worksQuery = "query { works(status: [active]) { workNumber, workType {name}, workRequester {username}," + - "project {name}, program {name}, costCode {code}, status, omeroProject {name}, dnapStudy {name} } }"; + "project {name}, program {name}, costCode {code}, status, omeroProject {name}, dnapStudy {name}, facultyLead {name} }}"; Object data = tester.post(worksQuery); List> worksData = chainGet(data, "data", "works"); assertNotNull(worksData); @@ -78,6 +81,7 @@ public void testWork() throws Exception { assertEquals(workRequester.getUsername(), chainGet(workData, "workRequester", "username")); assertEquals(omero.getName(), chainGet(workData, "omeroProject", "name")); assertEquals(study.getName(), chainGet(workData, "dnapStudy", "name")); + assertEquals(rd.getName(), chainGet(workData, "facultyLead", "name")); assertEquals("unstarted", workData.get("status")); String worksCreatedByQuery = "query { worksCreatedBy(username: \"USER\") { workNumber } }"; diff --git a/src/test/java/uk/ac/sanger/sccp/stan/service/work/TestWorkService.java b/src/test/java/uk/ac/sanger/sccp/stan/service/work/TestWorkService.java index 0571aadd..351c5e14 100644 --- a/src/test/java/uk/ac/sanger/sccp/stan/service/work/TestWorkService.java +++ b/src/test/java/uk/ac/sanger/sccp/stan/service/work/TestWorkService.java @@ -96,17 +96,19 @@ public void testCreateWork_numLabware(Integer numBlocks, Integer numSlides, Inte when(mockWorkRepo.save(any())).then(Matchers.returnArgument()); ReleaseRecipient workRequester = new ReleaseRecipient(30, workRequesterName); doReturn(workRequester).when(workService).findOrCreateRequester(user, workRequesterName); + ReleaseDestination dest = new ReleaseDestination(40, "Kurt"); + when(mockReleaseDestRepo.getByName("Kurt")).thenReturn(dest); if (expectedErrorMessage==null) { - Work result = workService.createWork(user, prefix, workTypeName, workRequesterName, projectName, progName, code, numBlocks, numSlides, numOriginalSamples, null, null, null); + Work result = workService.createWork(user, prefix, workTypeName, workRequesterName, projectName, progName, code, numBlocks, numSlides, numOriginalSamples, null, null, "Kurt"); verify(workService).checkPrefix(prefix); verify(mockWorkRepo).createNumber(prefix); verify(mockWorkRepo).save(result); verify(mockWorkEventService).recordEvent(user, result, WorkEvent.Type.create, null); - assertEquals(new Work(null, workNumber, workType, workRequester, project, prog, cc, Status.unstarted, numBlocks, numSlides, numOriginalSamples, null, null, null, null), result); + assertEquals(new Work(null, workNumber, workType, workRequester, project, prog, cc, Status.unstarted, numBlocks, numSlides, numOriginalSamples, null, null, null, dest), result); } else { assertThat(assertThrows(IllegalArgumentException.class, () -> workService.createWork(user, prefix, workTypeName, workRequesterName, projectName, - progName, code, numBlocks, numSlides, numOriginalSamples, null, null, null))).hasMessage(expectedErrorMessage); + progName, code, numBlocks, numSlides, numOriginalSamples, null, null, "Kurt"))).hasMessage(expectedErrorMessage); verifyNoInteractions(mockWorkRepo); } } @@ -145,13 +147,15 @@ public void testCreateWork_omeroProject(Boolean enabled, String expectedErrorMes when(mockWorkRepo.createNumber(prefix)).thenReturn(workNumber); User user = new User(1, "user1", User.Role.admin); when(mockReleaseRecipientRepo.findByUsername(workRequesterName)).thenReturn(Optional.of(new ReleaseRecipient(10, workRequesterName))); + ReleaseDestination dest = new ReleaseDestination(40, "Kurt"); + when(mockReleaseDestRepo.getByName("Kurt")).thenReturn(dest); when(mockWorkRepo.save(any())).then(Matchers.returnArgument()); if (expectedErrorMessage!=null) { - assertThat(assertThrows(RuntimeException.class, () -> workService.createWork(user, prefix, workTypeName, workRequesterName, projectName, progName, code, null, null, null, omeroName, null, null))) + assertThat(assertThrows(RuntimeException.class, () -> workService.createWork(user, prefix, workTypeName, workRequesterName, projectName, progName, code, null, null, null, omeroName, null, "Kurt"))) .hasMessage(expectedErrorMessage); } else { - Work result = workService.createWork(user, prefix, workTypeName, workRequesterName, projectName, progName, code, null, null, null, omeroName, null, null); + Work result = workService.createWork(user, prefix, workTypeName, workRequesterName, projectName, progName, code, null, null, null, omeroName, null, "Kurt"); verify(mockWorkRepo).save(result); assertSame(omero, result.getOmeroProject()); } @@ -159,14 +163,16 @@ public void testCreateWork_omeroProject(Boolean enabled, String expectedErrorMes @ParameterizedTest @CsvSource({ - ", Release destination not found.", - "true,", - "false, Destination Banana is disabled.", + "Banana,, Release destination not found.", + "Banana,true,", + "Banana,false, Destination Banana is disabled.", + ",,No faculty lead specified.", }) - public void testCreateWork_facultyLead(Boolean enabled, String expectedErrorMessage) { - String destName = "Banana"; + public void testCreateWork_facultyLead(String destName, Boolean enabled, String expectedErrorMessage) { ReleaseDestination dest; - if (enabled==null) { + if (destName==null) { + dest = null; + } else if (enabled==null) { dest = null; when(mockReleaseDestRepo.getByName(destName)).thenThrow(new EntityNotFoundException(expectedErrorMessage)); } else { @@ -238,13 +244,15 @@ public void testCreateWork_dnapStudy(Boolean enabled, String expectedErrorMessag when(mockWorkRepo.createNumber(prefix)).thenReturn(workNumber); User user = new User(1, "user1", User.Role.admin); when(mockReleaseRecipientRepo.findByUsername(workRequesterName)).thenReturn(Optional.of(new ReleaseRecipient(10, workRequesterName))); + ReleaseDestination dest = new ReleaseDestination(40, "Kurt"); + when(mockReleaseDestRepo.getByName("Kurt")).thenReturn(dest); when(mockWorkRepo.save(any())).then(Matchers.returnArgument()); if (expectedErrorMessage!=null) { - assertThat(assertThrows(RuntimeException.class, () -> workService.createWork(user, prefix, workTypeName, workRequesterName, projectName, progName, code, null, null, null, null, ssId, null))) + assertThat(assertThrows(RuntimeException.class, () -> workService.createWork(user, prefix, workTypeName, workRequesterName, projectName, progName, code, null, null, null, null, ssId, "Kurt"))) .hasMessage(expectedErrorMessage); } else { - Work result = workService.createWork(user, prefix, workTypeName, workRequesterName, projectName, progName, code, null, null, null, null, ssId, null); + Work result = workService.createWork(user, prefix, workTypeName, workRequesterName, projectName, progName, code, null, null, null, null, ssId, "Kurt"); verify(mockWorkRepo).save(result); assertSame(study, result.getDnapStudy()); } diff --git a/src/test/resources/graphql/createWork.graphql b/src/test/resources/graphql/createWork.graphql index f62bca8a..0424048c 100644 --- a/src/test/resources/graphql/createWork.graphql +++ b/src/test/resources/graphql/createWork.graphql @@ -1,6 +1,6 @@ mutation { createWork(prefix: "SGP", workType: "Drywalling", workRequester: "test1", project: "Stargate", program: "Hello", - costCode: "S666", omeroProject: "OM_PROJ", ssStudyId: 123) { + costCode: "S666", omeroProject: "OM_PROJ", ssStudyId: 123, facultyLead: "Kurt") { workNumber workType {name} workRequester {username} @@ -9,6 +9,7 @@ mutation { costCode {code} omeroProject {name} dnapStudy {name} + facultyLead {name} status } } \ No newline at end of file