Skip to content

Commit

Permalink
Task 33 : Revise getTravelsByCourierIdAndTravelQueryRequest with Requ…
Browse files Browse the repository at this point in the history
…est Object, Controller and Service
  • Loading branch information
Rapter1990 committed Sep 29, 2024
1 parent 65bffc2 commit 3dcda56
Show file tree
Hide file tree
Showing 6 changed files with 21 additions and 46 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -60,13 +60,15 @@ public CustomResponse<List<CourierResponse>> getPastTravels(
/**
* Retrieves travels of a courier based on courier ID, store name, and time range.
*
* @param request the request containing the criteria for the travel query
* @param courierId the unique identifier of the courier (UUID format)
* @param request the {@link TravelQueryRequest} containing the store name and time range for the query
* @return a CustomResponse containing a list of CourierResponse objects matching the criteria
*/
@PostMapping("/travels")
public CustomResponse<List<CourierResponse>> getTravelsByCourierIdStoreNameAndTimeRange(
@PostMapping("/travels/{courierId}")
public CustomResponse<List<CourierResponse>> getTravelsByCourierIdAndTravelQueryRequest(
@PathVariable @UUID String courierId,
@RequestBody @Valid TravelQueryRequest request) {
List<Courier> travels = courierService.getTravelsByCourierIdStoreNameAndTimeRange(request);
List<Courier> travels = courierService.getTravelsByCourierIdStoreNameAndTimeRange(courierId,request);
List<CourierResponse> response = courierToCourierResponseMapper.map(travels);
return CustomResponse.successOf(response);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,9 +19,6 @@
@Builder
public class TravelQueryRequest {

@NotBlank
@Pattern(regexp = "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$", message = "Invalid UUID format")
private String courierId;

@NotBlank(message = "Store name cannot be blank")
private String storeName;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -119,8 +119,7 @@ public List<Courier> getPastTravelsByCourierId(String courierId) {
* @return a list of Courier objects representing the courier's travels
* @throws CourierNotFoundException if no travels are found for the given criteria
*/
public List<Courier> getTravelsByCourierIdStoreNameAndTimeRange(TravelQueryRequest request) {
String courierId = request.getCourierId();
public List<Courier> getTravelsByCourierIdStoreNameAndTimeRange(String courierId,TravelQueryRequest request) {
String storeName = request.getStoreName();
LocalDateTime start = request.getStart();
LocalDateTime end = request.getEnd();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -108,8 +108,8 @@ public void getPastTravels_shouldReturnListOfTravels() throws Exception {
public void getTravelsByCourierIdStoreNameAndTimeRange_shouldReturnFilteredTravels() throws Exception {

// Given
String courierId = UUID.randomUUID().toString();
TravelQueryRequest request = TravelQueryRequest.builder()
.courierId(UUID.randomUUID().toString())
.storeName("Ataşehir MMM Migros")
.start(LocalDateTime.parse("28/09/2024 01:58", DateTimeFormatter.ofPattern("dd/MM/yyyy HH:mm")))
.end(LocalDateTime.parse("28/09/2024 02:00", DateTimeFormatter.ofPattern("dd/MM/yyyy HH:mm")))
Expand All @@ -118,7 +118,7 @@ public void getTravelsByCourierIdStoreNameAndTimeRange_shouldReturnFilteredTrave
List<Courier> travels = List.of(
Courier.builder()
.id(UUID.randomUUID().toString())
.courierId(request.getCourierId())
.courierId(courierId)
.lat(37.7749)
.lng(-122.4194)
.storeName(request.getStoreName())
Expand All @@ -129,18 +129,18 @@ public void getTravelsByCourierIdStoreNameAndTimeRange_shouldReturnFilteredTrave
List<CourierResponse> response = courierToCourierResponseMapper.map(travels);

// When
when(courierService.getTravelsByCourierIdStoreNameAndTimeRange(any(TravelQueryRequest.class))).thenReturn(travels);
when(courierService.getTravelsByCourierIdStoreNameAndTimeRange(eq(courierId),any(TravelQueryRequest.class))).thenReturn(travels);

// Then
mockMvc.perform(post("/api/couriers/travels")
mockMvc.perform(post("/api/couriers/travels/{courierId}", courierId)
.contentType(MediaType.APPLICATION_JSON)
.content(objectMapper.writeValueAsString(request)))
.andExpect(status().isOk())
.andExpect(jsonPath("$.response").isArray())
.andExpect(jsonPath("$.response[0].storeName").value(response.get(0).getStoreName()));

// Verify
verify(courierService).getTravelsByCourierIdStoreNameAndTimeRange(any(TravelQueryRequest.class));
verify(courierService).getTravelsByCourierIdStoreNameAndTimeRange(eq(courierId),any(TravelQueryRequest.class));

}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,6 @@ void shouldThrowIllegalArgumentExceptionWhenStartTimeIsAfterEndTime() {
LocalDateTime end = LocalDateTime.now(); // Current date

TravelQueryRequest request = TravelQueryRequest.builder()
.courierId("123e4567-e89b-12d3-a456-426614174000")
.storeName("Store")
.start(start)
.end(end)
Expand All @@ -57,7 +56,6 @@ void shouldPassWhenValidTimeRangeProvided() {
LocalDateTime end = LocalDateTime.now().plusDays(1); // Future date

TravelQueryRequest request = TravelQueryRequest.builder()
.courierId("123e4567-e89b-12d3-a456-426614174000")
.storeName("Store")
.start(start)
.end(end)
Expand All @@ -71,29 +69,6 @@ void shouldPassWhenValidTimeRangeProvided() {

}

@Test
void shouldFailOnInvalidUUIDFormat() {

// Given
LocalDateTime start = LocalDateTime.now().minusDays(1);
LocalDateTime end = LocalDateTime.now().plusDays(1);

TravelQueryRequest request = TravelQueryRequest.builder()
.courierId("invalid-uuid")
.storeName("Store")
.start(start)
.end(end)
.build();

// When
Set<ConstraintViolation<TravelQueryRequest>> violations = validator.validate(request);

// Then
assertFalse(violations.isEmpty(), "Violations should be present for invalid UUID format");
assertTrue(violations.stream().anyMatch(v -> v.getMessage().equals("Invalid UUID format")),
"Violation for invalid UUID should be present");

}

@Test
void shouldFailWhenStoreNameIsBlank() {
Expand All @@ -103,7 +78,6 @@ void shouldFailWhenStoreNameIsBlank() {
LocalDateTime end = LocalDateTime.now().plusDays(1);

TravelQueryRequest request = TravelQueryRequest.builder()
.courierId("123e4567-e89b-12d3-a456-426614174000")
.storeName("")
.start(start)
.end(end)
Expand All @@ -126,7 +100,6 @@ void shouldFailWhenStartIsNull() {
LocalDateTime end = LocalDateTime.now().plusDays(1);

TravelQueryRequest request = TravelQueryRequest.builder()
.courierId("123e4567-e89b-12d3-a456-426614174000")
.storeName("Store")
.start(null)
.end(end)
Expand All @@ -148,7 +121,6 @@ void shouldFailWhenEndIsNull() {
LocalDateTime start = LocalDateTime.now().minusDays(1);

TravelQueryRequest request = TravelQueryRequest.builder()
.courierId("123e4567-e89b-12d3-a456-426614174000")
.storeName("Store")
.start(start)
.end(null)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -253,7 +253,6 @@ void getTravelsByCourierIdStoreNameAndTimeRange_shouldReturnTravelsWithinTimeRan
String courierId = UUID.randomUUID().toString();

TravelQueryRequest request = TravelQueryRequest.builder()
.courierId(courierId)
.storeName("store1")
.start(LocalDateTime.now().minusHours(1))
.end(LocalDateTime.now())
Expand All @@ -271,16 +270,22 @@ void getTravelsByCourierIdStoreNameAndTimeRange_shouldReturnTravelsWithinTimeRan
List<Courier> couriers = courierEntityToCourierMapper.map(courierEntities);

// When
when(courierRepository.findByCourierIdAndStoreNameAndTimestampBetweenOrderByTimestampDesc(request.getCourierId(), request.getStoreName(), request.getStart(), request.getEnd())).thenReturn(courierEntities);
when(courierRepository.findByCourierIdAndStoreNameAndTimestampBetweenOrderByTimestampDesc(courierId,
request.getStoreName(),
request.getStart(),
request.getEnd())).thenReturn(courierEntities);

// Then
List<Courier> result = courierService.getTravelsByCourierIdStoreNameAndTimeRange(request);
List<Courier> result = courierService.getTravelsByCourierIdStoreNameAndTimeRange(courierId,request);

assertFalse(result.isEmpty());
assertEquals(couriers.get(0).getCourierId(), result.get(0).getCourierId());

// Verify
verify(courierRepository).findByCourierIdAndStoreNameAndTimestampBetweenOrderByTimestampDesc(request.getCourierId(), request.getStoreName(), request.getStart(), request.getEnd());
verify(courierRepository).findByCourierIdAndStoreNameAndTimestampBetweenOrderByTimestampDesc(courierId,
request.getStoreName(),
request.getStart(),
request.getEnd());

}

Expand Down

0 comments on commit 3dcda56

Please sign in to comment.