Skip to content
Snippets Groups Projects
Commit a3877a1b authored by OZGCloud's avatar OZGCloud
Browse files

OZG-5044 Back again to explicit Mappings

parent e5270a19
Branches
Tags
No related merge requests found
...@@ -8,12 +8,7 @@ import lombok.Getter; ...@@ -8,12 +8,7 @@ import lombok.Getter;
@Builder @Builder
@Getter @Getter
class AlfaKonfiguration implements AnwendungsKonfiguration { class AlfaKonfiguration implements AnwendungsKonfiguration {
protected static final String[] KONFIGURATIONS_TYPES = new String[] { "Postfach" };
@JsonProperty("ozgcloud.postfach.signatur") @JsonProperty("ozgcloud.postfach.signatur")
@Builder.Default @Builder.Default
String signatur = ""; String signatur = "";
public static class AlfaKonfigurationBuilder implements AnwendungsKonfigurationBuilder {
}
} }
package de.ozgcloud.admin.settings; package de.ozgcloud.admin.settings;
interface AnwendungsKonfiguration { interface AnwendungsKonfiguration {
public interface AnwendungsKonfigurationBuilder {
public AnwendungsKonfiguration build();
}
} }
...@@ -4,9 +4,6 @@ import org.mapstruct.Mapper; ...@@ -4,9 +4,6 @@ import org.mapstruct.Mapper;
import org.mapstruct.MappingTarget; import org.mapstruct.MappingTarget;
import org.mapstruct.ReportingPolicy; import org.mapstruct.ReportingPolicy;
import de.ozgcloud.admin.settings.AlfaKonfiguration.AlfaKonfigurationBuilder;
import de.ozgcloud.admin.settings.AnwendungsKonfiguration.AnwendungsKonfigurationBuilder;
import de.ozgcloud.admin.settings.VorgangManagerKonfiguration.VorgangManagerKonfigurationBuilder;
import de.ozgcloud.admin.settings.postfach.Absender; import de.ozgcloud.admin.settings.postfach.Absender;
import de.ozgcloud.admin.settings.postfach.AbsenderVorgangManager; import de.ozgcloud.admin.settings.postfach.AbsenderVorgangManager;
import de.ozgcloud.admin.settings.postfach.PostfachSettingBody; import de.ozgcloud.admin.settings.postfach.PostfachSettingBody;
...@@ -14,25 +11,11 @@ import de.ozgcloud.admin.settings.postfach.PostfachSettingBody; ...@@ -14,25 +11,11 @@ import de.ozgcloud.admin.settings.postfach.PostfachSettingBody;
@Mapper(unmappedTargetPolicy = ReportingPolicy.WARN) @Mapper(unmappedTargetPolicy = ReportingPolicy.WARN)
interface SettingMapper { interface SettingMapper {
public default AnwendungsKonfigurationBuilder mapToAnwendungKonfiguration(@MappingTarget AnwendungsKonfigurationBuilder builder, AlfaKonfiguration.AlfaKonfigurationBuilder mapToAlfaKonfiguration(@MappingTarget AlfaKonfiguration.AlfaKonfigurationBuilder builder,
SettingBody body) { PostfachSettingBody postfachData);
if (body == null) {
return builder;
}
if (builder instanceof AlfaKonfigurationBuilder && body instanceof PostfachSettingBody) {
return addPostfachToAlfaKonfiguration((AlfaKonfigurationBuilder) builder, (PostfachSettingBody) body);
}
if (builder instanceof VorgangManagerKonfigurationBuilder && body instanceof PostfachSettingBody) {
return addPostfachToVorgangManagerKonfiguration((VorgangManagerKonfigurationBuilder) builder, (PostfachSettingBody) body);
}
return builder;
}
AlfaKonfigurationBuilder addPostfachToAlfaKonfiguration(@MappingTarget AlfaKonfigurationBuilder builder, PostfachSettingBody body);
VorgangManagerKonfigurationBuilder addPostfachToVorgangManagerKonfiguration(@MappingTarget VorgangManagerKonfigurationBuilder builder, VorgangManagerKonfiguration.VorgangManagerKonfigurationBuilder mapToVorgangManagerKonfiguration(
PostfachSettingBody body); @MappingTarget VorgangManagerKonfiguration.VorgangManagerKonfigurationBuilder builder, PostfachSettingBody postfachData);
AbsenderVorgangManager mapAbsenderToAbsenderVorgangManager(Absender absender); AbsenderVorgangManager mapAbsenderToAbsenderVorgangManager(Absender absender);
} }
...@@ -21,15 +21,13 @@ ...@@ -21,15 +21,13 @@
*/ */
package de.ozgcloud.admin.settings; package de.ozgcloud.admin.settings;
import java.util.List; import java.util.Optional;
import org.springframework.data.mongodb.repository.MongoRepository; import org.springframework.data.mongodb.repository.MongoRepository;
import org.springframework.data.mongodb.repository.Query;
import org.springframework.data.rest.core.annotation.RepositoryRestResource; import org.springframework.data.rest.core.annotation.RepositoryRestResource;
@RepositoryRestResource(collectionResourceRel = SettingConstants.REL, path = SettingConstants.PATH) @RepositoryRestResource(collectionResourceRel = SettingConstants.REL, path = SettingConstants.PATH)
interface SettingRepository extends MongoRepository<Setting, String> { interface SettingRepository extends MongoRepository<Setting, String> {
@Query("{'name' : {$in : ?0}}") Optional<Setting> findOneByName(String name);
List<Setting> findByNames(String[] names);
} }
package de.ozgcloud.admin.settings; package de.ozgcloud.admin.settings;
import java.util.List;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import de.ozgcloud.admin.settings.AnwendungsKonfiguration.AnwendungsKonfigurationBuilder; import de.ozgcloud.admin.settings.postfach.PostfachSettingBody;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
@Service @Service
@RequiredArgsConstructor @RequiredArgsConstructor
class SettingService { class SettingService {
private static final String POSTFACH_SETTING_ITEM_NAME = "Postfach";
private final SettingRepository repository; private final SettingRepository repository;
private final SettingMapper mapper; private final SettingMapper mapper;
public AlfaKonfiguration getAlfaKonfiguration() { public AlfaKonfiguration getAlfaKonfiguration() {
var settings = getSettingListFromDb(AlfaKonfiguration.KONFIGURATIONS_TYPES); var postfachData = getPostfachKonfigurationFromDb();
return (AlfaKonfiguration) buildKonfiguration(AlfaKonfiguration.builder(), settings); return mapper.mapToAlfaKonfiguration(AlfaKonfiguration.builder(), postfachData).build();
} }
public VorgangManagerKonfiguration getVorgangManagerKonfiguration() { public VorgangManagerKonfiguration getVorgangManagerKonfiguration() {
var settings = getSettingListFromDb(VorgangManagerKonfiguration.KONFIGURATIONS_TYPES); var postfachData = getPostfachKonfigurationFromDb();
return (VorgangManagerKonfiguration) buildKonfiguration(VorgangManagerKonfiguration.builder(), settings); return mapper.mapToVorgangManagerKonfiguration(VorgangManagerKonfiguration.builder(), postfachData).build();
}
private List<Setting> getSettingListFromDb(String[] settingTypes) {
return repository.findByNames(settingTypes);
} }
AnwendungsKonfiguration buildKonfiguration(AnwendungsKonfigurationBuilder builder, List<Setting> settings) { private PostfachSettingBody getPostfachKonfigurationFromDb() {
settings.forEach(setting -> mapper.mapToAnwendungKonfiguration(builder, setting.getSettingBody())); var postfach = repository.findOneByName(POSTFACH_SETTING_ITEM_NAME);
return builder.build(); return postfach.isPresent() ? (PostfachSettingBody) postfach.get().getSettingBody() : PostfachSettingBody.builder().build();
} }
} }
...@@ -9,12 +9,7 @@ import lombok.Getter; ...@@ -9,12 +9,7 @@ import lombok.Getter;
@Builder @Builder
@Getter @Getter
class VorgangManagerKonfiguration implements AnwendungsKonfiguration { class VorgangManagerKonfiguration implements AnwendungsKonfiguration {
protected static final String[] KONFIGURATIONS_TYPES = new String[] { "Postfach" };
@JsonUnwrapped(prefix = "ozgcloud.postfach.absender.") @JsonUnwrapped(prefix = "ozgcloud.postfach.absender.")
@Builder.Default @Builder.Default
private AbsenderVorgangManager absender = AbsenderVorgangManager.builder().build(); private AbsenderVorgangManager absender = AbsenderVorgangManager.builder().build();
public static class VorgangManagerKonfigurationBuilder implements AnwendungsKonfigurationBuilder {
}
} }
package de.ozgcloud.admin.settings; package de.ozgcloud.admin.settings;
import static org.assertj.core.api.Assertions.*; import static org.assertj.core.api.Assertions.*;
import static org.mockito.Mockito.*;
import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Nested;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
...@@ -20,40 +19,22 @@ public class SettingMapperTest { ...@@ -20,40 +19,22 @@ public class SettingMapperTest {
private final SettingMapper mapper = Mappers.getMapper(SettingMapper.class); private final SettingMapper mapper = Mappers.getMapper(SettingMapper.class);
@Nested @Nested
class TestMapAlfaSettingWithPostfach { class TestMapAlfaSetting {
@Test
void shouldCallAddPostfachToAlfaKonfiguration() {
var builder = AlfaKonfiguration.builder();
mapper.mapToAnwendungKonfiguration(builder, postfach);
verify(mapper).addPostfachToAlfaKonfiguration(builder, postfach);
}
@Test @Test
void shouldReturnFlattenedAlfaMap() { void shouldReturnFlattenedAlfaMap() {
var resultAlfaSetting = mapper.mapToAnwendungKonfiguration(AlfaKonfiguration.builder(), postfach); var resultAlfaSetting = mapper.mapToAlfaKonfiguration(AlfaKonfiguration.builder(), postfach).build();
assertThat(resultAlfaSetting.build()).usingRecursiveComparison().isEqualTo(alfaKonfiguration); assertThat(resultAlfaSetting).usingRecursiveComparison().isEqualTo(alfaKonfiguration);
} }
} }
@Nested @Nested
class TestMapVorgangManagerSettingWithPostfach { class TestMapVorgangManagerSetting {
@Test
void shouldCallAddPostfachToVorgangManagerKonfiguration() {
var builder = VorgangManagerKonfiguration.builder();
mapper.mapToAnwendungKonfiguration(builder, postfach);
verify(mapper).addPostfachToVorgangManagerKonfiguration(builder, postfach);
}
@Test @Test
void shouldReturnFlattenedVorgangManagerMap() { void shouldReturnFlattenedVorgangManagerMap() {
var resultVorgangmanagerSetting = mapper.mapToAnwendungKonfiguration(VorgangManagerKonfiguration.builder(), postfach); var resultVorgangmanagerSetting = mapper.mapToVorgangManagerKonfiguration(VorgangManagerKonfiguration.builder(), postfach).build();
assertThat(resultVorgangmanagerSetting.build()).usingRecursiveComparison().isEqualTo(vorgangManagerKonfiguration); assertThat(resultVorgangmanagerSetting).usingRecursiveComparison().isEqualTo(vorgangManagerKonfiguration);
} }
} }
......
...@@ -4,7 +4,7 @@ import static org.assertj.core.api.Assertions.*; ...@@ -4,7 +4,7 @@ import static org.assertj.core.api.Assertions.*;
import static org.mockito.ArgumentMatchers.*; import static org.mockito.ArgumentMatchers.*;
import static org.mockito.Mockito.*; import static org.mockito.Mockito.*;
import java.util.List; import java.util.Optional;
import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Nested;
...@@ -17,8 +17,6 @@ import org.mockito.Mock; ...@@ -17,8 +17,6 @@ import org.mockito.Mock;
import org.mockito.Spy; import org.mockito.Spy;
import org.mockito.junit.jupiter.MockitoExtension; import org.mockito.junit.jupiter.MockitoExtension;
import de.ozgcloud.admin.settings.AlfaKonfiguration.AlfaKonfigurationBuilder;
import de.ozgcloud.admin.settings.VorgangManagerKonfiguration.VorgangManagerKonfigurationBuilder;
import de.ozgcloud.admin.settings.postfach.PostfachSettingBody; import de.ozgcloud.admin.settings.postfach.PostfachSettingBody;
import de.ozgcloud.admin.settings.postfach.PostfachSettingBodyTestFactory; import de.ozgcloud.admin.settings.postfach.PostfachSettingBodyTestFactory;
...@@ -34,158 +32,112 @@ public class SettingServiceTest { ...@@ -34,158 +32,112 @@ public class SettingServiceTest {
@Mock @Mock
private SettingMapper mapper; private SettingMapper mapper;
private final static String[] POSTFACH_ARRAY = new String[] { "Postfach" }; private final String POSTFACH = "Postfach";
private final static String POSTFACH = "Postfach";
private final PostfachSettingBody postfach = PostfachSettingBodyTestFactory.create(); private final PostfachSettingBody postfach = PostfachSettingBodyTestFactory.create();
private final Setting settingWithPostfach = SettingTestFactory.createBuilder().name(POSTFACH).settingBody(postfach).build(); private final Setting settingWithPostfach = SettingTestFactory.createBuilder().name(POSTFACH).settingBody(postfach).build();
@Captor @Captor
private ArgumentCaptor<List<Setting>> settingsCaptor; private ArgumentCaptor<PostfachSettingBody> postfachCaptor;
@Nested @Nested
class TestGetAlfaKonfiguration { class TestGetAlfaKonfiguration {
@Captor @Captor
private ArgumentCaptor<AlfaKonfigurationBuilder> alfaBuilderCaptor; private ArgumentCaptor<AlfaKonfiguration.AlfaKonfigurationBuilder> alfaBuilderCaptor;
private final AlfaKonfiguration alfaSetting = AlfaKonfigurationTestFactory.create(); private final AlfaKonfiguration alfaSetting = AlfaKonfigurationTestFactory.create();
@BeforeEach @BeforeEach
void mockRepository() { void mockRepository() {
when(repository.findByNames(POSTFACH_ARRAY)).thenReturn(List.of(settingWithPostfach)); when(repository.findOneByName(POSTFACH)).thenReturn(Optional.of(settingWithPostfach));
} }
@Test @Test
void shouldQueryRepositoryWithPostfachArray() { void shouldQueryRepositoryWithPostfach() {
when(mapper.mapToAlfaKonfiguration(any(), any())).thenReturn(AlfaKonfiguration.builder());
service.getAlfaKonfiguration(); service.getAlfaKonfiguration();
verify(repository).findByNames(POSTFACH_ARRAY); verify(repository).findOneByName(POSTFACH);
} }
void shouldCallBuildKonfigurationWithAlfaBuilder() { @Test
doReturn(null).when(service).buildKonfiguration(alfaBuilderCaptor.capture(), settingsCaptor.capture()); void shouldCallMapperWithPostfach() {
when(mapper.mapToAlfaKonfiguration(alfaBuilderCaptor.capture(), postfachCaptor.capture())).thenReturn(AlfaKonfiguration.builder());
assertThat(alfaBuilderCaptor.getValue()).usingRecursiveComparison().isEqualTo(AlfaKonfiguration.builder()); service.getAlfaKonfiguration();
assertThat(postfachCaptor.getValue()).isEqualTo(postfach);
} }
@Test @Test
void shouldCallBuildKonfigurationWithAlfaSettingsList() { void shouldCallMapperWithAlfaBuilder() {
doReturn(null).when(service).buildKonfiguration(alfaBuilderCaptor.capture(), settingsCaptor.capture()); when(mapper.mapToAlfaKonfiguration(alfaBuilderCaptor.capture(), postfachCaptor.capture())).thenReturn(AlfaKonfiguration.builder());
service.getAlfaKonfiguration(); service.getAlfaKonfiguration();
assertThat(settingsCaptor.getValue()).containsExactly(settingWithPostfach); assertThat(alfaBuilderCaptor.getValue()).usingRecursiveComparison().isEqualTo(AlfaKonfiguration.builder());
} }
@Test @Test
void shouldReturnBuiltAlfaKonfiguration() { void shouldReturnBuiltAlfaKonfiguration() {
doReturn(alfaSetting).when(service).buildKonfiguration(any(), any()); when(mapper.mapToAlfaKonfiguration(any(), any())).thenReturn(AlfaKonfigurationTestFactory.createBuilder());
var resultKonfiguration = service.getAlfaKonfiguration(); var resultKonfiguration = service.getAlfaKonfiguration();
assertThat(resultKonfiguration).isEqualTo(alfaSetting); assertThat(resultKonfiguration).usingRecursiveComparison().isEqualTo(alfaSetting);
} }
} }
@Nested @Nested
class TestGetVorgangManagerKonfiguration { class TestGetVorgangManagerKonfiguration {
@Captor @Captor
private ArgumentCaptor<VorgangManagerKonfigurationBuilder> vorgangManagerBuilderCaptor; private ArgumentCaptor<VorgangManagerKonfiguration.VorgangManagerKonfigurationBuilder> vorgangManagerBuilderCaptor;
private final VorgangManagerKonfiguration vorgangManagerSetting = VorgangManagerKonfigurationTestFactory.create(); private final VorgangManagerKonfiguration vorgangManagerSetting = VorgangManagerKonfigurationTestFactory.create();
@BeforeEach @BeforeEach
void mockRepository() { void mockRepository() {
when(repository.findByNames(POSTFACH_ARRAY)).thenReturn(List.of(settingWithPostfach)); when(repository.findOneByName(POSTFACH)).thenReturn(Optional.of(settingWithPostfach));
} }
@Test @Test
void shouldQueryRepositoryWithPostfachArray() { void shouldQueryRepositoryWithPostfach() {
when(mapper.mapToVorgangManagerKonfiguration(any(), any())).thenReturn(VorgangManagerKonfiguration.builder());
service.getVorgangManagerKonfiguration(); service.getVorgangManagerKonfiguration();
verify(repository).findByNames(POSTFACH_ARRAY); verify(repository).findOneByName(POSTFACH);
} }
@Test @Test
void shouldCallBuildKonfigurationWithVorgangManagerBuilder() { void shouldCallMapperWithPostfach() {
doReturn(null).when(service).buildKonfiguration(vorgangManagerBuilderCaptor.capture(), settingsCaptor.capture()); when(mapper.mapToVorgangManagerKonfiguration(vorgangManagerBuilderCaptor.capture(), postfachCaptor.capture()))
.thenReturn(VorgangManagerKonfiguration.builder());
service.getVorgangManagerKonfiguration(); service.getVorgangManagerKonfiguration();
assertThat(vorgangManagerBuilderCaptor.getValue()).usingRecursiveComparison().isEqualTo(VorgangManagerKonfiguration.builder()); assertThat(postfachCaptor.getValue()).isEqualTo(postfach);
} }
@Test @Test
void shouldCallBuildKonfigurationWithVorgangManagerSettingsList() { void shouldCallMapperWithVorgangManagerBuilder() {
doReturn(null).when(service).buildKonfiguration(vorgangManagerBuilderCaptor.capture(), settingsCaptor.capture()); when(mapper.mapToVorgangManagerKonfiguration(vorgangManagerBuilderCaptor.capture(), postfachCaptor.capture()))
.thenReturn(VorgangManagerKonfiguration.builder());
service.getVorgangManagerKonfiguration(); service.getVorgangManagerKonfiguration();
assertThat(settingsCaptor.getValue()).containsExactly(settingWithPostfach); assertThat(vorgangManagerBuilderCaptor.getValue()).usingRecursiveComparison().isEqualTo(VorgangManagerKonfiguration.builder());
} }
@Test @Test
void shouldReturnBuiltVorgangManagerKonfiguration() { void shouldReturnBuiltVorgangManagerKonfiguration() {
doReturn(vorgangManagerSetting).when(service).buildKonfiguration(any(), any()); when(mapper.mapToVorgangManagerKonfiguration(any(), any())).thenReturn(VorgangManagerKonfigurationTestFactory.createBuilder());
var resultKonfiguration = service.getVorgangManagerKonfiguration(); var resultKonfiguration = service.getVorgangManagerKonfiguration();
assertThat(resultKonfiguration).isEqualTo(vorgangManagerSetting); assertThat(resultKonfiguration).usingRecursiveComparison().isEqualTo(vorgangManagerSetting);
}
}
@Nested
class TestBuildKonfiguration {
@Nested
class TestForAlfa {
@Test
void shouldCallMapToAnwendungKonfigurationWithMethodArgument() {
var alfaBuilder = AlfaKonfigurationTestFactory.createBuilder();
service.buildKonfiguration(alfaBuilder, List.of(settingWithPostfach));
verify(mapper).mapToAnwendungKonfiguration(alfaBuilder, settingWithPostfach.getSettingBody());
} }
@Test
void shouldReturnBuiltAlfaKonfiguration() {
var alfaBuilder = AlfaKonfiguration.builder();
when(mapper.mapToAnwendungKonfiguration(any(), any())).thenAnswer(input -> {
((AlfaKonfigurationBuilder) input.getArgument(0)).signatur(PostfachSettingBodyTestFactory.SIGNATUR);
return input.getArgument(0);
});
var resultKonfiguration = service.buildKonfiguration(alfaBuilder, List.of(settingWithPostfach));
assertThat(resultKonfiguration).usingRecursiveComparison().isEqualTo(AlfaKonfigurationTestFactory.create());
}
}
@Nested
class TestForVorgangManager {
@Test
void shouldCallMapToAnwendungKonfigurationWithMethodArgument() {
var vorgangManagerBuilder = VorgangManagerKonfigurationTestFactory.createBuilder();
service.buildKonfiguration(vorgangManagerBuilder, List.of(settingWithPostfach));
verify(mapper).mapToAnwendungKonfiguration(vorgangManagerBuilder, settingWithPostfach.getSettingBody());
}
@Test
void shouldReturnBuiltAlfaKonfiguration() {
var vorgangManagerBuilder = VorgangManagerKonfiguration.builder();
when(mapper.mapToAnwendungKonfiguration(any(), any())).thenAnswer(input -> {
((VorgangManagerKonfigurationBuilder) input.getArgument(0)).absender(VorgangManagerKonfigurationTestFactory.ABSENDER_VM);
return input.getArgument(0);
});
var resultKonfiguration = service.buildKonfiguration(vorgangManagerBuilder, List.of(settingWithPostfach));
assertThat(resultKonfiguration).usingRecursiveComparison().isEqualTo(VorgangManagerKonfigurationTestFactory.create());
}
}
} }
} }
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment