diff --git a/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/vorgang/VorgangService.java b/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/vorgang/VorgangService.java index a6315672327389de9cc133226f0debe77e2a228c..172138a213608eaf6ee332fbc2673281e784180e 100644 --- a/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/vorgang/VorgangService.java +++ b/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/vorgang/VorgangService.java @@ -129,6 +129,14 @@ public class VorgangService { return vorgang.toBuilder().clearEingangs().eingang(eingang); } + public String createVorgang(Vorgang vorgang) { + var mappedEingang = kopControlDataMapper.moveLabelsToControlData(vorgang.getEingangs().getFirst()); + var modifiedBuilder = vorgang.toBuilder().id(null).version(0).inCreation(false).clearEingangs().eingang(mappedEingang).build(); + var result = repository.save(modifiedBuilder); + publishVorgangeCreatedEvent(result); + return result.getId(); + } + private void publishVorgangeCreatedEvent(Vorgang vorgang) { publisher.publishEvent(new VorgangCreatedEvent(vorgang.getId())); } diff --git a/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/vorgang/VorgangServiceTest.java b/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/vorgang/VorgangServiceTest.java index 216eb98e9acdd32f73761e69c40c489ffc10a07c..82b54fb91cf1cd94faaca488f313e3971a8f0504 100644 --- a/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/vorgang/VorgangServiceTest.java +++ b/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/vorgang/VorgangServiceTest.java @@ -290,6 +290,89 @@ class VorgangServiceTest { } } + @Nested + class TestCreateVorgang { + + private static final Eingang EINGANG = EingangTestFactory.create(); + private static final Vorgang SRC_VORGANG = VorgangTestFactory.createBuilder().clientAttributes(null).clearEingangs().eingang(EINGANG).build(); + private static final String CREATED_VORGANG_ID = "created-vorgang-id"; + + @Mock + private Eingang mappedEingang; + @Mock + private Vorgang createdVorgang; + + @Captor + private ArgumentCaptor<Vorgang> vorgangCaptor; + @Captor + private ArgumentCaptor<VorgangCreatedEvent> eventCaptor; + + @BeforeEach + void init() { + when(kopControlDataMapper.moveLabelsToControlData(any(Eingang.class))).thenReturn(mappedEingang); + when(createdVorgang.getId()).thenReturn(CREATED_VORGANG_ID); + when(repository.save(any())).thenReturn(createdVorgang); + } + + @Test + void shouldCallMoveLabels() { + createVorgang(); + + verify(kopControlDataMapper).moveLabelsToControlData(EINGANG); + } + + @Test + void shouldResetIdBeforeSave() { + createVorgang(); + + verify(repository).save(vorgangCaptor.capture()); + assertThat(vorgangCaptor.getValue().getId()).isNull(); + } + + @Test + void shouldResetVersionBeforeSave() { + createVorgang(); + + verify(repository).save(vorgangCaptor.capture()); + assertThat(vorgangCaptor.getValue().getVersion()).isEqualTo(0); + } + + @Test + void shouldSetInCreationFalse() { + createVorgang(); + + verify(repository).save(vorgangCaptor.capture()); + assertThat(vorgangCaptor.getValue().isInCreation()).isFalse(); + } + + @Test + void shouldSetMappedEingang() { + createVorgang(); + + verify(repository).save(vorgangCaptor.capture()); + assertThat(vorgangCaptor.getValue().getEingangs()).hasSize(1).first().isEqualTo(mappedEingang); + } + + @Test + void shouldPublishVorgangCreatedEvent() { + createVorgang(); + + verify(publisher).publishEvent(eventCaptor.capture()); + assertThat(eventCaptor.getValue().getSource()).isEqualTo(CREATED_VORGANG_ID); + } + + @Test + void shouldReturnCreatedVorgangId() { + var result = createVorgang(); + + assertThat(result).isEqualTo(CREATED_VORGANG_ID); + } + + private String createVorgang() { + return service.createVorgang(SRC_VORGANG); + } + } + @Nested class TestVorgangNotFound { @BeforeEach @@ -346,7 +429,8 @@ class VorgangServiceTest { void shouldThrowAccessDeniedException() { when(vorgangAuthorizationService.authorizeByOrganisationseinheitenId(any(), any())).thenReturn(false); - assertThrows(AccessDeniedException.class, () -> service.getById(VorgangTestFactory.ID, FilterCriteriaTestFactory.create())); // NOSONAR + assertThrows(AccessDeniedException.class, + () -> service.getById(VorgangTestFactory.ID, FilterCriteriaTestFactory.create())); // NOSONAR } } @@ -384,7 +468,7 @@ class VorgangServiceTest { @Nested class TestAssignToUser { - private Command command = CommandTestFactory.createBuilder().body(Map.of("assignedTo", "Klaus")).build(); + private final Command command = CommandTestFactory.createBuilder().body(Map.of("assignedTo", "Klaus")).build(); @Test void shouldCallRepository() { @@ -418,8 +502,8 @@ class VorgangServiceTest { @Nested class TestDeleteVorgang { - private Vorgang vorgang = VorgangTestFactory.create(); - private VorgangStub stub = VorgangStubTestFactory.create(); + private final Vorgang vorgang = VorgangTestFactory.create(); + private final VorgangStub stub = VorgangStubTestFactory.create(); @BeforeEach void init() {