diff --git a/lesson_16/objects/objects_app/src/main/java/com/codedifferently/lesson16/studentinfo/Department.java b/lesson_16/objects/objects_app/src/main/java/com/codedifferently/lesson16/studentinfo/Department.java new file mode 100644 index 000000000..f014aa269 --- /dev/null +++ b/lesson_16/objects/objects_app/src/main/java/com/codedifferently/lesson16/studentinfo/Department.java @@ -0,0 +1,9 @@ +package com.codedifferently.lesson16.studentinfo; + +public enum Department { + Sales, + Finance, + Technology, + Research, + Administration +} diff --git a/lesson_16/objects/objects_app/src/main/java/com/codedifferently/lesson16/studentinfo/Student.java b/lesson_16/objects/objects_app/src/main/java/com/codedifferently/lesson16/studentinfo/Student.java new file mode 100644 index 000000000..a39466e49 --- /dev/null +++ b/lesson_16/objects/objects_app/src/main/java/com/codedifferently/lesson16/studentinfo/Student.java @@ -0,0 +1,96 @@ +package com.codedifferently.lesson16.studentinfo; + +import java.time.LocalDate; +import java.util.List; + +public class Student { + private long studentNumber; + private String fullName; + private Department department; + private String emailAddress; + private List phoneNumbers; + private LocalDate dateOfBirth; + + public Student( + long studentNumber, + String fullName, + Department department, + String emailAddress, + List phoneNumbers, + LocalDate dateOfBirth) { + this.studentNumber = studentNumber; + this.fullName = fullName; + this.department = department; + this.emailAddress = emailAddress; + this.phoneNumbers = phoneNumbers; + this.dateOfBirth = dateOfBirth; + } + + public long getStudentNumber() { + return studentNumber; + } + + public void setStudentNumber(long studentNumber) { + this.studentNumber = studentNumber; + } + + public String getFullName() { + return fullName; + } + + public void setFullName(String fullName) { + this.fullName = fullName; + } + + public Department getDepartment() { + return department; + } + + public void setDepartment(Department department) { + this.department = department; + } + + public String getEmailAddress() { + return emailAddress; + } + + public void setEmailAddress(String emailAddress) { + this.emailAddress = emailAddress; + } + + public List getPhoneNumbers() { + return phoneNumbers; + } + + public void setPhoneNumbers(List phoneNumbers) { + this.phoneNumbers = phoneNumbers; + } + + public LocalDate getDateOfBirth() { + return dateOfBirth; + } + + public void setDateOfBirth(LocalDate dateOfBirth) { + this.dateOfBirth = dateOfBirth; + } + + @Override + public String toString() { + return "Student{" + + "studentNumber=" + + studentNumber + + ", fullName='" + + fullName + + '\'' + + ", department=" + + department + + ", emailAddress='" + + emailAddress + + '\'' + + ", phoneNumbers=" + + phoneNumbers + + ", dateOfBirth=" + + dateOfBirth + + '}'; + } +} diff --git a/lesson_16/objects/objects_app/src/main/java/com/codedifferently/lesson16/studentinfo/StudentNotFoundException.java b/lesson_16/objects/objects_app/src/main/java/com/codedifferently/lesson16/studentinfo/StudentNotFoundException.java new file mode 100644 index 000000000..d57afb4df --- /dev/null +++ b/lesson_16/objects/objects_app/src/main/java/com/codedifferently/lesson16/studentinfo/StudentNotFoundException.java @@ -0,0 +1,7 @@ +package com.codedifferently.lesson16.studentinfo; + +public class StudentNotFoundException extends RuntimeException { + public StudentNotFoundException(String message) { + super(message); + } +} diff --git a/lesson_16/objects/objects_app/src/main/java/com/codedifferently/lesson16/studentinfo/StudentService.java b/lesson_16/objects/objects_app/src/main/java/com/codedifferently/lesson16/studentinfo/StudentService.java new file mode 100644 index 000000000..0922fcc4e --- /dev/null +++ b/lesson_16/objects/objects_app/src/main/java/com/codedifferently/lesson16/studentinfo/StudentService.java @@ -0,0 +1,43 @@ +package com.codedifferently.lesson16.studentinfo; + +import java.util.HashMap; +import java.util.Map; + +public class StudentService { + + private final Map students; + + public StudentService() { + students = new HashMap<>(); + } + + private void checkIfStudentExist(long studentNumber) { + if (students.containsKey(studentNumber)) { + return; + } + throw new StudentNotFoundException("Student with number " + studentNumber + " not found"); + } + + public void deleteStudent(long studentNumber) { + checkIfStudentExist(studentNumber); + students.remove(studentNumber); + } + + public void addStudent(Student student) { + students.put(student.getStudentNumber(), student); + } + + public int countNumberOfTechDeptStudents() { + int count = 0; + for (Student student : students.values()) { + if (student.getDepartment().equals(Department.Technology)) { + count++; + } + } + return count; + } + + public Student findStudentByStudentNumber(long studentNumber) { + return students.get(studentNumber); + } +} diff --git a/lesson_16/objects/objects_app/src/test/java/com/codedifferently/lesson16/studentinfo/StudentServiceTest.java b/lesson_16/objects/objects_app/src/test/java/com/codedifferently/lesson16/studentinfo/StudentServiceTest.java new file mode 100644 index 000000000..fae0043a3 --- /dev/null +++ b/lesson_16/objects/objects_app/src/test/java/com/codedifferently/lesson16/studentinfo/StudentServiceTest.java @@ -0,0 +1,157 @@ +package com.codedifferently.lesson16.studentinfo; + +import static org.assertj.core.api.Assertions.assertThatThrownBy; +import static org.junit.jupiter.api.Assertions.assertEquals; + +import java.time.LocalDate; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +public class StudentServiceTest { + + StudentService classUnderTest; + Map students; + + @BeforeEach + public void setUp() { + classUnderTest = new StudentService(); + + students = new HashMap<>(); + + List phoneNumbers1 = new ArrayList<>(); + phoneNumbers1.add("301-999-3222"); + phoneNumbers1.add("301-211-3222"); + phoneNumbers1.add("301-212-3777"); + + Student student1 = + new Student( + 112453698l, + "Jane Doe", + Department.Finance, + "janedoe@gmail.com", + phoneNumbers1, + LocalDate.of(2021, 11, 20)); + + List phoneNumbers2 = new ArrayList<>(); + phoneNumbers2.add("301-777-3222"); + phoneNumbers2.add("301-777-3222"); + phoneNumbers2.add("301-777-3777"); + + Student student2 = + new Student( + 712453698l, + "Johnie Walker", + Department.Technology, + "johnie@gmail.com", + phoneNumbers2, + LocalDate.of(2021, 10, 26)); + + List phoneNumbers3 = new ArrayList<>(); + phoneNumbers2.add("303-999-3222"); + phoneNumbers2.add("303-999-3222"); + phoneNumbers2.add("303-999-3777"); + + Student student3 = + new Student( + 912453698l, + "Fannie May", + Department.Technology, + "fannie@gmail.com", + phoneNumbers3, + LocalDate.of(2017, 9, 26)); + + students.put(112453698l, student1); + students.put(712453698l, student2); + students.put(912453698l, student3); + + classUnderTest.addStudent(student1); + classUnderTest.addStudent(student2); + classUnderTest.addStudent(student3); + } + + @Test + public void testDeleteStudent_throw_Exception_IFNumber_Not_Found() { + // Arrange + Student student = + new Student( + 44444444l, + "Gonnie ByeBye", + Department.Technology, + "gonnie@gmail.com", + null, + LocalDate.of(2019, 10, 21)); + classUnderTest.addStudent(student); + // Act + classUnderTest.deleteStudent(student.getStudentNumber()); + + // Assert + long studentNumber = 44444444l; + assertThatThrownBy(() -> classUnderTest.deleteStudent(studentNumber)) + .isInstanceOf(StudentNotFoundException.class) + .hasMessage("Student with number " + studentNumber + " not found"); + } + + @Test + public void testCountNumberOfTechDeptStudents_if_any() { + Student student = + new Student( + 44444444l, + "Gonnie ByeBye", + Department.Technology, + "gonnie@gmail.com", + null, + LocalDate.of(2019, 10, 21)); + classUnderTest.addStudent(student); + // Act + int numOfTechStudents = classUnderTest.countNumberOfTechDeptStudents(); + + // Assert + int expectedCount = 3; + assertEquals(expectedCount, numOfTechStudents); + } + + @Test + public void testAddStudent() { + // Arrange + Student student = + new Student( + 44444444l, + "Gonnie ByeBye", + Department.Technology, + "gonnie@gmail.com", + null, + LocalDate.of(2019, 10, 21)); + + // Act + classUnderTest.addStudent(student); + + // Assert + int expectedCount = 3; + assertEquals(expectedCount, students.size()); + } + + @Test + public void testFindStudentByStudentNumber_where_student_exist() { + // Arrange + Student student = + new Student( + 44444444l, + "Gonnie ByeBye", + Department.Technology, + "gonnie@gmail.com", + null, + LocalDate.of(2019, 10, 21)); + classUnderTest.addStudent(student); + + // Act + classUnderTest.findStudentByStudentNumber(student.getStudentNumber()); + + // Assert + long expectedStudentNumber = 44444444l; + assertEquals(expectedStudentNumber, student.getStudentNumber()); + } +} diff --git a/lesson_16/objects/objects_app/src/test/java/com/codedifferently/lesson16/studentinfo/StudentTest.java b/lesson_16/objects/objects_app/src/test/java/com/codedifferently/lesson16/studentinfo/StudentTest.java new file mode 100644 index 000000000..a8d17b262 --- /dev/null +++ b/lesson_16/objects/objects_app/src/test/java/com/codedifferently/lesson16/studentinfo/StudentTest.java @@ -0,0 +1,115 @@ +package com.codedifferently.lesson16.studentinfo; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotNull; + +import java.time.LocalDate; +import java.util.ArrayList; +import java.util.List; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +public class StudentTest { + private Student classUnderTest; + + @BeforeEach + public void setUp() { + List phoneNumbers = new ArrayList<>(); + phoneNumbers.add("302-999-2222"); + phoneNumbers.add("302-211-2222"); + phoneNumbers.add("302-212-7777"); + classUnderTest = + new Student( + 612453698l, + "John Doe", + Department.Finance, + "johndoe@gmail.com", + phoneNumbers, + LocalDate.of(2022, 12, 25)); + } + + @Test + void testGetEmailAddress() { + // Arrange + classUnderTest.setEmailAddress("johndoe@gmail.com"); + + // Act + String expectedEmailAddress = classUnderTest.getEmailAddress(); + + // Assert + String actualEmailAddress = "johndoe@gmail.com"; + assertEquals(expectedEmailAddress, actualEmailAddress); + } + + @Test + void testGetStudentNumber() { + // Arrange + classUnderTest.setStudentNumber(612453698l); + + // Act + long expectedStudentNumber = classUnderTest.getStudentNumber(); + + // Assert + long actualStudentNumber = 612453698l; + assertEquals(expectedStudentNumber, actualStudentNumber); + } + + @Test + void testGetStudentFullName() { + // Arrange + classUnderTest.setFullName("John Doe"); + + // Act + String expectedStudentName = classUnderTest.getFullName(); + + // Assert + String actualStudentName = "John Doe"; + assertEquals(expectedStudentName, actualStudentName); + } + + @Test + void testGetDepartment() { + // Arrange + classUnderTest.setDepartment(Department.Administration); + + // Act + Department expectedDepartment = classUnderTest.getDepartment(); + + // Assert + Department actualDepartment = Department.Administration; + assertEquals(expectedDepartment, actualDepartment); + } + + @Test + void testGetDateOfBirth() { + // Arrange + LocalDate date = LocalDate.of(2021, 9, 12); + classUnderTest.setDateOfBirth(date); + + // Act + LocalDate expectedDate = classUnderTest.getDateOfBirth(); + + // Assert + LocalDate actualDate = date; + assertEquals(expectedDate, actualDate); + } + + @Test + void testToString() { + // Arrange + + Student student = + new Student( + 612453698l, + "John Doe", + Department.Finance, + "johndoe@gmail.com", + null, + LocalDate.of(2022, 12, 25)); + // Act + String expectedResult = classUnderTest.toString(); + + // Assert + assertNotNull(expectedResult); + } +}