From 7c4c5fa3077331acfd8b927cc121bc65fc9db2e2 Mon Sep 17 00:00:00 2001 From: evilimkova <xvilimk@fi.muni.cz> Date: Mon, 10 Apr 2023 13:19:26 +0200 Subject: [PATCH] Implementing CourseServiceTest --- .../course/CourseServiceTest.java | 175 ++++++++++++++++++ 1 file changed, 175 insertions(+) create mode 100644 application/module-language-school/src/test/java/org/fuseri/modulelanguageschool/course/CourseServiceTest.java diff --git a/application/module-language-school/src/test/java/org/fuseri/modulelanguageschool/course/CourseServiceTest.java b/application/module-language-school/src/test/java/org/fuseri/modulelanguageschool/course/CourseServiceTest.java new file mode 100644 index 00000000..833da024 --- /dev/null +++ b/application/module-language-school/src/test/java/org/fuseri/modulelanguageschool/course/CourseServiceTest.java @@ -0,0 +1,175 @@ +package org.fuseri.modulelanguageschool.course; + +import org.fuseri.modulelanguageschool.common.ResourceNotFoundException; +import org.fuseri.modulelanguageschool.user.Address; +import org.fuseri.modulelanguageschool.user.User; +import org.fuseri.modulelanguageschool.user.UserType; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +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.*; + +import static org.mockito.Mockito.*; + +@SpringBootTest +final class CourseServiceTest { + + @MockBean + private CourseRepository courseRepository; + + @Autowired + private CourseService courseService; + + private final Course course = new Course("AJ1", 10, + Language.ENGLISH, ProficiencyLevel.A1, new HashSet<>()); //todo + + private final User user = new User("novakovat", UserType.STUDENT, + "novakova@gamil.com", "password", "Tereza", + "Nováková", new Address(), List.of(), List.of()); + private final Course courseWithEnrolledStudent = new Course("AJ1", 10, + Language.ENGLISH, ProficiencyLevel.A1, new HashSet<>(List.of(user))); + private final List<Course> courses = List.of(course, course); + + @Test + void save() { + when(courseRepository.save(course)).thenReturn(course); + + Course result = courseService.save(course); + + Assertions.assertEquals(course, result); + verify(courseRepository).save(course); + } + + @Test + void notFoundById() { + when(courseRepository.findById(anyLong())).thenReturn(Optional.empty()); + + Assertions.assertThrows(ResourceNotFoundException.class, () -> courseService.findById(anyLong())); + + } + + @Test + void findById() { + when(courseRepository.findById(anyLong())).thenReturn(Optional.of(course)); + + Course result = courseService.findById(anyLong()); + + Assertions.assertEquals(course, result); + verify(courseRepository).findById(anyLong()); + } + + @Test + void findAll() { + Pageable pageable = PageRequest.of(0, 10); + Page<Course> page = new PageImpl<>(Collections.emptyList(), pageable, 0); + + when(courseRepository.findAll(pageable)).thenReturn(page); + + Page<Course> result = courseService.findAll(pageable); + + Assertions.assertEquals(page, result); + verify(courseRepository).findAll(pageable); + } + + @Test + void update() { + Long id = 1L; + when(courseRepository.findById(anyLong())).thenReturn(Optional.of(course)); + when(courseRepository.save(course)).thenReturn(course); + + Course result = courseService.update(id, course); + + Assertions.assertEquals(course, result); + verify(courseRepository).findById(anyLong()); + verify(courseRepository).save(course); + } + + @Test + void updateIdDoesNotExist() { + Long id = 1L; + when(courseRepository.findById(anyLong())).thenReturn(Optional.empty()); + + Assertions.assertThrows(ResourceNotFoundException.class, () -> courseService.update(id, course)); + } + + @Test + void delete() { + Long id = 1L; + courseService.delete(id); + + verify(courseRepository).deleteById(id); + } + + @Test + void findAllByLanguage() { + Language language = Language.ENGLISH; + when(courseRepository.findAllByLang(any(Language.class))).thenReturn(courses); + + List<Course> result = courseService.findAll(language); + + Assertions.assertEquals(courses, result); + verify(courseRepository).findAllByLang(language); + } + + @Test + void findAllByLanguageAndProf() { + Language language = Language.ENGLISH; + ProficiencyLevel proficiencyLevel = ProficiencyLevel.B1; + + when(courseRepository.findAllByLangProf(any(Language.class), any(ProficiencyLevel.class))).thenReturn(courses); + + List<Course> result = courseService.findAll(language, proficiencyLevel); + + Assertions.assertEquals(courses, result); + verify(courseRepository).findAllByLangProf(language, proficiencyLevel); + } + + @Test + void enrol() { + Long id = 1L; + when(courseRepository.findById(anyLong())).thenReturn(Optional.of(course)); + when(courseRepository.save(any(Course.class))).thenReturn(courseWithEnrolledStudent); + + Course result = courseService.enrol(id, user); + + Assertions.assertEquals(courseWithEnrolledStudent, result); + verify(courseRepository).findById(id); + verify(courseRepository).save(any(Course.class)); + } + + @Test + void enrolIdDoesNotExist() { + Long id = 1L; + when(courseRepository.findById(anyLong())).thenReturn(Optional.empty()); + + Assertions.assertThrows(ResourceNotFoundException.class, () -> courseService.enrol(id, user)); + } + + @Test + void expel() { + Long id = 1L; + when(courseRepository.findById(anyLong())).thenReturn(Optional.of(courseWithEnrolledStudent)); + when(courseRepository.save(any(Course.class))).thenReturn(course); + + Course result = courseService.expel(id, user); + + Assertions.assertEquals(course, result); + verify(courseRepository).findById(id); + verify(courseRepository).save(any(Course.class)); + } + + @Test + void expelIdDoesNotExist() { + Long id = 1L; + when(courseRepository.findById(anyLong())).thenReturn(Optional.empty()); + + Assertions.assertThrows(ResourceNotFoundException.class, () -> courseService.expel(id, user)); + } + +} -- GitLab