diff --git a/src/main/java/de/ozgcloud/xta/test/app/data/XtaMessageRepository.java b/src/main/java/de/ozgcloud/xta/test/app/data/XtaMessageRepository.java index b84e9826039df4c04a2f07f66ed42e992f74c1e3..dc107e5dce765f57da1454afbf07bb461fe14044 100644 --- a/src/main/java/de/ozgcloud/xta/test/app/data/XtaMessageRepository.java +++ b/src/main/java/de/ozgcloud/xta/test/app/data/XtaMessageRepository.java @@ -1,20 +1,19 @@ package de.ozgcloud.xta.test.app.data; -import java.io.IOException; import java.math.BigInteger; -import java.nio.file.Files; +import java.time.ZonedDateTime; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Optional; import java.util.stream.Stream; +import lombok.RequiredArgsConstructor; +import lombok.extern.log4j.Log4j2; import org.springframework.stereotype.Component; -import de.ozgcloud.xta.test.app.model.XtaFile; import de.ozgcloud.xta.test.app.model.XtaMessage; -import lombok.RequiredArgsConstructor; -import lombok.extern.log4j.Log4j2; +import de.ozgcloud.xta.test.app.model.XtaTransportReport; @Component @Log4j2 @@ -22,53 +21,60 @@ import lombok.extern.log4j.Log4j2; public class XtaMessageRepository { private final Map<String, XtaMessage> messages = new HashMap<>(); + private final HashMap<String, XtaTransportReport.MessageStatus> messageIdToStatus = new HashMap<>(); - public void save(XtaMessage message) { + public boolean add(XtaMessage message) { + if (messages.containsKey(message.metaData().messageId())) { + return false; + } messages.put(message.metaData().messageId(), message); + messageIdToStatus.put(message.metaData().messageId(), XtaTransportReport.MessageStatus.OFFEN); + return true; } - public Optional<XtaMessage> get(String messageId) { + public Optional<XtaMessage> getMessage(String messageId) { return Optional.ofNullable(messages.get(messageId)); } - public boolean delete(String messageId) { + public Optional<XtaTransportReport> getTransportReport(String messageId) { if (messages.containsKey(messageId)) { - var message = messages.get(messageId); - message.attachmentFiles().forEach(this::silentDeleteFile); - silentDeleteFile(message.messageFile()); - messages.remove(messageId); - return true; - } - return false; - } - - private void silentDeleteFile(XtaFile xtaFile) { - try { - Files.delete(xtaFile.file().toPath()); - } catch (IOException e) { - log.warn("Could not delete file: {}", e.getMessage()); + return Optional.of(XtaTransportReport.builder() + .messageMetaData(messages.get(messageId).metaData()) + .status(messageIdToStatus.get(messageId)) + .reportTime(getNow()) + .build()); } + return Optional.empty(); } - public List<XtaMessage> findByReaderIdentifierValueLimitedTo(String readerIdentifierValue, int maxListItems) { - return findByReaderIdentifierValue(readerIdentifierValue) + public List<XtaMessage> findOpenMessagesByReaderIdentifierValueLimitedTo(String readerIdentifierValue, int maxListItems) { + return findOpenMessagesByReaderIdentifierValue(readerIdentifierValue) .limit(maxListItems) .toList(); } - public BigInteger countByReaderIdentifierValue(String readerIdentifierValue) { - return BigInteger.valueOf(findByReaderIdentifierValue(readerIdentifierValue).count()); + public BigInteger countOpenMessagesByReaderIdentifierValue(String readerIdentifierValue) { + return BigInteger.valueOf(findOpenMessagesByReaderIdentifierValue(readerIdentifierValue).count()); } - Stream<XtaMessage> findByReaderIdentifierValue(String readerIdentifierValue) { + Stream<XtaMessage> findOpenMessagesByReaderIdentifierValue(String readerIdentifierValue) { return messages.values().stream() + .filter(m -> messageIdToStatus.get(m.metaData().messageId()) == XtaTransportReport.MessageStatus.OFFEN) .filter(m -> m.metaData().readerIdentifier().value().equals(readerIdentifierValue)); } - public boolean deleteByMessageIdAndReaderIdentifierValue(String messageId, String readerIdentifierValue) { - return get(messageId) + public boolean closeByMessageIdAndReaderIdentifierValue(String messageId, String readerIdentifierValue) { + return getMessage(messageId) .filter(m -> m.metaData().readerIdentifier().value().equals(readerIdentifierValue)) - .map(m -> delete(messageId)) + .map(m -> close(messageId)) .orElse(false); } + + boolean close(String messageId) { + return messageIdToStatus.computeIfPresent(messageId, (k, v) -> XtaTransportReport.MessageStatus.GRUEN) != null; + } + + private ZonedDateTime getNow() { + return ZonedDateTime.now(); + } } diff --git a/src/main/java/de/ozgcloud/xta/test/app/data/XtaTransportReportRepository.java b/src/main/java/de/ozgcloud/xta/test/app/data/XtaTransportReportRepository.java deleted file mode 100644 index 4d86cd3bac5b110a98246c7caeb34bc37db19869..0000000000000000000000000000000000000000 --- a/src/main/java/de/ozgcloud/xta/test/app/data/XtaTransportReportRepository.java +++ /dev/null @@ -1,52 +0,0 @@ -package de.ozgcloud.xta.test.app.data; - -import java.time.ZonedDateTime; -import java.util.HashMap; -import java.util.Optional; - -import lombok.RequiredArgsConstructor; -import org.springframework.stereotype.Component; - -import de.ozgcloud.xta.test.app.model.XtaMessageMetaData; -import de.ozgcloud.xta.test.app.model.XtaTransportReport; - -@Component -@RequiredArgsConstructor -public class XtaTransportReportRepository { - private final HashMap<String, XtaMessageMetaData> messageIdTomessageMetaData = new HashMap<>(); - private final HashMap<String, XtaTransportReport.MessageStatus> messageIdToStatus = new HashMap<>(); - - public boolean add(XtaMessageMetaData messageMetaData) { - if (messageIdTomessageMetaData.containsKey(messageMetaData.messageId())) { - return false; - } - messageIdTomessageMetaData.put(messageMetaData.messageId(), messageMetaData); - messageIdToStatus.put(messageMetaData.messageId(), XtaTransportReport.MessageStatus.OFFEN); - return true; - } - - public boolean setClosedStatus(String messageId) { - if (!messageIdToStatus.containsKey(messageId)) { - return false; - } - - messageIdToStatus.put(messageId, XtaTransportReport.MessageStatus.GRUEN); - return true; - - } - - public Optional<XtaTransportReport> get(String messageId) { - if (messageIdTomessageMetaData.containsKey(messageId)) { - return Optional.of(XtaTransportReport.builder() - .messageMetaData(messageIdTomessageMetaData.get(messageId)) - .status(messageIdToStatus.get(messageId)) - .reportTime(getNow()) - .build()); - } - return Optional.empty(); - } - - private ZonedDateTime getNow() { - return ZonedDateTime.now(); - } -} diff --git a/src/main/java/de/ozgcloud/xta/test/app/service/XtaMessageService.java b/src/main/java/de/ozgcloud/xta/test/app/service/XtaMessageService.java index 2d663d603bd703c2cad6b1a5f5f604711ad17fd0..201c5a90afdc563273c3e4e125f68a0ac4df659a 100644 --- a/src/main/java/de/ozgcloud/xta/test/app/service/XtaMessageService.java +++ b/src/main/java/de/ozgcloud/xta/test/app/service/XtaMessageService.java @@ -9,7 +9,6 @@ import org.springframework.core.env.Environment; import org.springframework.stereotype.Service; import de.ozgcloud.xta.test.app.data.XtaMessageRepository; -import de.ozgcloud.xta.test.app.data.XtaTransportReportRepository; import de.ozgcloud.xta.test.app.model.*; import lombok.RequiredArgsConstructor; @@ -18,22 +17,17 @@ import lombok.RequiredArgsConstructor; @RequiredArgsConstructor public class XtaMessageService { private final XtaMessageRepository messageRepository; - private final XtaTransportReportRepository transportReportRepository; private final Environment environment; public boolean sendMessage(XtaMessage message) { - if (transportReportRepository.add(message.metaData())) { - messageRepository.save(message); - return true; - } - return false; + return messageRepository.add(message); } public XtaMessageMetaDataListing getStatusList(XtaMessageMetaDataListingRequest listingRequest) { return XtaMessageMetaDataListing.builder() - .pendingMessageCount(messageRepository.countByReaderIdentifierValue(listingRequest.clientIdentifier().value())) - .messages(getMetaData(messageRepository.findByReaderIdentifierValueLimitedTo( + .pendingMessageCount(messageRepository.countOpenMessagesByReaderIdentifierValue(listingRequest.clientIdentifier().value())) + .messages(getMetaData(messageRepository.findOpenMessagesByReaderIdentifierValueLimitedTo( listingRequest.clientIdentifier().value(), listingRequest.maxListItems()))) .build(); @@ -46,7 +40,7 @@ public class XtaMessageService { } public Optional<XtaMessage> getMessage(XtaGetMessageRequest request) { - return messageRepository.get(request.messageId()) + return messageRepository.getMessage(request.messageId()) .filter(isAuthorOrReaderOfMessage(request.clientIdentifier().value())); } @@ -55,16 +49,14 @@ public class XtaMessageService { } public boolean closeMessage(XtaCloseRequest request) { - var isDeleted = messageRepository.deleteByMessageIdAndReaderIdentifierValue( + return messageRepository.closeByMessageIdAndReaderIdentifierValue( request.messageId(), request.clientIdentifier().value() ); - var isClosed = transportReportRepository.setClosedStatus(request.messageId()); - return isDeleted && isClosed; } public Optional<XtaTransportReport> getTransportReport(XtaGetTransportReportRequest request) { - return transportReportRepository.get(request.messageId()) + return messageRepository.getTransportReport(request.messageId()) .filter(isAuthorOrReaderOfTransportReport(request.clientIdentifier().value())); } diff --git a/src/test/java/de/ozgcloud/xta/test/app/data/XtaMessageRepositoryTest.java b/src/test/java/de/ozgcloud/xta/test/app/data/XtaMessageRepositoryTest.java index af7fe1a6223ca4bac704049b2f28896fae44bf42..e48a5aace20088c243c99f8f66ff33a05ce45ada 100644 --- a/src/test/java/de/ozgcloud/xta/test/app/data/XtaMessageRepositoryTest.java +++ b/src/test/java/de/ozgcloud/xta/test/app/data/XtaMessageRepositoryTest.java @@ -1,11 +1,11 @@ package de.ozgcloud.xta.test.app.data; -import static de.ozgcloud.xta.test.app.factory.XtaMessageMetaDataTestFactory.*; -import static de.ozgcloud.xta.test.app.factory.XtaMessageTestFactory.*; -import static org.assertj.core.api.Assertions.*; -import static org.mockito.Mockito.*; +import static de.ozgcloud.xta.test.app.factory.XtaMessageMetaDataTestFactory.READER_IDENTIFIER; +import static de.ozgcloud.xta.test.app.factory.XtaMessageTestFactory.MESSAGE_ID_1; +import static de.ozgcloud.xta.test.app.factory.XtaMessageTestFactory.MESSAGE_ID_2; +import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.Mockito.doReturn; -import java.util.List; import java.util.stream.Stream; import org.junit.jupiter.api.BeforeEach; @@ -17,18 +17,18 @@ import org.junit.jupiter.params.provider.ValueSource; import org.mockito.InjectMocks; import org.mockito.Spy; -import de.ozgcloud.xta.test.app.factory.XtaFileTestFactory; import de.ozgcloud.xta.test.app.factory.XtaMessageMetaDataTestFactory; import de.ozgcloud.xta.test.app.factory.XtaMessageTestFactory; -import de.ozgcloud.xta.test.app.model.XtaFile; import de.ozgcloud.xta.test.app.model.XtaIdentifier; import de.ozgcloud.xta.test.app.model.XtaMessage; +import de.ozgcloud.xta.test.app.model.XtaTransportReport; public class XtaMessageRepositoryTest { @Spy @InjectMocks private XtaMessageRepository xtaMessageRepository; + private final XtaMessage message = XtaMessageTestFactory.create(MESSAGE_ID_1); @DisplayName("save") @Nested @@ -36,101 +36,181 @@ public class XtaMessageRepositoryTest { @Test void shouldSaveMessage() { - var message = XtaMessageTestFactory.create(MESSAGE_ID_1); + xtaMessageRepository.add(message); - xtaMessageRepository.save(message); - - assertThat(xtaMessageRepository.get(MESSAGE_ID_1)).contains(message); + assertThat(xtaMessageRepository.getMessage(MESSAGE_ID_1)).contains(message); } } - @DisplayName("get") + @DisplayName("get message") @Nested - class TestGet { - private final XtaMessage message = XtaMessageTestFactory.create(MESSAGE_ID_1); - + class TestGetMessage { @BeforeEach void beforeEach() { xtaMessageRepository = new XtaMessageRepository(); - xtaMessageRepository.save(message); + xtaMessageRepository.add(message); } @Test void shouldReturnMessage() { - var result = xtaMessageRepository.get(MESSAGE_ID_1); + var result = xtaMessageRepository.getMessage(MESSAGE_ID_1); assertThat(result).contains(message); } @Test void shouldReturnEmpty() { - var result = xtaMessageRepository.get(MESSAGE_ID_2); + var result = xtaMessageRepository.getMessage(MESSAGE_ID_2); assertThat(result).isEmpty(); } } + @DisplayName("get transport report") @Nested - class TestDelete { - public static final String MESSAGE_ID = "messageId"; - private XtaFile messageFile; - private XtaFile attachmentFile; + class TestGetTransportReport { + @Nested + class WithExistingMessageId { + @BeforeEach + void beforeEach() { + xtaMessageRepository = new XtaMessageRepository(); + xtaMessageRepository.add(message); + } + + @Test + void shouldReturnReport() { + var result = xtaMessageRepository.getTransportReport(message.metaData().messageId()); + + assertThat(result).isPresent(); + assertThat(result.get().messageMetaData()).isEqualTo(message.metaData()); + } + + @Test + void shouldSetReportTime() { + var result = xtaMessageRepository.getTransportReport(message.metaData().messageId()); + + assertThat(result).isPresent(); + assertThat(result.get().reportTime()).isNotNull(); + } + + @Test + void shouldSetStatusOffen() { + var result = xtaMessageRepository.getTransportReport(message.metaData().messageId()); + + assertThat(result).isPresent(); + assertThat(result.get().status()).isEqualTo(XtaTransportReport.MessageStatus.OFFEN); + } + } + @Nested + class WithMissingMessageId { + @Test + void shouldReturnEmpty() { + var result = xtaMessageRepository.getTransportReport(message.metaData().messageId()); + + assertThat(result).isEmpty(); + } + } + + } + + @DisplayName("close by message id and reader identifier value") + @Nested + class TestCloseByMessageIdAndReaderIdentifierValue { @BeforeEach void beforeEach() { - messageFile = XtaFileTestFactory.create(); - attachmentFile = XtaFileTestFactory.create(); - var message = XtaMessageTestFactory.createBuilder(MESSAGE_ID) - .messageFile(messageFile) - .attachmentFiles(List.of(attachmentFile)) - .build(); - xtaMessageRepository.save(message); + xtaMessageRepository = new XtaMessageRepository(); + xtaMessageRepository.add(message); } @Test - void shouldDeleteMessage() { - xtaMessageRepository.delete(MESSAGE_ID); + void shouldCloseMessage() { + var result = xtaMessageRepository.closeByMessageIdAndReaderIdentifierValue(message.metaData().messageId(), + message.metaData().readerIdentifier().value()); - assertThat(xtaMessageRepository.get(MESSAGE_ID)).isEmpty(); + assertThat(result).isTrue(); } @Test - void shouldDeleteTemporaryFiles() { - assertThat(messageFile.file()).exists(); - assertThat(attachmentFile.file()).exists(); + void shouldNotCloseMessageWithUnknownReaderIdentifier() { + var result = xtaMessageRepository.closeByMessageIdAndReaderIdentifierValue(message.metaData().messageId(), "unknown"); - xtaMessageRepository.delete(MESSAGE_ID); + assertThat(result).isFalse(); + } - assertThat(messageFile.file()).doesNotExist(); - assertThat(attachmentFile.file()).doesNotExist(); + @Test + void shouldNotCloseMessageWithModifiedMessageId() { + var result = xtaMessageRepository.closeByMessageIdAndReaderIdentifierValue(message.metaData().messageId() + "1", + message.metaData().readerIdentifier().value()); + + assertThat(result).isFalse(); } } - @DisplayName("find by reader identifier value limited to") + @DisplayName("close") + @Nested + class TestClose { + @BeforeEach + void beforeEach() { + xtaMessageRepository = new XtaMessageRepository(); + } + + @Test + void shouldSetClosedStatus() { + xtaMessageRepository.add(message); + + xtaMessageRepository.close(message.metaData().messageId()); + var report = xtaMessageRepository.getTransportReport(message.metaData().messageId()); + + assertThat(report).isPresent(); + assertThat(report.get().status()).isEqualTo(XtaTransportReport.MessageStatus.GRUEN); + } + + @Test + void shouldReturnTrueOnSuccess() { + xtaMessageRepository.add(message); + + var result = xtaMessageRepository.close(message.metaData().messageId()); + + assertThat(result).isTrue(); + } + + @Test + void shouldReturnFalseOnMissingMessageId() { + var result = xtaMessageRepository.close(message.metaData().messageId()); + + assertThat(result).isFalse(); + } + + } + + @DisplayName("find open messages by reader identifier value limited to") @Nested - class TestFindByReaderIdentifierValueLimitedTo { + class TestFindOpenMessagesByReaderIdentifierValueLimitedTo { @BeforeEach void beforeEach() { - xtaMessageRepository.save(XtaMessageTestFactory.create("1")); - xtaMessageRepository.save(XtaMessageTestFactory.create("2")); - xtaMessageRepository.save(XtaMessageTestFactory.create("3")); + xtaMessageRepository.add(XtaMessageTestFactory.create("1")); + xtaMessageRepository.add(XtaMessageTestFactory.create("2")); + xtaMessageRepository.add(XtaMessageTestFactory.create("3")); + xtaMessageRepository.add(XtaMessageTestFactory.create("4")); + xtaMessageRepository.close("4"); } @DisplayName("should return limit") @ParameterizedTest @ValueSource(ints = { 0, 1, 2 }) void shouldReturnLimit(int limit) { - var result = xtaMessageRepository.findByReaderIdentifierValueLimitedTo(READER_IDENTIFIER.value(), limit); + var result = xtaMessageRepository.findOpenMessagesByReaderIdentifierValueLimitedTo(READER_IDENTIFIER.value(), limit); assertThat(result).hasSize(limit); } - @DisplayName("should return all") + @DisplayName("should return all open messages") @ParameterizedTest @ValueSource(ints = { 3, 4, 5 }) - void shouldReturnAll(int limit) { - var result = xtaMessageRepository.findByReaderIdentifierValueLimitedTo(READER_IDENTIFIER.value(), limit); + void shouldReturnAllOpenMessages(int limit) { + var result = xtaMessageRepository.findOpenMessagesByReaderIdentifierValueLimitedTo(READER_IDENTIFIER.value(), limit); assertThat(result).hasSize(3); } @@ -138,44 +218,46 @@ public class XtaMessageRepositoryTest { @DisplayName("should not find any with unknown reader identifier") @Test void shouldNotFindAnyWithUnknownReaderIdentifier() { - var result = xtaMessageRepository.findByReaderIdentifierValueLimitedTo("unknown", 1); + var result = xtaMessageRepository.findOpenMessagesByReaderIdentifierValueLimitedTo("unknown", 1); assertThat(result).isEmpty(); } } - @DisplayName("count by reader identifier value") + @DisplayName("count open messages by reader identifier value") @Nested - class TestCountByReaderIdentifierValue { + class TestCountOpenMessagesByReaderIdentifierValue { @BeforeEach void beforeEach() { doReturn(Stream.of(XtaMessageTestFactory.create("1"), XtaMessageTestFactory.create("2"), - XtaMessageTestFactory.create("3"))).when(xtaMessageRepository).findByReaderIdentifierValue(READER_IDENTIFIER.value()); + XtaMessageTestFactory.create("3"))).when(xtaMessageRepository).findOpenMessagesByReaderIdentifierValue(READER_IDENTIFIER.value()); } @DisplayName("should return") @Test void shouldReturn() { - var count = xtaMessageRepository.countByReaderIdentifierValue(READER_IDENTIFIER.value()); + var count = xtaMessageRepository.countOpenMessagesByReaderIdentifierValue(READER_IDENTIFIER.value()); assertThat(count).isEqualTo(3); } } - @DisplayName("find by reader identifier value") + @DisplayName("find open messages by reader identifier value") @Nested - class TestFindByReaderIdentifierValue { + class TestFindOpenMessagesByReaderIdentifierValue { private static final String OTHER_READER_IDENTIFIER = "readerIdentifier"; @BeforeEach void beforeEach() { xtaMessageRepository = new XtaMessageRepository(); - xtaMessageRepository.save(XtaMessageTestFactory.create("1")); - xtaMessageRepository.save(XtaMessageTestFactory.create("2")); - xtaMessageRepository.save(XtaMessageTestFactory.create("3")); - xtaMessageRepository.save(XtaMessageTestFactory.createBuilder() + xtaMessageRepository.add(XtaMessageTestFactory.create("1")); + xtaMessageRepository.add(XtaMessageTestFactory.create("2")); + xtaMessageRepository.add(XtaMessageTestFactory.create("3")); + xtaMessageRepository.add(XtaMessageTestFactory.create("4")); + xtaMessageRepository.close("4"); + xtaMessageRepository.add(XtaMessageTestFactory.createBuilder() .metaData(XtaMessageMetaDataTestFactory.createBuilder() .readerIdentifier(XtaIdentifier.builder().value(OTHER_READER_IDENTIFIER).build()) .build()) @@ -185,7 +267,7 @@ public class XtaMessageRepositoryTest { @DisplayName("should return message for reader identifier") @Test void shouldReturnMessageForReaderIdentifier() { - var result = xtaMessageRepository.findByReaderIdentifierValue(READER_IDENTIFIER.value()).toList(); + var result = xtaMessageRepository.findOpenMessagesByReaderIdentifierValue(READER_IDENTIFIER.value()).toList(); assertThat(result).hasSize(3); } @@ -193,7 +275,7 @@ public class XtaMessageRepositoryTest { @DisplayName("should return messages for other reader identifier") @Test void shouldReturnMessagesForOtherReaderIdentifier() { - var result = xtaMessageRepository.findByReaderIdentifierValue(OTHER_READER_IDENTIFIER).toList(); + var result = xtaMessageRepository.findOpenMessagesByReaderIdentifierValue(OTHER_READER_IDENTIFIER).toList(); assertThat(result).hasSize(1); } @@ -201,7 +283,7 @@ public class XtaMessageRepositoryTest { @DisplayName("should return no messages for unknown reader identifier") @Test void shouldReturnNoMessagesForUnknownReaderIdentifier() { - var result = xtaMessageRepository.findByReaderIdentifierValue("unknown").toList(); + var result = xtaMessageRepository.findOpenMessagesByReaderIdentifierValue("unknown").toList(); assertThat(result).isEmpty(); } diff --git a/src/test/java/de/ozgcloud/xta/test/app/data/XtaTransportReportRepositoryTest.java b/src/test/java/de/ozgcloud/xta/test/app/data/XtaTransportReportRepositoryTest.java deleted file mode 100644 index 2eb7701f1d7d575d2eb266a8897e1aeaf9e89210..0000000000000000000000000000000000000000 --- a/src/test/java/de/ozgcloud/xta/test/app/data/XtaTransportReportRepositoryTest.java +++ /dev/null @@ -1,115 +0,0 @@ -package de.ozgcloud.xta.test.app.data; - -import static org.assertj.core.api.Assertions.assertThat; - -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.mockito.Spy; - -import de.ozgcloud.xta.test.app.factory.XtaMessageMetaDataTestFactory; -import de.ozgcloud.xta.test.app.model.XtaMessageMetaData; -import de.ozgcloud.xta.test.app.model.XtaTransportReport; - -public class XtaTransportReportRepositoryTest { - @Spy - private XtaTransportReportRepository repository; - - private final XtaMessageMetaData messageMetaData = XtaMessageMetaDataTestFactory.create(); - - @Nested - class Add{ - @Test - void shouldReturnTrue() { - var result = repository.add(messageMetaData); - - assertThat(result).isTrue(); - } - - @Test - void shouldReturnFalseForDuplicateMessageId() { - repository.add(messageMetaData); - var result = repository.add(messageMetaData); - - assertThat(result).isFalse(); - } - - } - - @Nested - class Get { - @Nested - class WithExistingMessageId { - @Test - void shouldReturnReport() { - repository.add(messageMetaData); - - var result = repository.get(messageMetaData.messageId()); - - assertThat(result).isPresent(); - assertThat(result.get().messageMetaData()).isEqualTo(messageMetaData); - } - - @Test - void shouldSetReportTime() { - repository.add(messageMetaData); - - var result = repository.get(messageMetaData.messageId()); - - assertThat(result).isPresent(); - assertThat(result.get().reportTime()).isNotNull(); - } - - @Test - void shouldSetStatusOffen() { - repository.add(messageMetaData); - - var result = repository.get(messageMetaData.messageId()); - - assertThat(result).isPresent(); - assertThat(result.get().status()).isEqualTo(XtaTransportReport.MessageStatus.OFFEN); - } - } - - @Nested - class WithMissingMessageId { - @Test - void shouldReturnEmpty() { - var result = repository.get(messageMetaData.messageId()); - - assertThat(result).isEmpty(); - } - } - - } - - @Nested - class SetClosedStatus { - @Test - void shouldSetClosedStatus() { - repository.add(messageMetaData); - - repository.setClosedStatus(messageMetaData.messageId()); - var report = repository.get(messageMetaData.messageId()); - - assertThat(report).isPresent(); - assertThat(report.get().status()).isEqualTo(XtaTransportReport.MessageStatus.GRUEN); - } - - @Test - void shouldReturnTrueOnSuccess() { - repository.add(messageMetaData); - - var result = repository.setClosedStatus(messageMetaData.messageId()); - - assertThat(result).isTrue(); - } - - @Test - void shouldReturnFalseOnMissingMessageId() { - var result = repository.setClosedStatus(messageMetaData.messageId()); - - assertThat(result).isFalse(); - } - - } -} diff --git a/src/test/java/de/ozgcloud/xta/test/app/service/XtaMessageServiceTest.java b/src/test/java/de/ozgcloud/xta/test/app/service/XtaMessageServiceTest.java index ff75022fd71553d543e318141972ab35824ba3a6..08acdb49bfacd8fb56250383cc654b6a3404e062 100644 --- a/src/test/java/de/ozgcloud/xta/test/app/service/XtaMessageServiceTest.java +++ b/src/test/java/de/ozgcloud/xta/test/app/service/XtaMessageServiceTest.java @@ -23,7 +23,6 @@ import org.mockito.Spy; import org.springframework.core.env.Environment; import de.ozgcloud.xta.test.app.data.XtaMessageRepository; -import de.ozgcloud.xta.test.app.data.XtaTransportReportRepository; import de.ozgcloud.xta.test.app.factory.XtaCloseRequestTestFactory; import de.ozgcloud.xta.test.app.factory.XtaMessageMetaDataTestFactory; import de.ozgcloud.xta.test.app.factory.XtaMessageTestFactory; @@ -33,8 +32,6 @@ public class XtaMessageServiceTest { @Mock private XtaMessageRepository messageRepository; @Mock - private XtaTransportReportRepository transportReportRepository; - @Mock private Environment environment; @Spy @@ -51,23 +48,13 @@ public class XtaMessageServiceTest { message = XtaMessageTestFactory.create(MESSAGE_ID); } - @Test - void shouldSaveTransportReport() { - message = XtaMessageTestFactory.create(MESSAGE_ID); - - service.sendMessage(message); - - verify(transportReportRepository).add(message.metaData()); - } - @Test void shouldSaveMessage() { - when(transportReportRepository.add(message.metaData())).thenReturn(true); message = XtaMessageTestFactory.create(MESSAGE_ID); service.sendMessage(message); - verify(messageRepository).save(message); + verify(messageRepository).add(message); } } @@ -90,9 +77,9 @@ public class XtaMessageServiceTest { message1 = XtaMessageTestFactory.create(MESSAGE_ID_1); message2 = XtaMessageTestFactory.create(MESSAGE_ID_2); - when(messageRepository.findByReaderIdentifierValueLimitedTo(READER_IDENTIFIER.value(), MAX_LIST_ITEMS)).thenReturn( + when(messageRepository.findOpenMessagesByReaderIdentifierValueLimitedTo(READER_IDENTIFIER.value(), MAX_LIST_ITEMS)).thenReturn( List.of(message1, message2)); - when(messageRepository.countByReaderIdentifierValue(READER_IDENTIFIER.value())).thenReturn(BigInteger.valueOf(MESSAGE_COUNT)); + when(messageRepository.countOpenMessagesByReaderIdentifierValue(READER_IDENTIFIER.value())).thenReturn(BigInteger.valueOf(MESSAGE_COUNT)); } @Test @@ -131,7 +118,7 @@ public class XtaMessageServiceTest { @DisplayName("should return") @Test void shouldReturn() { - when(messageRepository.get(MESSAGE_ID_1)).thenReturn(Optional.of(message)); + when(messageRepository.getMessage(MESSAGE_ID_1)).thenReturn(Optional.of(message)); doReturn(IS_AUTHOR_OR_READER).when(service).isAuthorOrReaderOfMessage(READER_IDENTIFIER.value()); var result = service.getMessage(GET_MESSAGE_REQUEST); @@ -142,7 +129,7 @@ public class XtaMessageServiceTest { @DisplayName("should return empty if message id not found") @Test void shouldReturnEmptyIfMessageIdNotFound() { - when(messageRepository.get(MESSAGE_ID_1)).thenReturn(Optional.empty()); + when(messageRepository.getMessage(MESSAGE_ID_1)).thenReturn(Optional.empty()); var result = service.getMessage(GET_MESSAGE_REQUEST); @@ -152,7 +139,7 @@ public class XtaMessageServiceTest { @DisplayName("should return empty if not author or reader") @Test void shouldReturnEmptyIfNotAuthorOrReader() { - when(messageRepository.get(MESSAGE_ID_1)).thenReturn(Optional.of(message)); + when(messageRepository.getMessage(MESSAGE_ID_1)).thenReturn(Optional.of(message)); doReturn(IS_NOT_AUTHOR_OR_READER).when(service).isAuthorOrReaderOfMessage(READER_IDENTIFIER.value()); var result = service.getMessage(GET_MESSAGE_REQUEST); @@ -230,16 +217,14 @@ public class XtaMessageServiceTest { @DisplayName("should return") @ParameterizedTest @ValueSource(booleans = { true, false }) - void shouldReturn(boolean deleted) { + void shouldReturn(boolean closed) { var request = XtaCloseRequestTestFactory.create(); - when(messageRepository.deleteByMessageIdAndReaderIdentifierValue( - request.messageId(), request.clientIdentifier().value()) - ).thenReturn(deleted); - when(transportReportRepository.setClosedStatus(request.messageId())).thenReturn(deleted); + when(messageRepository.closeByMessageIdAndReaderIdentifierValue(request.messageId(), request.clientIdentifier().value())) + .thenReturn(closed); boolean result = service.closeMessage(request); - assertThat(result).isEqualTo(deleted); + assertThat(result).isEqualTo(closed); } @DisplayName("should set transport status to closed") @@ -249,7 +234,7 @@ public class XtaMessageServiceTest { service.closeMessage(request); - verify(transportReportRepository).setClosedStatus(request.messageId()); + verify(messageRepository).closeByMessageIdAndReaderIdentifierValue(request.messageId(), request.clientIdentifier().value()); } } @@ -268,7 +253,7 @@ public class XtaMessageServiceTest { @DisplayName("should return") @Test void shouldReturn() { - when(transportReportRepository.get(MESSAGE_ID_1)).thenReturn(Optional.of(report)); + when(messageRepository.getTransportReport(MESSAGE_ID_1)).thenReturn(Optional.of(report)); doReturn(IS_AUTHOR_OR_READER).when(service).isAuthorOrReaderOfTransportReport(READER_IDENTIFIER.value()); var result = service.getTransportReport(GET_TRANSPORT_REPORT_REQUEST); @@ -279,7 +264,7 @@ public class XtaMessageServiceTest { @DisplayName("should return empty if message id not found") @Test void shouldReturnEmptyIfMessageIdNotFound() { - when(transportReportRepository.get(MESSAGE_ID_1)).thenReturn(Optional.empty()); + when(messageRepository.getTransportReport(MESSAGE_ID_1)).thenReturn(Optional.empty()); var result = service.getTransportReport(GET_TRANSPORT_REPORT_REQUEST); @@ -289,7 +274,7 @@ public class XtaMessageServiceTest { @DisplayName("should return empty if not author or reader") @Test void shouldReturnEmptyIfNotAuthorOrReader() { - when(transportReportRepository.get(MESSAGE_ID_1)).thenReturn(Optional.of(report)); + when(messageRepository.getTransportReport(MESSAGE_ID_1)).thenReturn(Optional.of(report)); doReturn(IS_NOT_AUTHOR_OR_READER).when(service).isAuthorOrReaderOfTransportReport(READER_IDENTIFIER.value()); var result = service.getTransportReport(GET_TRANSPORT_REPORT_REQUEST);