diff --git a/src/test/java/in/koreatech/koin/acceptance/BusApiTest.java b/src/test/java/in/koreatech/koin/acceptance/BusApiTest.java index 570561d5e..e040e0abe 100644 --- a/src/test/java/in/koreatech/koin/acceptance/BusApiTest.java +++ b/src/test/java/in/koreatech/koin/acceptance/BusApiTest.java @@ -55,6 +55,7 @@ class BusApiTest extends AcceptanceTest { @BeforeEach void setup() { busFixture.버스_시간표_등록(); + busFixture.시내버스_시간표_등록(); when(cityBusClient.getOpenApiResponse(anyString())).thenReturn(""" { "response": { @@ -373,16 +374,46 @@ void getSearchTimetable() { @Test @DisplayName("시내버스 시간표를 조회한다 - 지원하지 않음") void getCityBusTimetable() { - RestAssured + Version version = Version.builder() + .version("test_version") + .type(VersionType.CITY.getValue()) + .build(); + versionRepository.save(version); + + Long busNumber = 400L; + String direction = "종합터미널"; + + var response = RestAssured .given() .when() - .param("bus_type", "city") - .param("direction", "to") - .param("region", "천안") - .get("/bus/timetable") + .param("bus_number", busNumber) + .param("direction", direction) + .get("/bus/timetable/city") .then() - .statusCode(HttpStatus.BAD_REQUEST.value()) + .statusCode(HttpStatus.OK.value()) .extract(); + + JsonAssertions.assertThat(response.asPrettyString()) + .isEqualTo(""" + { + "bus_info": { + "arrival_node": "종합터미널", + "depart_node": "병천3리", + "number": 400 + }, + "bus_timetables": [ + { + "day_of_week": "평일", + "depart_info": ["06:00", "07:00"] + }, + { + "day_of_week": "주말", + "depart_info": ["08:00", "09:00"] + } + ], + "updated_at": "2024-07-19 19:00:00" + } + """); } @Test diff --git a/src/test/java/in/koreatech/koin/fixture/BusFixture.java b/src/test/java/in/koreatech/koin/fixture/BusFixture.java index c114335dd..dfc6c898f 100644 --- a/src/test/java/in/koreatech/koin/fixture/BusFixture.java +++ b/src/test/java/in/koreatech/koin/fixture/BusFixture.java @@ -1,13 +1,16 @@ package in.koreatech.koin.fixture; +import java.time.LocalDateTime; import java.util.List; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import in.koreatech.koin.domain.bus.model.mongo.BusCourse; +import in.koreatech.koin.domain.bus.model.mongo.CityBusTimetable; import in.koreatech.koin.domain.bus.model.mongo.Route; import in.koreatech.koin.domain.bus.repository.BusRepository; +import in.koreatech.koin.domain.bus.repository.CityBusTimetableRepository; @Component @SuppressWarnings("NonAsciiCharacters") @@ -16,8 +19,12 @@ public final class BusFixture { @Autowired private final BusRepository busRepository; - public BusFixture(BusRepository busRepository) { + @Autowired + private final CityBusTimetableRepository cityBusTimetableRepository; + + public BusFixture(BusRepository busRepository, CityBusTimetableRepository cityBusTimetableRepository) { this.busRepository = busRepository; + this.cityBusTimetableRepository = cityBusTimetableRepository; } public void 버스_시간표_등록() { @@ -57,4 +64,29 @@ public BusFixture(BusRepository busRepository) { .build() ); } + + public void 시내버스_시간표_등록() { + cityBusTimetableRepository.save( + CityBusTimetable.builder() + .updatedAt(LocalDateTime.of(2024, 7, 19, 19, 0)) + .busInfo( + CityBusTimetable.BusInfo.builder() + .number(400L) + .depart("병천3리") + .arrival("종합터미널") + .build() + ) + .busTimetables( + List.of( + CityBusTimetable.BusTimetable.builder() + .dayOfWeek("평일") + .departInfo(List.of("06:00", "07:00")).build(), + CityBusTimetable.BusTimetable.builder() + .dayOfWeek("주말") + .departInfo(List.of("08:00", "09:00")).build() + ) + ) + .build() + ); + } }