diff --git a/mail-service/src/main/java/de/itvsh/ozg/mail/postfach/GrpcPostfachNachrichtMapper.java b/mail-service/src/main/java/de/itvsh/ozg/mail/postfach/GrpcPostfachNachrichtMapper.java new file mode 100644 index 0000000000000000000000000000000000000000..3ae37628818e643e98dfa6fd734b5fb3b9d49e35 --- /dev/null +++ b/mail-service/src/main/java/de/itvsh/ozg/mail/postfach/GrpcPostfachNachrichtMapper.java @@ -0,0 +1,22 @@ +package de.itvsh.ozg.mail.postfach; + +import org.mapstruct.Mapper; +import org.mapstruct.Mapping; + +@Mapper +public interface GrpcPostfachNachrichtMapper { + + @Mapping(target = "attachments", source = "attachmentList") + @Mapping(target = "createdAt", ignore = true) // heute? + @Mapping(target = "createdBy", ignore = true) // TODO + @Mapping(target = "direction", constant = "OUT") + @Mapping(target = "messageCode", ignore = true) + @Mapping(target = "messageId", ignore = true) + @Mapping(target = "postfachAddress", ignore = true) // uh + @Mapping(target = "postfachId", ignore = true) + @Mapping(target = "sentAt", ignore = true) + @Mapping(target = "sentSuccessful", ignore = true) + @Mapping(target = "vorgangId", ignore = true) + PostfachNachricht mapFromGrpc(GrpcPostfachNachricht nachricht); + +} diff --git a/mail-service/src/main/java/de/itvsh/ozg/mail/postfach/PostfachGrpcService.java b/mail-service/src/main/java/de/itvsh/ozg/mail/postfach/PostfachGrpcService.java index 851053803a8f34cd361024cb2302ca606502ad09..4b6ed6b1941d21cb302757581c4ef0c4bb0e3403 100644 --- a/mail-service/src/main/java/de/itvsh/ozg/mail/postfach/PostfachGrpcService.java +++ b/mail-service/src/main/java/de/itvsh/ozg/mail/postfach/PostfachGrpcService.java @@ -37,6 +37,17 @@ class PostfachGrpcService extends PostfachServiceImplBase { @Autowired private PostfachNachrichtMapper mapper; + @Autowired + private GrpcPostfachNachrichtMapper nachrichtMapper; + + @Override + public void saveNachrichtDraft(GrpcSaveNachrichtDraftRequest request, StreamObserver<GrpcSaveNachrichtDrafResponse> response) { + var nachrichtId = service.saveDraft(request.getVorgangId(), nachrichtMapper.mapFromGrpc(request.getNachricht())); + + response.onNext(GrpcSaveNachrichtDrafResponse.newBuilder().setNachrichtId(nachrichtId).build()); + response.onCompleted(); + } + @Override public void sendPostfachMail(GrpcSendPostfachMailRequest req, StreamObserver<GrpcSendPostfachMailResponse> response) { service.sendMail(req.getCommandId(), req.getContext().getUser().getId(), mapper.fromGrpcMail(req.getMail())); diff --git a/mail-service/src/main/java/de/itvsh/ozg/mail/postfach/PostfachService.java b/mail-service/src/main/java/de/itvsh/ozg/mail/postfach/PostfachService.java index 760da9780919a565115369c6f23ca4ea87fa4dc7..24bb1c81d32aaa5976782e3e8f1575a6529c410c 100644 --- a/mail-service/src/main/java/de/itvsh/ozg/mail/postfach/PostfachService.java +++ b/mail-service/src/main/java/de/itvsh/ozg/mail/postfach/PostfachService.java @@ -64,6 +64,12 @@ class PostfachService { @Autowired private ApplicationEventPublisher publisher; + public String saveDraft(String vorgangId, PostfachNachricht nachricht) { + persistMail(null, null); + // TODO implement me + return null; + } + public void sendMail(String commandId, String userId, @Valid PostfachNachricht mail) { var sendResponse = handleSendMail(commandId, mail); persistSentMail(userId, addMailSentInformation(mail, sendResponse)); diff --git a/mail-service/src/test/java/de/itvsh/ozg/mail/postfach/GrpcSaveNachrichtDraftRequestTestFactory.java b/mail-service/src/test/java/de/itvsh/ozg/mail/postfach/GrpcSaveNachrichtDraftRequestTestFactory.java new file mode 100644 index 0000000000000000000000000000000000000000..1f76f2426a184095ef5317e3bba77d8e99cb705c --- /dev/null +++ b/mail-service/src/test/java/de/itvsh/ozg/mail/postfach/GrpcSaveNachrichtDraftRequestTestFactory.java @@ -0,0 +1,16 @@ +package de.itvsh.ozg.mail.postfach; + +import de.itvsh.ozg.mail.postfach.osi.MessageTestFactory; + +public class GrpcSaveNachrichtDraftRequestTestFactory { + + static GrpcSaveNachrichtDraftRequest create() { + return createBuilder().build(); + } + + static GrpcSaveNachrichtDraftRequest.Builder createBuilder() { + return GrpcSaveNachrichtDraftRequest.newBuilder() + .setVorgangId(MessageTestFactory.VORGANG_ID); + + } +} diff --git a/mail-service/src/test/java/de/itvsh/ozg/mail/postfach/PostfachGrpcServiceTest.java b/mail-service/src/test/java/de/itvsh/ozg/mail/postfach/PostfachGrpcServiceTest.java index 55679054ce3b6e0ec81511be829b295a896fe583..06189228c8da3b30a47517c560ffdcca54d0b39d 100644 --- a/mail-service/src/test/java/de/itvsh/ozg/mail/postfach/PostfachGrpcServiceTest.java +++ b/mail-service/src/test/java/de/itvsh/ozg/mail/postfach/PostfachGrpcServiceTest.java @@ -27,7 +27,9 @@ import static org.assertj.core.api.Assertions.*; import static org.mockito.ArgumentMatchers.*; import static org.mockito.Mockito.*; -import org.junit.jupiter.api.*; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Nested; +import org.junit.jupiter.api.Test; import org.mapstruct.factory.Mappers; import org.mockito.ArgumentCaptor; import org.mockito.Captor; @@ -35,25 +37,72 @@ import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.Spy; +import de.itvsh.ozg.mail.postfach.osi.MessageTestFactory; import io.grpc.stub.StreamObserver; class PostfachGrpcServiceTest { - @InjectMocks // NOSONAR + @InjectMocks private PostfachGrpcService service; + @Mock private PostfachService postfachService; + @Mock + private GrpcPostfachNachrichtMapper nachrichtMapper; @Spy private PostfachNachrichtMapper mapper = Mappers.getMapper(PostfachNachrichtMapper.class); + @Nested + class TestSaveNachrichtDraft { + + @Mock + private StreamObserver<GrpcSaveNachrichtDrafResponse> responseObserver; + + @Captor + private ArgumentCaptor<GrpcSaveNachrichtDrafResponse> responseCaptor; + + @BeforeEach + void init() { + when(postfachService.saveDraft(any(),any())).thenReturn(PostfachNachrichtTestFactory.ID); + when(nachrichtMapper.mapFromGrpc(any())).thenReturn(PostfachNachrichtTestFactory.create()); + } + + @Test + void shouldCallService() { + var nachricht = PostfachNachrichtTestFactory.create(); + when(nachrichtMapper.mapFromGrpc(any())).thenReturn(nachricht); + + service.saveNachrichtDraft(GrpcSaveNachrichtDraftRequestTestFactory.create(), responseObserver); + + verify(postfachService).saveDraft(MessageTestFactory.VORGANG_ID, nachricht); + } + + @Test + void shouldSendResponse() { + service.saveNachrichtDraft(GrpcSaveNachrichtDraftRequestTestFactory.create(), responseObserver); + + verify(responseObserver).onNext(responseCaptor.capture()); + + assertThat(responseCaptor.getValue().getNachrichtId()).isEqualTo(PostfachNachrichtTestFactory.ID); + } + + @Test + void shouldCompleteCall() { + service.saveNachrichtDraft(GrpcSaveNachrichtDraftRequestTestFactory.create(), responseObserver); + + verify(responseObserver).onCompleted(); + } + + } + @Nested class TestSendMail { - @Mock // NOSONAR + @Mock private StreamObserver<GrpcSendPostfachMailResponse> responseObserver; - @Captor // NOSONAR + @Captor private ArgumentCaptor<PostfachNachricht> mailCaptor; @Test @@ -165,7 +214,7 @@ class PostfachGrpcServiceTest { @Nested class TestResendMail { - @Mock // NOSONAR + @Mock private StreamObserver<GrpcResendPostfachMailResponse> responseObserver; @Test @@ -195,7 +244,7 @@ class PostfachGrpcServiceTest { private final GrpcIsPostfachConfiguredRequest request = GrpcIsPostfachConfiguredRequest.newBuilder().build(); - @Mock // NOSONAR + @Mock private StreamObserver<GrpcIsPostfachConfiguredResponse> responseObserver; @Test diff --git a/mail-service/src/test/java/de/itvsh/ozg/mail/postfach/PostfachServiceTest.java b/mail-service/src/test/java/de/itvsh/ozg/mail/postfach/PostfachServiceTest.java index 67e0c40db74be929b05f0e9b07c0d1cc1c4dcdf3..e9973e048fd2b86f8420bec111b7e83c16ac480f 100644 --- a/mail-service/src/test/java/de/itvsh/ozg/mail/postfach/PostfachServiceTest.java +++ b/mail-service/src/test/java/de/itvsh/ozg/mail/postfach/PostfachServiceTest.java @@ -78,6 +78,25 @@ class PostfachServiceTest { static final String COMMAND_ID = UUID.randomUUID().toString(); static final String USER_ID = UUID.randomUUID().toString(); + @Nested + class TestSaveDraft { + + @Captor + private ArgumentCaptor<Optional<String>> userIdCaptor; + + @BeforeEach + void init() { + doNothing().when(service).persistMail(any(), any()); + } + + @Test + void shouldUseUserIdFromContext() { + service.saveDraft(MessageTestFactory.VORGANG_ID, PostfachNachrichtTestFactory.create()); + + verify(service).persistMail(userIdCaptor.capture(), any()); + } + } + @Nested class TestSendMail { diff --git a/pluto-interface/src/main/protobuf/postfach.model.proto b/pluto-interface/src/main/protobuf/postfach.model.proto index afc70838151e34f1406ee66d25e0182cfa5988ec..c842ee810f967a58d9a672662bb4f525d31732e7 100644 --- a/pluto-interface/src/main/protobuf/postfach.model.proto +++ b/pluto-interface/src/main/protobuf/postfach.model.proto @@ -39,7 +39,7 @@ message GrpcSendPostfachMailRequest { } message GrpcSaveNachrichtDraftRequest { - string createFor = 1; + string vorgangId = 1; GrpcPostfachNachricht nachricht = 2; }