diff --git a/exploration-module/src/main/java/io/edpn/backend/exploration/adapter/persistence/entity/mapper/MybatisStationEntityMapper.java b/exploration-module/src/main/java/io/edpn/backend/exploration/adapter/persistence/entity/mapper/MybatisStationEntityMapper.java index f3d85c32..766be90a 100644 --- a/exploration-module/src/main/java/io/edpn/backend/exploration/adapter/persistence/entity/mapper/MybatisStationEntityMapper.java +++ b/exploration-module/src/main/java/io/edpn/backend/exploration/adapter/persistence/entity/mapper/MybatisStationEntityMapper.java @@ -16,10 +16,16 @@ public class MybatisStationEntityMapper { private final MybatisSystemEntityMapper systemEntityMapper; private static Map getLandingPads(Station station) { - return LandingPadSize.KNOWN_LANDING_PAD_SIZES.stream() - .collect(Collectors.toMap( - LandingPadSize::name, - landingPadSize -> station.landingPads().getOrDefault(landingPadSize, 0))); + return Optional.ofNullable(station.landingPads()) + .flatMap(MybatisStationEntityMapper::filterLandingPads) + .orElse(null); + } + + private static Optional> filterLandingPads(Map landingPads) { + Map filteredLandingPadsMap = landingPads.entrySet().stream() + .filter(entry -> LandingPadSize.KNOWN_LANDING_PAD_SIZES.contains(entry.getKey())) + .collect(Collectors.toMap(entry -> entry.getKey().name(), Map.Entry::getValue)); + return filteredLandingPadsMap.isEmpty() ? Optional.empty() : Optional.of(filteredLandingPadsMap); } private static Map getLandingPads(MybatisStationEntity stationEntity) { diff --git a/exploration-module/src/main/java/io/edpn/backend/exploration/application/service/ReceiveJournalDockedService.java b/exploration-module/src/main/java/io/edpn/backend/exploration/application/service/ReceiveJournalDockedService.java index 4a86c3a9..1b3fa36d 100644 --- a/exploration-module/src/main/java/io/edpn/backend/exploration/application/service/ReceiveJournalDockedService.java +++ b/exploration-module/src/main/java/io/edpn/backend/exploration/application/service/ReceiveJournalDockedService.java @@ -19,6 +19,7 @@ import java.time.LocalDateTime; import java.util.Map; +import java.util.Optional; import java.util.concurrent.ExecutorService; import java.util.stream.Collectors; @@ -65,11 +66,12 @@ private void createOrUpdateFromPayload(DockedMessage.V1.Payload payload, LocalDa } private Map landingPadSizeFromPayload(DockedMessage.V1.Payload payload) { - return Map.of( - LandingPadSize.LARGE, payload.landingPads().large(), - LandingPadSize.MEDIUM, payload.landingPads().medium(), - LandingPadSize.SMALL, payload.landingPads().small() - ); + return Optional.ofNullable(payload.landingPads()) + .map(landingPads -> Map.of( + LandingPadSize.LARGE, landingPads.large(), + LandingPadSize.MEDIUM, landingPads.medium(), + LandingPadSize.SMALL, landingPads.small() + )).orElse(null); } private Map stationEconomiesFromPayload(DockedMessage.V1.Payload payload) { diff --git a/exploration-module/src/test/java/io/edpn/backend/exploration/adapter/persistence/entity/mapper/MybatisStationEntityMapperTest.java b/exploration-module/src/test/java/io/edpn/backend/exploration/adapter/persistence/entity/mapper/MybatisStationEntityMapperTest.java index a9fdc2ec..e8bfb44d 100644 --- a/exploration-module/src/test/java/io/edpn/backend/exploration/adapter/persistence/entity/mapper/MybatisStationEntityMapperTest.java +++ b/exploration-module/src/test/java/io/edpn/backend/exploration/adapter/persistence/entity/mapper/MybatisStationEntityMapperTest.java @@ -128,6 +128,101 @@ public void testMap_givenStation_shouldReturnStationEntity() { MybatisStationEntity result = underTest.map(station); + assertThat(result.getId(), equalTo(station.id())); + assertThat(result.getMarketId(), equalTo(station.marketId())); + assertThat(result.getName(), equalTo(station.name())); + assertThat(result.getType(), equalTo(station.type())); + assertThat(result.getDistanceFromStar(), equalTo(station.distanceFromStar())); + assertThat(result.getSystem(), equalTo(systemEntity)); + assertThat(result.getLandingPads(), equalTo(expectedLandingPadSizes)); + assertThat(result.getEconomies(), equalTo(station.economies())); + assertThat(result.getServices(), equalTo(station.services())); + assertThat(result.getEconomy(), equalTo(station.economy())); + assertThat(result.getGovernment(), equalTo(station.government())); + assertThat(result.getOdyssey(), equalTo(station.odyssey())); + assertThat(result.getHorizons(), equalTo(station.horizons())); + assertThat(result.getUpdatedAt(), equalTo(station.updatedAt())); + } + @Test + public void testMap_givenStation_withEmptyLandingPads() { + UUID stationId = UUID.randomUUID(); + System system = mock(System.class); + MybatisSystemEntity systemEntity = mock(MybatisSystemEntity.class); + when(systemEntityMapper.map(any(System.class))).thenReturn(systemEntity); + Map expectedLandingPadSizes = null; + + Station station = new Station( + stationId, + 123L, + "stationName", + "Corriolis", + 1000.0, + system, + Map.of(), + Map.of( + "economy1", 0.1, + "economy2", 0.9 + ), + List.of("service1", "service2"), + "economy2", + "government", + true, + true, + LocalDateTime.of(2020, 1, 1, 0, 0, 0) + ); + + + MybatisStationEntity result = underTest.map(station); + + + assertThat(result.getId(), equalTo(station.id())); + assertThat(result.getMarketId(), equalTo(station.marketId())); + assertThat(result.getName(), equalTo(station.name())); + assertThat(result.getType(), equalTo(station.type())); + assertThat(result.getDistanceFromStar(), equalTo(station.distanceFromStar())); + assertThat(result.getSystem(), equalTo(systemEntity)); + assertThat(result.getLandingPads(), equalTo(expectedLandingPadSizes)); + assertThat(result.getEconomies(), equalTo(station.economies())); + assertThat(result.getServices(), equalTo(station.services())); + assertThat(result.getEconomy(), equalTo(station.economy())); + assertThat(result.getGovernment(), equalTo(station.government())); + assertThat(result.getOdyssey(), equalTo(station.odyssey())); + assertThat(result.getHorizons(), equalTo(station.horizons())); + assertThat(result.getUpdatedAt(), equalTo(station.updatedAt())); + } + + @Test + public void testMap_givenStation_withNullLandingPads() { + UUID stationId = UUID.randomUUID(); + System system = mock(System.class); + MybatisSystemEntity systemEntity = mock(MybatisSystemEntity.class); + when(systemEntityMapper.map(any(System.class))).thenReturn(systemEntity); + Map expectedLandingPadSizes = null; + + Station station = new Station( + stationId, + 123L, + "stationName", + "Corriolis", + 1000.0, + system, + null, + Map.of( + "economy1", 0.1, + "economy2", 0.9 + ), + List.of("service1", "service2"), + "economy2", + "government", + true, + true, + LocalDateTime.of(2020, 1, 1, 0, 0, 0) + ); + + + MybatisStationEntity result = underTest.map(station); + + assertThat(result.getId(), equalTo(station.id())); assertThat(result.getMarketId(), equalTo(station.marketId())); assertThat(result.getName(), equalTo(station.name()));