본문 바로가기
반응형
Test Code

AppointmenCommandService 클래스 - 테스트 코드

by brightGarden02 2022. 11. 11.

단일 클래스에 대해 짰으며

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

댓글


반응형
반응형