diff --git a/mapstruct-2/pom.xml b/mapstruct-2/pom.xml index ed2cb8f39f48..72c6aeae386e 100644 --- a/mapstruct-2/pom.xml +++ b/mapstruct-2/pom.xml @@ -25,6 +25,18 @@ ${lombok.version} provided + + org.springframework + spring-context + ${springframework.version} + test + + + org.springframework + spring-test + ${springframework.version} + test + mapstruct-2 @@ -60,6 +72,7 @@ 1.6.3 0.2.0 + 6.2.1 diff --git a/mapstruct-2/src/main/java/com/baeldung/dto/MediaDto.java b/mapstruct-2/src/main/java/com/baeldung/dto/MediaDto.java new file mode 100644 index 000000000000..cbe9510145be --- /dev/null +++ b/mapstruct-2/src/main/java/com/baeldung/dto/MediaDto.java @@ -0,0 +1,37 @@ +package com.baeldung.dto; + +public class MediaDto { + + private Long id; + + private String title; + + public MediaDto(Long id, String title) { + this.id = id; + this.title = title; + } + + public MediaDto() { + } + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + @Override + public String toString() { + return "MediaDto{" + "id=" + id + ", title='" + title + '\'' + '}'; + } +} diff --git a/mapstruct-2/src/main/java/com/baeldung/entity/Media.java b/mapstruct-2/src/main/java/com/baeldung/entity/Media.java new file mode 100644 index 000000000000..4b11472a46e1 --- /dev/null +++ b/mapstruct-2/src/main/java/com/baeldung/entity/Media.java @@ -0,0 +1,37 @@ +package com.baeldung.entity; + +public class Media { + + private Long id; + + private String title; + + public Media(Long id, String title) { + this.id = id; + this.title = title; + } + + public Media() { + } + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + @Override + public String toString() { + return "Media{" + "id=" + id + ", title='" + title + '\'' + '}'; + } +} diff --git a/mapstruct-2/src/main/java/com/baeldung/mapper/MediaMapper.java b/mapstruct-2/src/main/java/com/baeldung/mapper/MediaMapper.java new file mode 100644 index 000000000000..2629a1820a3e --- /dev/null +++ b/mapstruct-2/src/main/java/com/baeldung/mapper/MediaMapper.java @@ -0,0 +1,15 @@ +package com.baeldung.mapper; + +import org.mapstruct.Mapper; + +import com.baeldung.dto.MediaDto; +import com.baeldung.entity.Media; + +@Mapper +public interface MediaMapper { + + MediaDto toDto(Media media); + + Media toEntity(MediaDto mediaDto); + +} diff --git a/mapstruct-2/src/main/java/com/baeldung/service/MediaService.java b/mapstruct-2/src/main/java/com/baeldung/service/MediaService.java new file mode 100644 index 000000000000..2e0fcf064ab1 --- /dev/null +++ b/mapstruct-2/src/main/java/com/baeldung/service/MediaService.java @@ -0,0 +1,26 @@ +package com.baeldung.service; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import com.baeldung.dto.MediaDto; +import com.baeldung.entity.Media; +import com.baeldung.mapper.MediaMapper; + +public class MediaService { + + final Logger logger = LoggerFactory.getLogger(MediaService.class); + + private final MediaMapper mediaMapper; + + public MediaService(MediaMapper mediaMapper) { + this.mediaMapper = mediaMapper; + } + + public Media persistMedia(MediaDto mediaDto) { + Media media = mediaMapper.toEntity(mediaDto); + logger.info("Persist media: {}", media); + return media; + } + +} diff --git a/mapstruct-2/src/test/java/com/baeldung/service/MediaServiceGeneratedMapperUnitTest.java b/mapstruct-2/src/test/java/com/baeldung/service/MediaServiceGeneratedMapperUnitTest.java new file mode 100644 index 000000000000..32a8873403a3 --- /dev/null +++ b/mapstruct-2/src/test/java/com/baeldung/service/MediaServiceGeneratedMapperUnitTest.java @@ -0,0 +1,23 @@ +package com.baeldung.service; + +import static org.junit.Assert.assertEquals; + +import org.junit.Test; +import org.mapstruct.factory.Mappers; + +import com.baeldung.dto.MediaDto; +import com.baeldung.entity.Media; +import com.baeldung.mapper.MediaMapper; + +public class MediaServiceGeneratedMapperUnitTest { + + @Test + public void whenGeneratedMapperIsUsed_thenActualValuesAreMapped() { + MediaService mediaService = new MediaService(Mappers.getMapper(MediaMapper.class)); + MediaDto mediaDto = new MediaDto(1L, "title 1"); + Media persisted = mediaService.persistMedia(mediaDto); + assertEquals(mediaDto.getId(), persisted.getId()); + assertEquals(mediaDto.getTitle(), persisted.getTitle()); + } + +} diff --git a/mapstruct-2/src/test/java/com/baeldung/service/MediaServiceMockedMapperUnitTest.java b/mapstruct-2/src/test/java/com/baeldung/service/MediaServiceMockedMapperUnitTest.java new file mode 100644 index 000000000000..a956b29fd586 --- /dev/null +++ b/mapstruct-2/src/test/java/com/baeldung/service/MediaServiceMockedMapperUnitTest.java @@ -0,0 +1,32 @@ +package com.baeldung.service; + +import static org.junit.Assert.assertEquals; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + +import org.junit.Test; + +import com.baeldung.dto.MediaDto; +import com.baeldung.entity.Media; +import com.baeldung.mapper.MediaMapper; + +public class MediaServiceMockedMapperUnitTest { + + @Test + public void whenMockedMapperIsUsed_thenMockedValuesAreMapped() { + MediaMapper mockMediaMapper = mock(MediaMapper.class); + Media mockedMedia = new Media(5L, "Title 5"); + when(mockMediaMapper.toEntity(any())).thenReturn(mockedMedia); + + MediaService mediaService = new MediaService(mockMediaMapper); + MediaDto mediaDto = new MediaDto(1L, "title 1"); + Media persisted = mediaService.persistMedia(mediaDto); + + verify(mockMediaMapper).toEntity(mediaDto); + assertEquals(mockedMedia.getId(), persisted.getId()); + assertEquals(mockedMedia.getTitle(), persisted.getTitle()); + } + +} diff --git a/mapstruct-2/src/test/java/com/baeldung/spring/Config.java b/mapstruct-2/src/test/java/com/baeldung/spring/Config.java new file mode 100644 index 000000000000..e3f952b5d838 --- /dev/null +++ b/mapstruct-2/src/test/java/com/baeldung/spring/Config.java @@ -0,0 +1,17 @@ +package com.baeldung.spring; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +import com.baeldung.mapper.MediaMapper; +import com.baeldung.service.MediaService; + +@Configuration +public class Config { + + @Bean + public MediaService mediaService(MediaMapper mediaMapper) { + return new MediaService(mediaMapper); + } + +} diff --git a/mapstruct-2/src/test/java/com/baeldung/spring/MediaServiceSpringGeneratedMapperUnitTest.java b/mapstruct-2/src/test/java/com/baeldung/spring/MediaServiceSpringGeneratedMapperUnitTest.java new file mode 100644 index 000000000000..e061dbb628fd --- /dev/null +++ b/mapstruct-2/src/test/java/com/baeldung/spring/MediaServiceSpringGeneratedMapperUnitTest.java @@ -0,0 +1,30 @@ +package com.baeldung.spring; + +import static org.junit.Assert.assertEquals; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; + +import com.baeldung.dto.MediaDto; +import com.baeldung.entity.Media; +import com.baeldung.service.MediaService; + +@RunWith(SpringJUnit4ClassRunner.class) +@ContextConfiguration(classes = { Config.class, MediaSpringMapperImpl.class }) +public class MediaServiceSpringGeneratedMapperUnitTest { + + @Autowired + MediaService mediaService; + + @Test + public void whenGeneratedSpringMapperIsUsed_thenActualValuesAreMapped() { + MediaDto mediaDto = new MediaDto(1L, "title 1"); + Media persisted = mediaService.persistMedia(mediaDto); + assertEquals(mediaDto.getId(), persisted.getId()); + assertEquals(mediaDto.getTitle(), persisted.getTitle()); + } + +} diff --git a/mapstruct-2/src/test/java/com/baeldung/spring/MediaServiceSpringMockedMapperUnitTest.java b/mapstruct-2/src/test/java/com/baeldung/spring/MediaServiceSpringMockedMapperUnitTest.java new file mode 100644 index 000000000000..a7799e6ebc94 --- /dev/null +++ b/mapstruct-2/src/test/java/com/baeldung/spring/MediaServiceSpringMockedMapperUnitTest.java @@ -0,0 +1,42 @@ +package com.baeldung.spring; + +import static org.junit.Assert.assertEquals; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.ArgumentMatchers; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.bean.override.mockito.MockitoBean; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; + +import com.baeldung.dto.MediaDto; +import com.baeldung.entity.Media; +import com.baeldung.service.MediaService; + +@RunWith(SpringJUnit4ClassRunner.class) +@ContextConfiguration(classes = Config.class) +public class MediaServiceSpringMockedMapperUnitTest { + + @Autowired + MediaService mediaService; + + @MockitoBean + MediaSpringMapper mockMediaMapper; + + @Test + public void whenMockedSpringMapperIsUsed_thenMockedValuesAreMapped() { + Media mockedMedia = new Media(12L, "title 12"); + when(mockMediaMapper.toEntity(ArgumentMatchers.any())).thenReturn(mockedMedia); + + MediaDto mediaDto = new MediaDto(1L, "title 1"); + Media persisted = mediaService.persistMedia(mediaDto); + + verify(mockMediaMapper).toEntity(mediaDto); + assertEquals(mockedMedia.getId(), persisted.getId()); + assertEquals(mockedMedia.getTitle(), persisted.getTitle()); + } + +} diff --git a/mapstruct-2/src/test/java/com/baeldung/spring/MediaSpringMapper.java b/mapstruct-2/src/test/java/com/baeldung/spring/MediaSpringMapper.java new file mode 100644 index 000000000000..d752fee2291f --- /dev/null +++ b/mapstruct-2/src/test/java/com/baeldung/spring/MediaSpringMapper.java @@ -0,0 +1,10 @@ +package com.baeldung.spring; + +import org.mapstruct.Mapper; +import org.mapstruct.MappingConstants; + +import com.baeldung.mapper.MediaMapper; + +@Mapper(componentModel = MappingConstants.ComponentModel.SPRING) +public interface MediaSpringMapper extends MediaMapper { +}