Mam taki test integracyjny, który sprawdza czy po rezerwacji miejsca ma ono odpowiedni status, widoczny w czasie przeglądania miejsc:
@Test
void should_seat_be_busy_after_booking() throws Exception {
//given
var seat = prepareSeat();
var screening = seat.getScreening();
//when
mockMvc.perform(
post("/bookings/")
.param("seatId", seat.getId().toString())
);
//then
mockMvc.perform(
get("/screenings/" + screening.getId() + "/seats")
).andExpect(
jsonPath(
"$.content[?(@.id == '%s' && @.status == '%s')]",
seat.getId(),
SeatStatus.BUSY
).exists()
);
}
Zwracany json:
{
"content": [
{
"id": 1,
"rowNumber": 1,
"number": 1,
"status": "FREE"
},
{
"id": 2,
"rowNumber": 1,
"number": 2,
"status": "FREE"
},
{
"id": 3,
"rowNumber": 1,
"number": 3,
"status": "FREE"
},
{
"id": 4,
"rowNumber": 1,
"number": 4,
"status": "FREE"
},
{
"id": 5,
"rowNumber": 1,
"number": 5,
"status": "FREE"
}
],
"pageable": {
"sort": {
"empty": true,
"unsorted": true,
"sorted": false
},
"offset": 0,
"pageNumber": 0,
"pageSize": 10,
"paged": true,
"unpaged": false
},
"last": false,
"totalPages": 15,
"totalElements": 150,
"size": 10,
"number": 0,
"sort": {
"empty": true,
"unsorted": true,
"sorted": false
},
"first": true,
"numberOfElements": 10,
"empty": false
}
Zamiast tego stringa: "$.content[?(@.id == '%s' && @.status == '%s')]"
chciałbym użyć czegoś lepszego, bardziej type-safe. Kombinowałem z różnymi matcherami, ale za każdym razem coś jest nie tak. Chat GPT też jakoś nie potrafi znaleźć satysfakcjonującej odpowiedzi.