From a7870b0961cbe563e7397a95f6c17c3eb73cf601 Mon Sep 17 00:00:00 2001 From: Lukas Malte Monnerjahn <lukasmalte.monnerjahn@dataport.de> Date: Mon, 9 Sep 2024 16:13:55 +0200 Subject: [PATCH] OZG-6240 XtaTransportReportRepository --- .../data/XtaTransportReportRepository.java | 32 ++++++++++--- .../XtaTransportReportRepositoryTest.java | 46 +++++++++++++++---- 2 files changed, 62 insertions(+), 16 deletions(-) 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 index 4c05cb5..6f67093 100644 --- a/src/main/java/de/ozgcloud/xta/test/app/data/XtaTransportReportRepository.java +++ b/src/main/java/de/ozgcloud/xta/test/app/data/XtaTransportReportRepository.java @@ -1,6 +1,7 @@ package de.ozgcloud.xta.test.app.data; import java.time.Clock; +import java.time.LocalDateTime; import java.util.HashMap; import java.util.Optional; @@ -13,20 +14,37 @@ import de.ozgcloud.xta.test.app.model.XtaTransportReport; @Component @RequiredArgsConstructor public class XtaTransportReportRepository { - private final HashMap<String, XtaTransportReport> transportReports = new HashMap<>(); + private final HashMap<String, XtaMessageMetaData> messageIdTomessageMetaData = new HashMap<>(); + private final HashMap<String, XtaTransportReport.MessageStatus> messageIdToStatus = new HashMap<>(); private final Clock clock; - public void add(XtaMessageMetaData messageMetaData) { - // TODO Auto-generated method stub - + 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 void setClosedStatus(String messageId) { - // TODO Auto-generated method stub + 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) { - // TODO Auto-generated method stub + if (messageIdTomessageMetaData.containsKey(messageId)) { + return Optional.of(XtaTransportReport.builder() + .messageMetaData(messageIdTomessageMetaData.get(messageId)) + .status(messageIdToStatus.get(messageId)) + .reportTime(LocalDateTime.now(clock)) + .build()); + } return Optional.empty(); } } 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 index 51d147e..cc20e5c 100644 --- a/src/test/java/de/ozgcloud/xta/test/app/data/XtaTransportReportRepositoryTest.java +++ b/src/test/java/de/ozgcloud/xta/test/app/data/XtaTransportReportRepositoryTest.java @@ -1,7 +1,6 @@ package de.ozgcloud.xta.test.app.data; import static org.assertj.core.api.Assertions.assertThat; -import static org.mockito.Mockito.when; import java.time.Clock; import java.time.Instant; @@ -10,7 +9,6 @@ import java.time.LocalDateTime; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Test; -import org.mockito.Mock; import de.ozgcloud.xta.test.app.factory.XtaMessageMetaDataTestFactory; import de.ozgcloud.xta.test.app.model.XtaMessageMetaData; @@ -18,13 +16,13 @@ import de.ozgcloud.xta.test.app.model.XtaTransportReport; public class XtaTransportReportRepositoryTest { private XtaTransportReportRepository repository; - @Mock private Clock clock; private final XtaMessageMetaData messageMetaData = XtaMessageMetaDataTestFactory.create(); @BeforeEach void beforeEach() { + clock = Clock.fixed(Instant.now(), Clock.systemDefaultZone().getZone()); repository = new XtaTransportReportRepository(clock); } @@ -39,11 +37,26 @@ public class XtaTransportReportRepositoryTest { assertThat(result).isPresent(); assertThat(result.get().messageMetaData()).isEqualTo(messageMetaData); } + + @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 { - private final Instant instant = Instant.now(); @Test void shouldReturnEmpty() { @@ -64,13 +77,12 @@ public class XtaTransportReportRepositoryTest { @Test void shouldSetReportTimeNow() { - when(clock.instant()).thenReturn(instant); repository.add(messageMetaData); var result = repository.get(messageMetaData.messageId()); assertThat(result).isPresent(); - assertThat(result.get().reportTime()).isEqualTo(LocalDateTime.from(instant)); + assertThat(result.get().reportTime()).isEqualTo(LocalDateTime.now(clock)); } } @@ -79,12 +91,28 @@ public class XtaTransportReportRepositoryTest { @Test void shouldSetClosedStatus() { repository.add(messageMetaData); + repository.setClosedStatus(messageMetaData.messageId()); + var report = repository.get(messageMetaData.messageId()); - var result = repository.get(messageMetaData.messageId()); + assertThat(report).isPresent(); + assertThat(report.get().status()).isEqualTo(XtaTransportReport.MessageStatus.GRUEN); + } - assertThat(result).isPresent(); - assertThat(result.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(); } } } -- GitLab