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/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()));