diff --git a/application/model/src/main/java/org/fuseri/model/dto/course/CourseDto.java b/application/model/src/main/java/org/fuseri/model/dto/course/CourseDto.java index 18e5695b056c1f3f477a05c5abd8f83bba32c9a1..97ca492ad746eb8d13015f231d9623e26f64ea08 100644 --- a/application/model/src/main/java/org/fuseri/model/dto/course/CourseDto.java +++ b/application/model/src/main/java/org/fuseri/model/dto/course/CourseDto.java @@ -43,12 +43,16 @@ public class CourseDto extends DomainObjectDto { @Valid private List<Long> studentIds; - public CourseDto(Long id, String name, Integer capacity, LanguageTypeDto languageTypeDto, ProficiencyLevelDto proficiencyLevelDto) { - this.setId(id); + public CourseDto(String name, Integer capacity, LanguageTypeDto languageTypeDto, ProficiencyLevelDto proficiencyLevelDto) { this.name = name; this.capacity = capacity; this.language = languageTypeDto; this.proficiency = proficiencyLevelDto; this.studentIds = new ArrayList<>(); } + + public CourseDto(Long id, String name, Integer capacity, LanguageTypeDto languageTypeDto, ProficiencyLevelDto proficiencyLevelDto) { + this(name, capacity, languageTypeDto, proficiencyLevelDto); + this.setId(id); + } } diff --git a/application/module-language-school/src/test/java/org/fuseri/modulelanguageschool/course/CourseFacadeTest.java b/application/module-language-school/src/test/java/org/fuseri/modulelanguageschool/course/CourseFacadeTest.java new file mode 100644 index 0000000000000000000000000000000000000000..a027c445be6346f391eda832391d240626dc2d98 --- /dev/null +++ b/application/module-language-school/src/test/java/org/fuseri/modulelanguageschool/course/CourseFacadeTest.java @@ -0,0 +1,171 @@ +package org.fuseri.modulelanguageschool.course; + + +import org.fuseri.model.dto.course.CourseCreateDto; +import org.fuseri.model.dto.course.CourseDto; +import org.fuseri.model.dto.course.LanguageTypeDto; +import org.fuseri.model.dto.course.ProficiencyLevelDto; +import org.fuseri.model.dto.user.AddressDto; +import org.fuseri.model.dto.user.UserDto; +import org.fuseri.modulelanguageschool.user.User; +import org.fuseri.modulelanguageschool.user.UserMapper; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.boot.test.mock.mockito.MockBean; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.PageImpl; +import org.springframework.data.domain.PageRequest; +import org.springframework.data.domain.Pageable; + +import java.util.List; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.anyLong; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + + +@SpringBootTest +@AutoConfigureMockMvc +final class CourseFacadeTest { + + private final UserDto USER = new UserDto("novakovat", + "novakova@gamil.com", "Tereza", "Nováková", new AddressDto()); + private final CourseDto courseDto = new CourseDto("AJ1", 10, + LanguageTypeDto.ENGLISH, ProficiencyLevelDto.A1); + private final CourseCreateDto courseCreateDto = new CourseCreateDto("AJ1", 10, + LanguageTypeDto.ENGLISH, ProficiencyLevelDto.A1); + + private final Course course = new Course(); + private final User user = new User(); + + //private final Certificate certificate = new Certificate(); + private final List<Course> courseList = List.of(course); + private final List<CourseDto> courseDtoList = List.of(courseDto); + private final LanguageTypeDto languageTypeDto = LanguageTypeDto.ENGLISH; + private final ProficiencyLevelDto proficiencyLevelDto = ProficiencyLevelDto.B1; + + + @Autowired + private CourseFacade courseFacade; + + @MockBean + private CourseService courseService; + + @MockBean + private CourseMapper courseMapper; + + @MockBean + private UserMapper userMapper; + + @Test + void create() { + when(courseMapper.mapToCourse(courseCreateDto)).thenReturn(course); + when(courseService.save(course)).thenReturn(course); + when(courseMapper.mapToDto(course)).thenReturn(courseDto); + + CourseDto actualDto = courseFacade.create(courseCreateDto); + + assertEquals(courseDto, actualDto); + } + + @Test + void testFindById() { + Long id = 0L; + when(courseService.findById(id)).thenReturn(course); + when(courseMapper.mapToDto(course)).thenReturn(courseDto); + + CourseDto actualDto = courseFacade.findById(id); + + assertNotNull(actualDto); + assertEquals(courseDto, actualDto); + } + + @Test + void testFindAll() { + Pageable pageable = PageRequest.of(0, 10); + Page<Course> certificatePage = new PageImpl<>(List.of(course), pageable, 0); + Page<CourseDto> expectedPageDto = new PageImpl<>(List.of(courseDto), pageable, 0); + + when(courseService.findAll(pageable)).thenReturn(certificatePage); + when(courseMapper.mapToPageDto(certificatePage)).thenReturn(expectedPageDto); + + Page<CourseDto> actualPageDto = courseFacade.findAll(pageable); + + assertEquals(expectedPageDto, actualPageDto); + } + + @Test + void update() { + Long id = 1L; + when(courseMapper.mapToCourse(courseCreateDto)).thenReturn(course); + when(courseService.update(id, course)).thenReturn(course); + when(courseMapper.mapToDto(course)).thenReturn(courseDto); + + CourseDto actualDto = courseFacade.update(id, courseCreateDto); + + assertEquals(courseDto, actualDto); + } + + @Test + void testDelete() { + Long id = 1L; + courseFacade.delete(id); + verify(courseService).delete(id); + } + + @Test + void testFindAllByLanguage() { + when(courseService.findAll(any(Language.class))).thenReturn(courseList); + when(courseMapper.mapToList(courseList)).thenReturn(courseDtoList); + + List<CourseDto> actualDtoList = courseFacade.findAll(languageTypeDto); + + assertNotNull(actualDtoList); + assertEquals(courseDtoList, actualDtoList); + } + + @Test + void testFindAllByLanguageAndProf() { + when(courseService.findAll(any(Language.class), any(ProficiencyLevel.class))).thenReturn(courseList); + when(courseMapper.mapToList(courseList)).thenReturn(courseDtoList); + + List<CourseDto> actualDtoList = courseFacade.findAll(languageTypeDto, proficiencyLevelDto); + + assertNotNull(actualDtoList); + assertEquals(courseDtoList, actualDtoList); + } + + @Test + void testEnrol() { + Long id = 0L; + when(courseMapper.mapToDto(course)).thenReturn(courseDto); + when(userMapper.fromDto(USER)).thenReturn(user); + when(courseService.enrol(anyLong(), any(User.class))).thenReturn(course); + + CourseDto actualDto = courseFacade.enrol(id, USER); + + assertNotNull(actualDto); + assertEquals(courseDto, actualDto); + } + + @Test + void testExpel() { + Long id = 0L; + when(courseMapper.mapToDto(course)).thenReturn(courseDto); + when(userMapper.fromDto(USER)).thenReturn(user); + when(courseService.expel(anyLong(), any(User.class))).thenReturn(course); + + CourseDto actualDto = courseFacade.expel(id, USER); + + assertNotNull(actualDto); + assertEquals(courseDto, actualDto); + } + + + +}