Skip to content
Snippets Groups Projects
Commit 008a1c0e authored by Jan Pokorný's avatar Jan Pokorný :lifter_tone2:
Browse files

Course entity - adding finished, list of ids;

parent 68897303
No related branches found
No related tags found
1 merge request!35M2 fix language school
Pipeline #
......@@ -10,7 +10,6 @@ import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.Setter;
import org.fuseri.model.dto.common.DomainObjectDto;
import org.fuseri.model.dto.user.UserDto;
import java.util.ArrayList;
import java.util.List;
......@@ -21,15 +20,16 @@ import java.util.List;
* It extends the DomainObjectDto class and includes additional Course-specific fields.
*/
@Schema(example = """
{
"id": 1,
"name": "english a1",
"capacity": 10,
"language": "ENGLISH",
"proficiency": "A1",
"students": []
}
""")
{
"id": 1,
"name": "english a1",
"capacity": 10,
"language": "ENGLISH",
"proficiency": "A1",
"students": [],
"finished": false
}
""")
@Getter
@Setter
@EqualsAndHashCode(callSuper = false)
......@@ -53,14 +53,26 @@ public class CourseDto extends DomainObjectDto {
@NotNull(message = "Student's list is required")
@Valid
private List<UserDto> students;
private List<Long> students;
@NotNull(message = "Finished status required")
@Valid
private Boolean finished;
public CourseDto(String name, Integer capacity, LanguageTypeDto languageTypeDto, ProficiencyLevelDto proficiencyLevelDto) {
public CourseDto(String name, Integer capacity, LanguageTypeDto languageTypeDto, ProficiencyLevelDto proficiencyLevelDto, List<Long> students, Boolean finished) {
this.name = name;
this.capacity = capacity;
this.language = languageTypeDto;
this.proficiency = proficiencyLevelDto;
this.students = new ArrayList<>();
this.students = students;
this.finished = finished;
}
public CourseDto(String name, int capacity, LanguageTypeDto languageTypeDto, ProficiencyLevelDto proficiencyLevelDto) {
this.name = name;
this.capacity = capacity;
this.language = languageTypeDto;
this.proficiency = proficiencyLevelDto;
this.students = new ArrayList<>();
}
}
......@@ -5,8 +5,8 @@ import lombok.*;
import org.fuseri.modulelanguageschool.common.DomainObject;
import org.fuseri.modulelanguageschool.user.User;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
@Getter
@Setter
......@@ -30,6 +30,15 @@ public class Course extends DomainObject {
private List<User> students;
private boolean finished = false;
public Course(String name, int capacity, Language language, ProficiencyLevel proficiency) {
this.name = name;
this.capacity = capacity;
this.language = language;
this.proficiency = proficiency;
this.students = new ArrayList<>();
}
public void enrolStudent(User student) {
students.add(student);
}
......@@ -38,13 +47,6 @@ public class Course extends DomainObject {
students.remove(student);
}
public Course(String name, Integer capacity, Language language, ProficiencyLevel proficiency) {
this.name = name;
this.capacity = capacity;
this.language = language;
this.proficiency = proficiency;
}
public void setFinished(boolean finished) {
this.finished = finished;
}
......
......@@ -2,26 +2,78 @@ 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.modulelanguageschool.user.User;
import org.fuseri.modulelanguageschool.user.UserService;
import org.mapstruct.Mapper;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageImpl;
import java.util.ArrayList;
import java.util.List;
@Mapper(componentModel = "spring")
@Mapper(componentModel = "spring", uses = {UserService.class})
public interface CourseMapper {
CourseDto mapToDto(Course course);
default CourseDto mapToDto(Course course) {
if (course == null) {
return null;
}
Course mapToCourse(CourseDto courseDto);
var dto = new CourseDto(course.getName(),
course.getCapacity(),
LanguageTypeDto.valueOf(course.getLanguage().name()),
ProficiencyLevelDto.valueOf(course.getProficiency().name()),
new ArrayList<>(),
course.isFinished());
dto.setId(course.getId());
var students = new ArrayList<Long>();
for (User user : course.getStudents()) {
students.add(user.getId());
}
dto.setStudents(students);
return dto;
}
List<CourseDto> mapToList(List<Course> persons);
default Course mapToCourse(CourseDto dto, UserService userService) {
if (dto == null) {
return null;
}
var course = new Course(dto.getName(),
dto.getCapacity(),
Language.valueOf(dto.getLanguage().name()),
ProficiencyLevel.valueOf(dto.getProficiency().name()),
new ArrayList<>(),
dto.getFinished());
course.setId(dto.getId());
for (Long userId : dto.getStudents()) {
course.enrolStudent(userService.find(userId));
}
return course;
}
default List<CourseDto> mapToList(List<Course> courses) {
if (courses == null) {
return null;
}
return new ArrayList<>(courses.stream().map(this::mapToDto).toList());
}
default Page<CourseDto> mapToPageDto(Page<Course> courses) {
return new PageImpl<>(mapToList(courses.getContent()), courses.getPageable(), courses.getTotalPages());
}
Course mapToCourse(CourseCreateDto dto);
default Course mapToCourse(CourseCreateDto createDto) {
if (createDto == null) {
return null;
}
return new Course(createDto.getName(),
createDto.getCapacity(),
Language.valueOf(createDto.getLanguage().name()),
ProficiencyLevel.valueOf(createDto.getProficiency().name()),
new ArrayList<>(),
false);
}
}
......@@ -34,7 +34,7 @@ import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.
public class CourseControllerTest {
private final CourseCreateDto courseCreateDto = new CourseCreateDto("english b2 course", 10, LanguageTypeDto.ENGLISH, ProficiencyLevelDto.B2);
private final CourseDto courseDto = new CourseDto("english b2 course", 10, LanguageTypeDto.ENGLISH, ProficiencyLevelDto.B2);
private final CourseDto courseDto = new CourseDto("english b2 course", 10, LanguageTypeDto.ENGLISH, ProficiencyLevelDto.B2, new ArrayList<>(), false);
@Autowired
ObjectMapper objectMapper;
......@@ -210,7 +210,7 @@ public class CourseControllerTest {
student.setId(1L);
CourseDto courseDtoWithStudent = new CourseDto("english b2 course", 10, LanguageTypeDto.ENGLISH, ProficiencyLevelDto.B2);
courseDtoWithStudent.setStudents(new ArrayList<>(List.of(student)));
courseDtoWithStudent.setStudents(new ArrayList<>(List.of(student.getId())));
Mockito.when(courseFacade.enrol(ArgumentMatchers.anyLong(),
ArgumentMatchers.anyLong())).thenReturn(courseDtoWithStudent);
......
......@@ -5,9 +5,6 @@ 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.model.dto.user.UserType;
import org.fuseri.modulelanguageschool.user.User;
import org.fuseri.modulelanguageschool.user.UserService;
import org.junit.jupiter.api.Test;
......@@ -20,6 +17,7 @@ import org.springframework.data.domain.PageImpl;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import java.util.ArrayList;
import java.util.List;
import static org.junit.jupiter.api.Assertions.assertEquals;
......@@ -34,10 +32,8 @@ import static org.mockito.Mockito.when;
@AutoConfigureMockMvc
final class CourseFacadeTest {
private final UserDto USER = new UserDto("novakovat",
"novakova@gamil.com", "Tereza", "Nováková", new AddressDto(), UserType.STUDENT);
private final CourseDto courseDto = new CourseDto("AJ1", 10,
LanguageTypeDto.ENGLISH, ProficiencyLevelDto.A1);
LanguageTypeDto.ENGLISH, ProficiencyLevelDto.A1, new ArrayList<>(), false);
private final CourseCreateDto courseCreateDto = new CourseCreateDto("AJ1", 10,
LanguageTypeDto.ENGLISH, ProficiencyLevelDto.A1);
private final Course course = new Course();
......@@ -151,5 +147,4 @@ final class CourseFacadeTest {
assertEquals(courseDto, actualDto);
}
}
......@@ -4,6 +4,7 @@ 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.modulelanguageschool.user.UserService;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
......@@ -13,98 +14,102 @@ import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageImpl;
import org.springframework.data.domain.PageRequest;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
@SpringBootTest
final class CourseMapperTest {
private final CourseDto courseDto = new CourseDto("AJ1", 10,
LanguageTypeDto.ENGLISH, ProficiencyLevelDto.A1);
private final CourseCreateDto courseCreateDto = new CourseCreateDto("AJ1", 10,
private final CourseDto courseDto = new CourseDto("AJ1", 10,
LanguageTypeDto.ENGLISH, ProficiencyLevelDto.A1, new ArrayList<>(), false);
private final CourseCreateDto courseCreateDto = new CourseCreateDto("AJ1", 10,
LanguageTypeDto.ENGLISH, ProficiencyLevelDto.A1);
private final Course course = new Course("AJ1", 10,
Language.ENGLISH, ProficiencyLevel.A1);
@Autowired
private CourseMapper CourseMapper;
private final Course course = new Course("AJ1", 10,
Language.ENGLISH, ProficiencyLevel.A1);
@BeforeEach
void setUp()
{
course.setId(1L);
courseDto.setId(1L);
}
@Autowired
private CourseMapper CourseMapper;
@Test
void mapNullToDto() {
var createdDto = CourseMapper.mapToDto(null);
@Autowired
private UserService userService;
Assertions.assertNull(createdDto);
}
@BeforeEach
void setUp() {
course.setId(1L);
courseDto.setId(1L);
}
@Test
void mapToDto() {
var createdDto = CourseMapper.mapToDto(course);
@Test
void mapNullToDto() {
var createdDto = CourseMapper.mapToDto(null);
Assertions.assertNotNull(createdDto);
}
Assertions.assertNull(createdDto);
}
@Test
void mapNullToCourseCourseDto() {
var createdCourse = CourseMapper.mapToCourse((CourseDto) null);
@Test
void mapToDto() {
var createdDto = CourseMapper.mapToDto(course);
Assertions.assertNull(createdCourse);
}
Assertions.assertNotNull(createdDto);
}
@Test
void mapToCourseCourseDto() {
var createdCourse = CourseMapper.mapToCourse(courseDto);
@Test
void mapNullToCourseCourseDto() {
var createdCourse = CourseMapper.mapToCourse((CourseDto) null, null);
Assertions.assertNotNull(createdCourse);
}
Assertions.assertNull(createdCourse);
}
@Test
void mapNullToList() {
var courseDtos = CourseMapper.mapToList(null);
@Test
void mapToCourseCourseDto() {
var createdCourse = CourseMapper.mapToCourse(courseDto, userService);
Assertions.assertNull(courseDtos);
}
Assertions.assertNotNull(createdCourse);
}
@Test
void mapToEmptyList() {
var courseDtos = CourseMapper.mapToList(Collections.emptyList());
@Test
void mapNullToList() {
var courseDtos = CourseMapper.mapToList(null);
Assertions.assertEquals(courseDtos.size(), 0);
}
Assertions.assertNull(courseDtos);
}
@Test
void mapToList() {
var courseDtos = CourseMapper.mapToList(Collections.singletonList(course));
@Test
void mapToEmptyList() {
var courseDtos = CourseMapper.mapToList(Collections.emptyList());
Assertions.assertEquals(1, courseDtos.size());
}
Assertions.assertEquals(courseDtos.size(), 0);
}
@Test
void mapToEmptyPageDto() {
Page<CourseDto> pageDto = CourseMapper.mapToPageDto(Page.empty());
@Test
void mapToList() {
var courseDtos = CourseMapper.mapToList(Collections.singletonList(course));
Assertions.assertEquals(1, pageDto.getTotalPages());
}
Assertions.assertEquals(1, courseDtos.size());
}
@Test
void mapToPageDto() {
List<Course> courses = List.of(course);
Page<Course> page = new PageImpl<>(courses, PageRequest.of(0, 1), courses.size());
Page<CourseDto> pageDto = CourseMapper.mapToPageDto(page);
@Test
void mapToEmptyPageDto() {
Page<CourseDto> pageDto = CourseMapper.mapToPageDto(Page.empty());
Assertions.assertEquals(page.getTotalPages(), pageDto.getTotalPages());
Assertions.assertEquals(page.getNumber(), pageDto.getNumber());
Assertions.assertEquals(page.getNumberOfElements(), pageDto.getNumberOfElements());
Assertions.assertEquals(page.getSize(), pageDto.getSize());
Assertions.assertEquals(page.getTotalElements(), pageDto.getTotalElements());
Assertions.assertEquals(1, pageDto.getTotalPages());
}
@Test
void mapToPageDto() {
List<Course> courses = List.of(course);
Page<Course> page = new PageImpl<>(courses, PageRequest.of(0, 1), courses.size());
Page<CourseDto> pageDto = CourseMapper.mapToPageDto(page);
Assertions.assertEquals(page.getTotalPages(), pageDto.getTotalPages());
Assertions.assertEquals(page.getNumber(), pageDto.getNumber());
Assertions.assertEquals(page.getNumberOfElements(), pageDto.getNumberOfElements());
Assertions.assertEquals(page.getSize(), pageDto.getSize());
Assertions.assertEquals(page.getTotalElements(), pageDto.getTotalElements());
// Assertions.assertEquals(courseDto, pageDto.getContent().get(0));
}
}
@Test
void mapNullToCourseCourseCreateDto() {
......@@ -119,5 +124,5 @@ final class CourseMapperTest {
Assertions.assertEquals(course, createdCourse);
}
}
......@@ -21,22 +21,21 @@ 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 ArrayList<>(), false);
private final Course course = new Course("AJ1", 10,
Language.ENGLISH, ProficiencyLevel.A1);
private final User user = new User("novakovat", UserType.STUDENT,
"novakova@gamil.com", "password", "Tereza",
"novakova@gamil.com", "password", "Tereza",
"Nováková", new Address(), new HashSet<>(), new HashMap<>());
private final Course courseWithEnrolledStudent = new Course("AJ1", 10,
Language.ENGLISH, ProficiencyLevel.A1, new ArrayList<>(List.of(user)), false);
private final List<Course> courses = List.of(course, course);
@MockBean
private CourseRepository courseRepository;
@Autowired
private CourseService courseService;
@Test
void save() {
when(courseRepository.save(course)).thenReturn(course);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment