단일 클래스에 대해 짰으며
AppointmenCommandService 클래스에 대해 테스트 코드를 짜보았다.
데이터를 디비에 이미 넣어둔 상태로 테스트 코드를 작성을 진행하였다.
테스트코드는 given, when, then으로 나누어 작성하였다.
given: 00이 주어짐
when: 00한 경우
then: 검증
@Test
void appointmentStatusTest() throws Exception {
//given
Appointment appointment1 = appointmentRepository.findById(1L).get();
//when
appointmentCommandService.updateAppointmentStatus(appointment1.getId(), AppointmentStatus.COMPLETE);
//then
assertThat(appointment1.getStatus()).isEqualTo(AppointmentStatus.COMPLETE);
}
given: Appointment가 주어짐
when: appointmentCommandService.updateAppointmentStatus() 메서드를 사용해서 예약상태를 COMPLETE로 바꿔줌
then: 예약상태가 COMPLETE로 바뀌었는지 검증
@Test
void updateAppointmentTest() throws Exception {
//given
Appointment appointment = appointmentRepository.findById(4L).get();
String newDateStr ="2021-11-28 09:40:00.000";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSS");
LocalDateTime newDate = LocalDateTime.parse(newDateStr, formatter);
//when
appointment.updateAppointmentDate(newDate);
//then
assertThat(appointment.getDate()).isEqualTo(newDate);
}
given: Appointment가 주어짐, 새로운 날짜가 주어짐
when: 기존 날짜에 appointment.updateAppointmentDate()를 통해 새로운 날짜로 변경
then: 새로운 날짜로 바뀌었는지 검증
다음은 예약하는 과정에 대한 테스트이다.
올바른 date인지를 확인하는 과정이 3단계로 되어있으며
각각의 단계에 대해서 테스트한다.
/* 올바른 date인지 확인.*/
// 1. 10분 단위로 예약 가능.
@Test
void appointmentCheckRightDateTest() throws Exception {
//given
AppointmentFormDto appointmentFormDto = new AppointmentFormDto();
//when
appointmentFormDto.setDate("2022-11-10T14:00:00");
LocalDateTime date = LocalDateTime.parse(appointmentFormDto.getDate());
//then
assertThat(date.getMinute() % 10).isEqualTo(0);
}
given: AppointmentFormDto가 주어진 경우
when: appointmentDto에 set을 통해 날짜를 설정하고 get을 통해 date를 받아온 상황
then: date.getMinute()이 10으로 나눠지는지 검증
// 2. 병원 시간 안에 있는지, 예약 날짜의 병원 운영시간
@Test
void appointmentCheckHospitalTimeTest() throws Exception {
//given
AppointmentFormDto appointmentFormDto = new AppointmentFormDto();
appointmentFormDto.setDate("2022-11-07T14:10:00");
String inputDate = appointmentFormDto.getDate();
LocalDateTime date = LocalDateTime.parse(inputDate);
Hospital hospital = hospitalRepository.findById(1L).get();
//when
String inputDateHourMinute = date.getHour() + ":" + date.getMinute();
DayOfWeek dayOfWeek = date.getDayOfWeek();
String timeOfHospital = hospital.getOpeningHours().split("/")[dayOfWeek.getValue() -1];
String[] times = timeOfHospital.split("~", 2);
//then
assertThat(inputDateHourMinute).isBetween(times[0], times[1]);
}
given: AppointmentFormDto가 주어지고 날짜 세팅, Hospital이 주어짐
when: 입력한 시간, 분을 구한 상황, hospital 여는 시간을 구한 상황
then: 입력한 시간, 분이 hospital 시간 사이에 있는지 검증
// 3. 병원에 예약한 사람이 있을 때
@Test
void appointmentWhenAlreadyAppointmentTest() throws Exception {
//given
Doctor doctor = doctorRepository.findById(6L).get();
AppointmentFormDto appointmentFormDto = new AppointmentFormDto();
appointmentFormDto.setDate("2022-10-03T10:30:00");
String inputDate = appointmentFormDto.getDate();
LocalDateTime date = LocalDateTime.parse(inputDate);
//when
Optional<Appointment> appointment = appointmentRepository.findOneByDateAndDoctorId(date, doctor.getId());
//then
assertThat(appointment.isPresent()).isTrue();
}
given: Doctor, AppointmentFormDto가 주어짐
when: 날짜, 닥터Id를 통해 Optional<Appointment>를 가져온 상황
then: appointment가 존재하는지 검증
'Test Code' 카테고리의 다른 글
AppointmentQueryService 클래스 - 테스트 코드 (0) | 2022.11.10 |
---|
댓글