|
@@ -607,6 +607,95 @@ class FlashDeliveryApplicationServiceTest {
|
|
|
eq("COMPLETED"), any(Date.class));
|
|
eq("COMPLETED"), any(Date.class));
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ @Test
|
|
|
|
|
+ void senderRatesRiderOnCompletedOrder() {
|
|
|
|
|
+ Fixture fixture = new Fixture();
|
|
|
|
|
+ FlashDeliveryOrder order = order(10L, "COMPLETED");
|
|
|
|
|
+ order.setRiderId(8L);
|
|
|
|
|
+ when(fixture.orderMapper.selectById(10L)).thenReturn(order);
|
|
|
|
|
+ when(fixture.orderMapper.rateRider(eq(10L), eq(7L), eq(4.5), any(Date.class))).thenReturn(1);
|
|
|
|
|
+
|
|
|
|
|
+ fixture.service.rateRider(7L, 10L, rating(4.5));
|
|
|
|
|
+
|
|
|
|
|
+ verify(fixture.orderMapper).rateRider(eq(10L), eq(7L), eq(4.5), any(Date.class));
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @Test
|
|
|
|
|
+ void rateRiderRejectsUserOtherThanSender() {
|
|
|
|
|
+ Fixture fixture = new Fixture();
|
|
|
|
|
+ FlashDeliveryOrder order = order(10L, "COMPLETED");
|
|
|
|
|
+ order.setRiderId(8L);
|
|
|
|
|
+ when(fixture.orderMapper.selectById(10L)).thenReturn(order);
|
|
|
|
|
+
|
|
|
|
|
+ assertThrows(ServiceException.class, () -> fixture.service.rateRider(88L, 10L, rating(4.5)));
|
|
|
|
|
+ verify(fixture.orderMapper, never()).rateRider(any(), any(), any(), any());
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @Test
|
|
|
|
|
+ void rateRiderRejectsOrderNotCompletedOrWithoutRider() {
|
|
|
|
|
+ Fixture fixture = new Fixture();
|
|
|
|
|
+ FlashDeliveryOrder delivered = order(10L, "DELIVERED");
|
|
|
|
|
+ delivered.setRiderId(8L);
|
|
|
|
|
+ when(fixture.orderMapper.selectById(10L)).thenReturn(delivered);
|
|
|
|
|
+ assertThrows(ServiceException.class, () -> fixture.service.rateRider(7L, 10L, rating(4.5)));
|
|
|
|
|
+
|
|
|
|
|
+ FlashDeliveryOrder completedWithoutRider = order(11L, "COMPLETED");
|
|
|
|
|
+ when(fixture.orderMapper.selectById(11L)).thenReturn(completedWithoutRider);
|
|
|
|
|
+ assertThrows(ServiceException.class, () -> fixture.service.rateRider(7L, 11L, rating(4.5)));
|
|
|
|
|
+
|
|
|
|
|
+ verify(fixture.orderMapper, never()).rateRider(any(), any(), any(), any());
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @Test
|
|
|
|
|
+ void rateRiderRejectsAlreadyRatedOrder() {
|
|
|
|
|
+ Fixture fixture = new Fixture();
|
|
|
|
|
+ FlashDeliveryOrder order = order(10L, "COMPLETED");
|
|
|
|
|
+ order.setRiderId(8L);
|
|
|
|
|
+ order.setRiderStars(4.5);
|
|
|
|
|
+ when(fixture.orderMapper.selectById(10L)).thenReturn(order);
|
|
|
|
|
+
|
|
|
|
|
+ assertThrows(ServiceException.class, () -> fixture.service.rateRider(7L, 10L, rating(3.0)));
|
|
|
|
|
+ verify(fixture.orderMapper, never()).rateRider(any(), any(), any(), any());
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @Test
|
|
|
|
|
+ void rateRiderRejectsConcurrentDuplicateSubmission() {
|
|
|
|
|
+ Fixture fixture = new Fixture();
|
|
|
|
|
+ FlashDeliveryOrder order = order(10L, "COMPLETED");
|
|
|
|
|
+ order.setRiderId(8L);
|
|
|
|
|
+ when(fixture.orderMapper.selectById(10L)).thenReturn(order);
|
|
|
|
|
+ when(fixture.orderMapper.rateRider(eq(10L), eq(7L), eq(4.5), any(Date.class))).thenReturn(0);
|
|
|
|
|
+
|
|
|
|
|
+ assertThrows(ServiceException.class, () -> fixture.service.rateRider(7L, 10L, rating(4.5)));
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @Test
|
|
|
|
|
+ void rateRiderRejectsMissingOrOutOfRangeStars() {
|
|
|
|
|
+ Fixture fixture = new Fixture();
|
|
|
|
|
+
|
|
|
|
|
+ assertThrows(ServiceException.class, () -> fixture.service.rateRider(7L, 10L, null));
|
|
|
|
|
+ assertThrows(ServiceException.class, () -> fixture.service.rateRider(7L, 10L, rating(null)));
|
|
|
|
|
+ assertThrows(ServiceException.class, () -> fixture.service.rateRider(7L, 10L, rating(0.5)));
|
|
|
|
|
+ assertThrows(ServiceException.class, () -> fixture.service.rateRider(7L, 10L, rating(5.5)));
|
|
|
|
|
+
|
|
|
|
|
+ verify(fixture.orderMapper, never()).selectById(any());
|
|
|
|
|
+ verify(fixture.orderMapper, never()).rateRider(any(), any(), any(), any());
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @Test
|
|
|
|
|
+ void userDetailReturnsRiderStars() {
|
|
|
|
|
+ Fixture fixture = new Fixture();
|
|
|
|
|
+ FlashDeliveryOrder order = order(10L, "COMPLETED");
|
|
|
|
|
+ order.setRiderId(8L);
|
|
|
|
|
+ order.setRiderStars(4.5);
|
|
|
|
|
+ when(fixture.orderMapper.selectById(10L)).thenReturn(order);
|
|
|
|
|
+ when(fixture.imageMapper.selectList(any(Wrapper.class))).thenReturn(List.of());
|
|
|
|
|
+
|
|
|
|
|
+ var view = fixture.service.userDetail(7L, 10L);
|
|
|
|
|
+
|
|
|
|
|
+ assertEquals(4.5, view.getRiderStars());
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
@Test
|
|
@Test
|
|
|
void orderWithoutCreationTimeReceiverBindingIsNotClaimedLater() {
|
|
void orderWithoutCreationTimeReceiverBindingIsNotClaimedLater() {
|
|
|
Fixture fixture = new Fixture();
|
|
Fixture fixture = new Fixture();
|
|
@@ -1364,6 +1453,13 @@ class FlashDeliveryApplicationServiceTest {
|
|
|
when(fixture.userMapper.selectInfoUserByUserId(riderId)).thenReturn(rider);
|
|
when(fixture.userMapper.selectInfoUserByUserId(riderId)).thenReturn(rider);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ private com.ruoyi.app.flashdelivery.dto.FlashDeliveryRatingRequest rating(Double stars) {
|
|
|
|
|
+ com.ruoyi.app.flashdelivery.dto.FlashDeliveryRatingRequest request =
|
|
|
|
|
+ new com.ruoyi.app.flashdelivery.dto.FlashDeliveryRatingRequest();
|
|
|
|
|
+ request.setStars(stars);
|
|
|
|
|
+ return request;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
private FlashDeliveryOrder order(Long id, String status) {
|
|
private FlashDeliveryOrder order(Long id, String status) {
|
|
|
FlashDeliveryOrder order = new FlashDeliveryOrder();
|
|
FlashDeliveryOrder order = new FlashDeliveryOrder();
|
|
|
order.setId(id);
|
|
order.setId(id);
|