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

OZG-5044: Simplify MapStruct Mapping from Postfach to

Alfa/VorgangManager-Dto-Objects.
parent fb072781
No related branches found
No related tags found
No related merge requests found
Showing with 40 additions and 170 deletions
package de.ozgcloud.admin.settings;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Builder;
......@@ -9,13 +8,9 @@ import lombok.Getter;
@Builder
@Getter
class AlfaKonfiguration implements AnwendungsKonfiguration {
@JsonIgnore
protected static final String[] KONFIGURATIONS_TYPES = new String[] { "Postfach" };
@JsonProperty("ozgcloud.postfach.signatur")
@Builder.Default
String signatur = "";
public static class AlfaKonfigurationBuilder implements AnwendungsKonfigurationBuilder {
}
}
......@@ -2,8 +2,4 @@ package de.ozgcloud.admin.settings;
interface AnwendungsKonfiguration {
public interface AnwendungsKonfigurationBuilder {
public AnwendungsKonfiguration build();
}
}
package de.ozgcloud.admin.settings;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.rest.core.event.ValidatingRepositoryEventListener;
import org.springframework.data.rest.webmvc.config.RepositoryRestConfigurer;
import lombok.RequiredArgsConstructor;
@Configuration
@RequiredArgsConstructor
public class DataRestConfiguration implements RepositoryRestConfigurer {
@Autowired
private SettingValidator settingsValidator;
@Override
......
package de.ozgcloud.admin.settings;
import org.mapstruct.Mapper;
import org.mapstruct.MappingTarget;
import org.mapstruct.Mapping;
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.AbsenderVorgangManager;
import de.ozgcloud.admin.settings.postfach.PostfachSettingBody;
@Mapper
public interface SettingMapper {
public default AnwendungsKonfigurationBuilder mapToAnwendungKonfiguration(@MappingTarget AnwendungsKonfigurationBuilder builder,
SettingBody body) {
if (body == null) {
return builder;
}
if (body instanceof PostfachSettingBody) {
if (builder instanceof AlfaKonfigurationBuilder) {
return addPostfachToAlfaKonfiguration((AlfaKonfigurationBuilder) builder, (PostfachSettingBody) body);
} else if (builder instanceof VorgangManagerKonfigurationBuilder) {
return addPostfachToVorgangManagerKonfiguration((VorgangManagerKonfigurationBuilder) builder, (PostfachSettingBody) body);
}
}
return builder;
}
AlfaKonfigurationBuilder addPostfachToAlfaKonfiguration(@MappingTarget AlfaKonfigurationBuilder builder, PostfachSettingBody body);
@Mapping(target = "signatur", source = "signatur")
AlfaKonfiguration mapToAlfaKonfiguration(PostfachSettingBody postfachData);
VorgangManagerKonfigurationBuilder addPostfachToVorgangManagerKonfiguration(@MappingTarget VorgangManagerKonfigurationBuilder builder,
PostfachSettingBody body);
@Mapping(target = "absender", source = "absender")
VorgangManagerKonfiguration mapToVorgangManagerKonfiguration(PostfachSettingBody postfachData);
AbsenderVorgangManager mapAbsenderToAbsenderVorgangManager(Absender absender);
}
......@@ -21,14 +21,13 @@
*/
package de.ozgcloud.admin.settings;
import java.util.List;
import org.springframework.data.mongodb.repository.MongoRepository;
import org.springframework.data.mongodb.repository.Query;
import org.springframework.data.rest.core.annotation.RepositoryRestResource;
@RepositoryRestResource(collectionResourceRel = SettingConstant.REL, path = SettingConstant.PATH)
interface SettingRepository extends MongoRepository<Setting, String> {
@Query("{'name' : {$in : ?0}}")
List<Setting> findByNames(String[] names);
@Query("{'name' : ?0 }")
Setting findByName(String name);
}
package de.ozgcloud.admin.settings;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import de.ozgcloud.admin.settings.AnwendungsKonfiguration.AnwendungsKonfigurationBuilder;
import de.ozgcloud.admin.settings.postfach.PostfachSettingBody;
import lombok.RequiredArgsConstructor;
@Service
@RequiredArgsConstructor
public class SettingService {
@Autowired
private static final String POSTFACH_DB_OBJEKT_NAME = "Postfach";
private SettingRepository repository;
@Autowired
private SettingMapper mapper;
public AlfaKonfiguration getAlfaKonfiguration() {
var settings = getSettingListFromDb(AlfaKonfiguration.KONFIGURATIONS_TYPES);
return (AlfaKonfiguration) buildKonfiguration(AlfaKonfiguration.builder(), settings);
var postfachData = getPostfachKonfigurationFromDb();
return mapper.mapToAlfaKonfiguration(postfachData);
}
public VorgangManagerKonfiguration getVorgangManagerKonfiguration() {
var settings = getSettingListFromDb(VorgangManagerKonfiguration.KONFIGURATIONS_TYPES);
return (VorgangManagerKonfiguration) buildKonfiguration(VorgangManagerKonfiguration.builder(), settings);
}
private List<Setting> getSettingListFromDb(String[] settingTypes) {
return repository.findByNames(settingTypes);
var postfachData = getPostfachKonfigurationFromDb();
return mapper.mapToVorgangManagerKonfiguration(postfachData);
}
AnwendungsKonfiguration buildKonfiguration(AnwendungsKonfigurationBuilder builder, List<Setting> settings) {
settings.forEach(setting -> mapper.mapToAnwendungKonfiguration(builder, setting.getSettingBody()));
return builder.build();
PostfachSettingBody getPostfachKonfigurationFromDb() {
return (PostfachSettingBody) repository.findByName(POSTFACH_DB_OBJEKT_NAME).getSettingBody();
}
}
package de.ozgcloud.admin.settings;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonUnwrapped;
import de.ozgcloud.admin.settings.postfach.AbsenderVorgangManager;
......@@ -10,13 +9,9 @@ import lombok.Getter;
@Builder
@Getter
class VorgangManagerKonfiguration implements AnwendungsKonfiguration {
@JsonIgnore
protected static final String[] KONFIGURATIONS_TYPES = new String[] { "Postfach" };
@JsonUnwrapped(prefix = "ozgcloud.postfach.absender.")
@Builder.Default
private AbsenderVorgangManager absender = AbsenderVorgangManager.builder().build();
public static class VorgangManagerKonfigurationBuilder implements AnwendungsKonfigurationBuilder {
}
}
......@@ -20,16 +20,16 @@ public class SettingMapperTest {
class TestMapAlfaSetting {
@Test
void shouldReturnFlattenedAlfaMap() {
var resultAlfaSetting = mapper.mapToAnwendungKonfiguration(AlfaKonfiguration.builder(), postfach);
var resultAlfaSetting = mapper.mapToAlfaKonfiguration(postfach);
assertThat(resultAlfaSetting.build()).usingRecursiveComparison().isEqualTo(alfaKonfiguration);
assertThat(resultAlfaSetting).usingRecursiveComparison().isEqualTo(alfaKonfiguration);
}
@Test
void shouldReturnFlattenedVorgangManagerMap() {
var resultVorgangmanagerSetting = mapper.mapToAnwendungKonfiguration(VorgangManagerKonfiguration.builder(), postfach);
var resultVorgangmanagerSetting = mapper.mapToVorgangManagerKonfiguration(postfach);
assertThat(resultVorgangmanagerSetting.build()).usingRecursiveComparison().isEqualTo(vorgangManagerKonfiguration);
assertThat(resultVorgangmanagerSetting).usingRecursiveComparison().isEqualTo(vorgangManagerKonfiguration);
}
}
......
package de.ozgcloud.admin.settings;
import static org.assertj.core.api.Assertions.*;
import static org.mockito.ArgumentMatchers.*;
import static org.mockito.Mockito.*;
import java.util.List;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Nested;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.ArgumentCaptor;
import org.mockito.Captor;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.Spy;
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.PostfachSettingBodyTestFactory;
@ExtendWith(MockitoExtension.class)
public class SettingServiceTest {
private final static String[] POSTFACH_ARRAY = new String[] { "Postfach" };
@InjectMocks
@Spy
private SettingService service;
......@@ -39,51 +30,34 @@ public class SettingServiceTest {
private final String POSTFACH = "Postfach";
private final PostfachSettingBody postfach = PostfachSettingBodyTestFactory.create();
private final Setting settingWithPostfach = SettingTestFactory.createBuilder().name(POSTFACH).settingBody(postfach).build();
@Captor
private ArgumentCaptor<SettingBody> bodyCaptor;
@Captor
private ArgumentCaptor<List<Setting>> settingsCaptor;
@Nested
class TestGetAlfaKonfiguration {
@Captor
private ArgumentCaptor<AlfaKonfigurationBuilder> alfaBuilderCaptor;
private final AlfaKonfiguration alfaSetting = AlfaKonfigurationTestFactory.create();
@BeforeEach
void mockRepository() {
when(repository.findByNames(POSTFACH_ARRAY)).thenReturn(List.of(settingWithPostfach));
}
@Test
void shouldQueryRepositoryWithPostfachArray() {
service.getAlfaKonfiguration();
verify(repository).findByNames(POSTFACH_ARRAY);
when(repository.findByName(POSTFACH)).thenReturn(settingWithPostfach);
}
@Test
void shouldCallBuildKonfigurationWithAlfaBuilder() {
doReturn(null).when(service).buildKonfiguration(alfaBuilderCaptor.capture(), settingsCaptor.capture());
void shouldQueryRepositoryWithPostfach() {
service.getAlfaKonfiguration();
assertThat(alfaBuilderCaptor.getValue()).usingRecursiveComparison().isEqualTo(AlfaKonfiguration.builder());
verify(repository).findByName(POSTFACH);
}
@Test
void shouldCallBuildKonfigurationWithAlfaSettingsList() {
doReturn(null).when(service).buildKonfiguration(alfaBuilderCaptor.capture(), settingsCaptor.capture());
void shouldCallMapper() {
service.getAlfaKonfiguration();
assertThat(settingsCaptor.getValue()).containsExactly(settingWithPostfach);
verify(mapper).mapToAlfaKonfiguration(postfach);
}
@Test
void shouldReturnBuiltAlfaKonfiguration() {
doReturn(alfaSetting).when(service).buildKonfiguration(any(), any());
when(mapper.mapToAlfaKonfiguration(postfach)).thenReturn(alfaSetting);
var resultKonfiguration = service.getAlfaKonfiguration();
......@@ -93,44 +67,31 @@ public class SettingServiceTest {
@Nested
class TestGetVorgangManagerKonfiguration {
@Captor
private ArgumentCaptor<VorgangManagerKonfigurationBuilder> vorgangManagerBuilderCaptor;
private final VorgangManagerKonfiguration vorgangManagerSetting = VorgangManagerKonfigurationTestFactory.create();
@BeforeEach
void mockRepository() {
when(repository.findByNames(POSTFACH_ARRAY)).thenReturn(List.of(settingWithPostfach));
when(repository.findByName(POSTFACH)).thenReturn(settingWithPostfach);
}
@Test
void shouldQueryRepositoryWithPostfachArray() {
service.getVorgangManagerKonfiguration();
verify(repository).findByNames(POSTFACH_ARRAY);
verify(repository).findByName(POSTFACH);
}
@Test
void shouldCallBuildKonfigurationWithVorgangManagerBuilder() {
doReturn(null).when(service).buildKonfiguration(vorgangManagerBuilderCaptor.capture(), settingsCaptor.capture());
void shouldCallMapper() {
service.getVorgangManagerKonfiguration();
assertThat(vorgangManagerBuilderCaptor.getValue()).usingRecursiveComparison().isEqualTo(VorgangManagerKonfiguration.builder());
}
@Test
void shouldCallBuildKonfigurationWithVorgangManagerSettingsList() {
doReturn(null).when(service).buildKonfiguration(vorgangManagerBuilderCaptor.capture(), settingsCaptor.capture());
service.getVorgangManagerKonfiguration();
assertThat(settingsCaptor.getValue()).containsExactly(settingWithPostfach);
verify(mapper).mapToVorgangManagerKonfiguration(postfach);
}
@Test
void shouldReturnBuiltVorgangManagerKonfiguration() {
doReturn(vorgangManagerSetting).when(service).buildKonfiguration(any(), any());
when(mapper.mapToVorgangManagerKonfiguration(postfach)).thenReturn(vorgangManagerSetting);
var resultKonfiguration = service.getVorgangManagerKonfiguration();
......@@ -139,58 +100,4 @@ public class SettingServiceTest {
}
@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