package com.ruoyi.app.flashdelivery.task; import com.ruoyi.app.flashdelivery.service.FlashDeliveryApplicationService; import com.ruoyi.system.domain.flash.FlashDeliveryOrder; import org.junit.jupiter.api.Test; import org.springframework.stereotype.Component; import java.util.Date; import java.util.List; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.anyInt; import static org.mockito.Mockito.doThrow; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; class FlashDeliveryAvailabilityTaskTest { @Test void exposesDedicatedQuartzBeanAndOpensEveryDueScheduledOrder() { Component component = FlashDeliveryAvailabilityTask.class.getAnnotation(Component.class); assertEquals("flashDeliveryAvailabilityTask", component.value()); FlashDeliveryApplicationService service = mock(FlashDeliveryApplicationService.class); FlashDeliveryOrder first = new FlashDeliveryOrder(); first.setId(1L); FlashDeliveryOrder second = new FlashDeliveryOrder(); second.setId(2L); when(service.scheduledAvailabilityCandidates(any(Date.class), anyInt())) .thenReturn(List.of(first, second)); new FlashDeliveryAvailabilityTask(service).openScheduledOrders(); verify(service).openScheduledOrderForRiders(org.mockito.ArgumentMatchers.eq(1L), any(Date.class)); verify(service).openScheduledOrderForRiders(org.mockito.ArgumentMatchers.eq(2L), any(Date.class)); } @Test void oneFailedScheduledOrderDoesNotStopRemainingOrders() { FlashDeliveryApplicationService service = mock(FlashDeliveryApplicationService.class); FlashDeliveryOrder first = new FlashDeliveryOrder(); first.setId(1L); FlashDeliveryOrder second = new FlashDeliveryOrder(); second.setId(2L); when(service.scheduledAvailabilityCandidates(any(Date.class), anyInt())) .thenReturn(List.of(first, second)); doThrow(new IllegalStateException("one bad row")) .when(service).openScheduledOrderForRiders(org.mockito.ArgumentMatchers.eq(1L), any(Date.class)); ch.qos.logback.classic.Logger logger = (ch.qos.logback.classic.Logger) org.slf4j.LoggerFactory.getLogger(FlashDeliveryAvailabilityTask.class); ch.qos.logback.classic.Level previous = logger.getLevel(); logger.setLevel(ch.qos.logback.classic.Level.OFF); try { new FlashDeliveryAvailabilityTask(service).openScheduledOrders(); } finally { logger.setLevel(previous); } verify(service).openScheduledOrderForRiders(org.mockito.ArgumentMatchers.eq(2L), any(Date.class)); } }