diff --git a/src/main/java/com/example/cgn221springstudent/controller/StudentController.java b/src/main/java/com/example/cgn221springstudent/controller/StudentController.java index 6bb2a36..d17be83 100644 --- a/src/main/java/com/example/cgn221springstudent/controller/StudentController.java +++ b/src/main/java/com/example/cgn221springstudent/controller/StudentController.java @@ -12,7 +12,11 @@ @RequestMapping("student") public class StudentController { - StudentService service = new StudentService(); + private final StudentService service; + + public StudentController(StudentService service) { + this.service = service; + } @GetMapping public List getAllStudents() { @@ -30,7 +34,7 @@ public Student addStudent(@RequestBody Student student) { } @GetMapping("allStudents") - public List> listAllStudents() { + public List listAllStudents() { return service.getAllStudents(); } diff --git a/src/main/java/com/example/cgn221springstudent/model/Student.java b/src/main/java/com/example/cgn221springstudent/model/Student.java index 5bace14..9b572e7 100644 --- a/src/main/java/com/example/cgn221springstudent/model/Student.java +++ b/src/main/java/com/example/cgn221springstudent/model/Student.java @@ -1,5 +1,7 @@ package com.example.cgn221springstudent.model; +import java.util.Objects; + public class Student { String name; @@ -25,4 +27,25 @@ public String getId() { public void setId(String id) { this.id = id; } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + Student student = (Student) o; + return Objects.equals(name, student.name) && Objects.equals(id, student.id); + } + + @Override + public int hashCode() { + return Objects.hash(name, id); + } + + @Override + public String toString() { + return "Student{" + + "id='" + id + '\'' + + ", name='" + name + '\'' + + '}'; + } } diff --git a/src/main/java/com/example/cgn221springstudent/Repository/StudentRepo.java b/src/main/java/com/example/cgn221springstudent/repository/StudentRepo.java similarity index 59% rename from src/main/java/com/example/cgn221springstudent/Repository/StudentRepo.java rename to src/main/java/com/example/cgn221springstudent/repository/StudentRepo.java index 3ca3da5..ecbffec 100644 --- a/src/main/java/com/example/cgn221springstudent/Repository/StudentRepo.java +++ b/src/main/java/com/example/cgn221springstudent/repository/StudentRepo.java @@ -1,18 +1,15 @@ -package com.example.cgn221springstudent.Repository; +package com.example.cgn221springstudent.repository; import com.example.cgn221springstudent.model.Student; +import org.springframework.stereotype.Repository; +import org.springframework.stereotype.Service; -import java.util.Collection; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.util.*; +@Service public class StudentRepo { - Map students = new HashMap(); - - public StudentRepo() { - } + private final Map students = new HashMap<>(); public Student addStudent(Student student) { students.put(student.getId(), student); @@ -23,8 +20,8 @@ public Student getById(String id) { return students.get(id); } - public List> getAllStudents() { - return List.of(students.values()); + public List getAllStudents() { + return new ArrayList<>(students.values()); } public Student removeStudent(String id) { diff --git a/src/main/java/com/example/cgn221springstudent/service/StudentService.java b/src/main/java/com/example/cgn221springstudent/service/StudentService.java index 8b2b8ce..909dc16 100644 --- a/src/main/java/com/example/cgn221springstudent/service/StudentService.java +++ b/src/main/java/com/example/cgn221springstudent/service/StudentService.java @@ -1,16 +1,21 @@ package com.example.cgn221springstudent.service; -import com.example.cgn221springstudent.Repository.StudentRepo; +import com.example.cgn221springstudent.repository.StudentRepo; import com.example.cgn221springstudent.model.Student; import org.springframework.stereotype.Service; +import java.util.ArrayList; import java.util.Collection; import java.util.List; @Service public class StudentService { - StudentRepo repo = new StudentRepo(); + private final StudentRepo repo; + + public StudentService(StudentRepo repo) { + this.repo = repo; + } public Student getStudentById(String id) { return repo.getById(id); @@ -20,7 +25,7 @@ public Student addStudent(Student student) { return repo.addStudent(student); } - public List> getAllStudents() { + public List getAllStudents() { return repo.getAllStudents(); } @@ -32,6 +37,19 @@ public Student updateStudent(Student student) { return repo.updateStudent(student); } + public List getStudentByName(String name) { + List allStudents = repo.getAllStudents(); + + List studentsWithName = new ArrayList<>(); + + for (Student currentStudent: allStudents) { + if (currentStudent.getName().equals(name)) { + studentsWithName.add(currentStudent); + } + } + + return studentsWithName; + } } diff --git a/src/test/java/com/example/cgn221springstudent/service/StudentServiceTest.java b/src/test/java/com/example/cgn221springstudent/service/StudentServiceTest.java new file mode 100644 index 0000000..84a92de --- /dev/null +++ b/src/test/java/com/example/cgn221springstudent/service/StudentServiceTest.java @@ -0,0 +1,77 @@ +package com.example.cgn221springstudent.service; + +import com.example.cgn221springstudent.model.Student; +import com.example.cgn221springstudent.repository.StudentRepo; +import org.junit.jupiter.api.Test; + +import java.util.List; + +import static org.junit.jupiter.api.Assertions.*; +import static org.mockito.Mockito.*; + +class StudentServiceTest { + + private StudentRepo studentRepo = mock(StudentRepo.class); + private StudentService studentService = new StudentService(studentRepo); + + @Test + void getStudentById_whenId1_thenReturnStudentWithId1() { + //GIVEN + when(studentRepo.getById("1")).thenReturn(new Student("Florian", "1")); + + //WHEN + Student actual = studentService.getStudentById("1"); + + //THEN + Student expected = new Student("Florian", "1"); + + verify(studentRepo).getById("1"); + assertEquals(expected, actual); + } + + @Test + void deleteStudent_whenId2_thenReturnDeletedStudent() { + //GIVEN + when(studentRepo.removeStudent("2")).thenReturn(new Student("Deleted Student", "2")); + + //WHEN + Student actual = studentService.deleteStudent("2"); + + //THEN + Student expected = new Student("Deleted Student", "2"); + + + verify(studentRepo).removeStudent("2"); + assertEquals(expected, actual); + } + + @Test + void getStudentByName() { + //GIVEN + when(studentRepo.getAllStudents()).thenReturn(List.of(new Student("Florian", "1"), new Student("Matthias", "2"))); + + //WHEN + List actual = studentService.getStudentByName("Matthias"); + + //THEN + List expected = List.of(new Student("Matthias", "2")); + + verify(studentRepo).getAllStudents(); + assertEquals(expected, actual); + } + + @Test + void getStudentByName_whenFlorian_thenReturnFlorian() { + //GIVEN + when(studentRepo.getAllStudents()).thenReturn(List.of(new Student("Florian", "1"), new Student("Matthias", "2"))); + + //WHEN + List actual = studentService.getStudentByName("Florian"); + + //THEN + List expected = List.of(new Student("Florian", "1")); + + verify(studentRepo).getAllStudents(); + assertEquals(expected, actual); + } +}