diff --git a/server/src/main/java/de/ozgcloud/antragsraum/nachricht/AntragraumProxyMapper.java b/server/src/main/java/de/ozgcloud/antragsraum/nachricht/AntragraumProxyMapper.java index 9f6c502216aa3734f64d0039d2f5a128a2cd7869..d88c4a1f26d78c819dd373d5651120cc7647eb20 100644 --- a/server/src/main/java/de/ozgcloud/antragsraum/nachricht/AntragraumProxyMapper.java +++ b/server/src/main/java/de/ozgcloud/antragsraum/nachricht/AntragraumProxyMapper.java @@ -34,7 +34,6 @@ import de.ozgcloud.antragsraum.proxy.AntragraumproxyGrpcRueckfrageAnswer; @Mapper interface AntragraumProxyMapper { - @Mapping(target = "rueckfrageId", source = "id") @Mapping(target = "answerText", source = "message") @Mapping(target = "attachmentFileId", expression = "java(mapAttachments(nachricht))") AntragraumproxyGrpcRueckfrageAnswer toRestProxyAntwort(ReplyNachricht nachricht); @@ -43,7 +42,7 @@ interface AntragraumProxyMapper { if (Objects.isNull(nachricht.attachments())) { return List.of(); } - + return nachricht.attachments().stream().map(OzgFile::id).toList(); } } diff --git a/server/src/main/java/de/ozgcloud/antragsraum/nachricht/NachrichtMapper.java b/server/src/main/java/de/ozgcloud/antragsraum/nachricht/NachrichtMapper.java index 660c438c4d9cfbbb5bf95b79bcbe24e695bcfd76..f2fec2a82099a67d9fa676afdb548798b57908d4 100644 --- a/server/src/main/java/de/ozgcloud/antragsraum/nachricht/NachrichtMapper.java +++ b/server/src/main/java/de/ozgcloud/antragsraum/nachricht/NachrichtMapper.java @@ -103,7 +103,8 @@ class NachrichtMapper { return rueckfrage.getAnswers().stream() .map(answer -> { var builder = ReplyNachricht.builder() - .id(rueckfrage.getId()) + .id(answer.getRueckfrageId()) + .rueckfrageId(rueckfrage.getId()) .nachrichtEventId(id) .message(answer.getAnswerText()) .attachments(getAttachments(answer.getAttachmentFileId(), answer.getRueckfrageId(), id)); @@ -113,7 +114,7 @@ class NachrichtMapper { public AntragraumproxyGrpcRueckfrageAnswer toRestRueckfrageAnswer(final ReplyNachricht nachricht) { var antwort = new AntragraumproxyGrpcRueckfrageAnswer(); - antwort.setRueckfrageId(nachricht.id()); + antwort.setRueckfrageId(nachricht.rueckfrageId()); antwort.setAnswerText(nachricht.message()); if (Objects.nonNull(nachricht.attachments())) { diff --git a/server/src/main/java/de/ozgcloud/antragsraum/nachricht/ReplyNachricht.java b/server/src/main/java/de/ozgcloud/antragsraum/nachricht/ReplyNachricht.java index 6c712bb36bcb222275c89a2e163f74c33d404966..071cc1ad752021b551f7844c3dd1952f66a12b73 100644 --- a/server/src/main/java/de/ozgcloud/antragsraum/nachricht/ReplyNachricht.java +++ b/server/src/main/java/de/ozgcloud/antragsraum/nachricht/ReplyNachricht.java @@ -34,6 +34,22 @@ import lombok.Builder; @JsonInclude(JsonInclude.Include.NON_NULL) @Builder(toBuilder = true) record ReplyNachricht( + @Size(max = 24, message = "An id is too long") + @Schema(description = "The id of the Antwort", + name = "id", + type = "string", + example = "66af924b4f1a2560298b45ab" + ) + @NotEmpty + String id, + @Size(max = 24, message = "An id is too long") + @Schema(description = "The id of the Rückfrage", + name = "id", + type = "string", + example = "66af924b4f1a2560298b45ab" + ) + @NotEmpty + String rueckfrageId, @Size(max = 36, message = "An id is too long") @Schema(description = "The id of the postfach", name = "postfachId", @@ -48,14 +64,6 @@ record ReplyNachricht( example = "60af924b4f1a2560298b4567" ) String nachrichtEventId, - @Size(max = 24, message = "An id is too long") - @Schema(description = "The id of the Rückfrage", - name = "id", - type = "string", - example = "66af924b4f1a2560298b45ab" - ) - @NotEmpty - String id, @Schema(description = "The answer to the rueckfrage.", name = "message", type = "string", @@ -73,6 +81,7 @@ record ReplyNachricht( "postfachId='" + postfachId + '\'' + ", nachrichtEventId='" + nachrichtEventId + '\'' + ", id='" + id + '\'' + + ", rueckfrageId='" + rueckfrageId + '\'' + ", attachments=" + attachments + ", message=<...masked for privacy..>" + '}'; diff --git a/server/src/test/java/de/ozgcloud/antragsraum/nachricht/AntragraumProxyMapperTest.java b/server/src/test/java/de/ozgcloud/antragsraum/nachricht/AntragraumProxyMapperTest.java new file mode 100644 index 0000000000000000000000000000000000000000..66cad5b1ef50dceb4e8677734614761e580d057e --- /dev/null +++ b/server/src/test/java/de/ozgcloud/antragsraum/nachricht/AntragraumProxyMapperTest.java @@ -0,0 +1,63 @@ +/* + * Copyright (c) 2023-2024. + * Das Land Schleswig-Holstein vertreten durch den Ministerpräsidenten des Landes Schleswig-Holstein Staatskanzlei Abteilung Digitalisierung und zentrales IT-Management der Landesregierung + * + * Lizenziert unter der EUPL, Version 1.2 oder - sobald + * diese von der Europäischen Kommission genehmigt wurden - + * Folgeversionen der EUPL ("Lizenz"); + * Sie dürfen dieses Werk ausschließlich gemäß + * dieser Lizenz nutzen. + * Eine Kopie der Lizenz finden Sie hier: + * + * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 + * + * Sofern nicht durch anwendbare Rechtsvorschriften + * gefordert oder in schriftlicher Form vereinbart, wird + * die unter der Lizenz verbreitete Software "so wie sie + * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN - + * ausdrücklich oder stillschweigend - verbreitet. + * Die sprachspezifischen Genehmigungen und Beschränkungen + * unter der Lizenz sind dem Lizenztext zu entnehmen. + */ + +package de.ozgcloud.antragsraum.nachricht; + +import static org.assertj.core.api.Assertions.*; + +import java.util.Collections; + +import org.junit.jupiter.api.Nested; +import org.junit.jupiter.api.Test; +import org.mapstruct.factory.Mappers; + +class AntragraumProxyMapperTest { + + private final AntragraumProxyMapper mapper = Mappers.getMapper(AntragraumProxyMapper.class); + + @Nested + class TestToRestProxyAntwort { + private final ReplyNachricht replyNachricht = ReplyNachrichtTestFactory.create(); + + @Test + void shouldHaveRueckfrageId() { + var grpcRueckfrageAnswer = mapper.toRestProxyAntwort(replyNachricht); + + assertThat(grpcRueckfrageAnswer.getRueckfrageId()).isEqualTo(ReplyNachrichtTestFactory.RUECKFRAGE_ID); + } + + @Test + void shouldHaveAnswerText() { + var grpcRueckfrageAnswer = mapper.toRestProxyAntwort(replyNachricht); + + assertThat(grpcRueckfrageAnswer.getAnswerText()).isEqualTo(ReplyNachrichtTestFactory.TEXT); + } + + @Test + void shouldHaveAttachmentFileId() { + var grpcRueckfrageAnswer = mapper.toRestProxyAntwort(replyNachricht); + + assertThat(grpcRueckfrageAnswer.getAttachmentFileId()).isEqualTo(Collections.emptyList()); + } + } + +} \ No newline at end of file diff --git a/server/src/test/java/de/ozgcloud/antragsraum/nachricht/AntragraumproxyGrpcRueckfrageTestFactory.java b/server/src/test/java/de/ozgcloud/antragsraum/nachricht/AntragraumproxyGrpcRueckfrageTestFactory.java index 5f7963f0b92298f4b51ba49f1b849d1543a4ab25..7d85279f39764541af9e381c0d3447f844840277 100644 --- a/server/src/test/java/de/ozgcloud/antragsraum/nachricht/AntragraumproxyGrpcRueckfrageTestFactory.java +++ b/server/src/test/java/de/ozgcloud/antragsraum/nachricht/AntragraumproxyGrpcRueckfrageTestFactory.java @@ -40,6 +40,7 @@ public class AntragraumproxyGrpcRueckfrageTestFactory { public static final String VORGANG_ID = UUID.randomUUID().toString(); public static final String VORGANG_NAME = NachrichtTestFactory.VORGANG_TITLE; public static final String ANSWER_FILE_ID = UUID.randomUUID().toString(); + public static final String ANSWER_ID = UUID.randomUUID().toString(); public static final String TEXT = """ Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, @@ -91,6 +92,7 @@ public class AntragraumproxyGrpcRueckfrageTestFactory { static AntragraumproxyGrpcRueckfrageAnswer createRueckfrageAnswer() { var antwort = new AntragraumproxyGrpcRueckfrageAnswer(); + antwort.setRueckfrageId(ANSWER_ID); antwort.setAnswerText(ANSWER_TEXT); antwort.setSentAt(SEND_AT); antwort.setAttachmentFileId(List.of(ANSWER_FILE_ID)); diff --git a/server/src/test/java/de/ozgcloud/antragsraum/nachricht/NachrichtMapperTest.java b/server/src/test/java/de/ozgcloud/antragsraum/nachricht/NachrichtMapperTest.java index 6b8a2aa6499b97fbf63eec72a15540f5dde22739..8b70b50ce731fb640bbb99052b63ebfeb34e5808 100644 --- a/server/src/test/java/de/ozgcloud/antragsraum/nachricht/NachrichtMapperTest.java +++ b/server/src/test/java/de/ozgcloud/antragsraum/nachricht/NachrichtMapperTest.java @@ -179,6 +179,20 @@ class NachrichtMapperTest { assertThat(nachricht.replyNachrichten()).isEmpty(); } + @Test + void shouldMapAnswerNachrichtId() { + var nachricht = mapper.fromRestRueckfrage(answeredRueckfrage, NachrichtTestFactory.NACHRICHT_EVENT_ID); + + assertThat(nachricht.replyNachrichten().getFirst().id()).isEqualTo(AntragraumproxyGrpcRueckfrageTestFactory.ANSWER_ID); + } + + @Test + void shouldMapAnswerRueckfrageId() { + var nachricht = mapper.fromRestRueckfrage(answeredRueckfrage, NachrichtTestFactory.NACHRICHT_EVENT_ID); + + assertThat(nachricht.replyNachrichten().getFirst().rueckfrageId()).isEqualTo(AntragraumproxyGrpcRueckfrageTestFactory.RUECKFRAGE_ID); + } + @Test void shouldMapAnswerNachrichtText() { var nachricht = mapper.fromRestRueckfrage(answeredRueckfrage, NachrichtTestFactory.NACHRICHT_EVENT_ID); diff --git a/server/src/test/java/de/ozgcloud/antragsraum/nachricht/NachrichtenControllerITCase.java b/server/src/test/java/de/ozgcloud/antragsraum/nachricht/NachrichtenControllerITCase.java index c50db1e212f58992e3f1ebed9230a78279349a92..e56cb39db2d08a57d4fca5adb36323daef352f8a 100644 --- a/server/src/test/java/de/ozgcloud/antragsraum/nachricht/NachrichtenControllerITCase.java +++ b/server/src/test/java/de/ozgcloud/antragsraum/nachricht/NachrichtenControllerITCase.java @@ -230,16 +230,16 @@ public class NachrichtenControllerITCase { class TestSendingInvalidReply { @Test @WithMockUser - void shouldNotSendNachrichtBlankId() throws Exception { - var invalidMsg = ReplyNachrichtTestFactory.createBuilder().id("").build(); + void shouldNotSendNachrichtBlankRueckfrageId() throws Exception { + var invalidMsg = ReplyNachrichtTestFactory.createBuilder().rueckfrageId("").build(); performPutRequest(mapper.writeValueAsString(invalidMsg)).andExpect(status().isBadRequest()); } @Test @WithMockUser - void shouldHandleInvalidId() throws Exception { - var invalidMsg = msg.toBuilder().id("id_that_is_too_long_123456789").build(); + void shouldHandleInvalidRueckfrageId() throws Exception { + var invalidMsg = msg.toBuilder().rueckfrageId("id_that_is_too_long_123456789").build(); performPutRequest(mapper.writeValueAsString(invalidMsg)).andExpect(status().isBadRequest()); } diff --git a/server/src/test/java/de/ozgcloud/antragsraum/nachricht/ReplyNachrichtTestFactory.java b/server/src/test/java/de/ozgcloud/antragsraum/nachricht/ReplyNachrichtTestFactory.java index ca44f4f85426e5e143179ad91a164fa8ef4e88aa..e0b0bf7a544a6a045a0a26076cad35a9a9bc65d0 100644 --- a/server/src/test/java/de/ozgcloud/antragsraum/nachricht/ReplyNachrichtTestFactory.java +++ b/server/src/test/java/de/ozgcloud/antragsraum/nachricht/ReplyNachrichtTestFactory.java @@ -23,7 +23,8 @@ package de.ozgcloud.antragsraum.nachricht; public class ReplyNachrichtTestFactory { public static final String ID = "60af924b4f1a2560298b4567"; - public static final String NACHRICHT_EVENT_ID = "60af924b4f1a2560298b4567"; + public static final String RUECKFRAGE_ID = "60af924b4f1a2560298b4568"; + public static final String NACHRICHT_EVENT_ID = "60af924b4f1a2560298b4569"; public static final String TEXT = "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam"; static ReplyNachricht create() { @@ -33,6 +34,7 @@ public class ReplyNachrichtTestFactory { static ReplyNachricht.ReplyNachrichtBuilder createBuilder() { return ReplyNachricht.builder() .id(ID) + .rueckfrageId(RUECKFRAGE_ID) .nachrichtEventId(NACHRICHT_EVENT_ID) .postfachId(NachrichtTestFactory.POSTFACH_ID) .message(TEXT);