package com.tourguide.modules.order.service; import com.tourguide.config.properties.UniPushProperties; import com.tourguide.modules.operation.mapper.OperationScenicSpotMapper; import com.tourguide.modules.order.mapper.TourOrderMapper; import com.tourguide.modules.system.service.GuideNotificationService; import com.tourguide.modules.user.entity.GuideReceivingSession; import com.tourguide.modules.user.mapper.GuideReceivingSessionMapper; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import java.util.Collections; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; class OrderLifecycleSchedulerTest { private TourOrderMapper orderMapper; private GuideReceivingSessionMapper sessionMapper; private GuideSessionTransitionService sessionTransitionService; private OrderLifecycleScheduler scheduler; @BeforeEach void setUp() { orderMapper = mock(TourOrderMapper.class); OperationScenicSpotMapper scenicMapper = mock(OperationScenicSpotMapper.class); GuideOrderMatchingService matchingService = mock(GuideOrderMatchingService.class); sessionMapper = mock(GuideReceivingSessionMapper.class); sessionTransitionService = mock(GuideSessionTransitionService.class); GuideNotificationService notificationService = mock(GuideNotificationService.class); UniPushProperties uniPushProperties = mock(UniPushProperties.class); scheduler = new OrderLifecycleScheduler(orderMapper, scenicMapper, matchingService, sessionMapper, sessionTransitionService, notificationService, uniPushProperties); } @Test void shouldCompleteServiceSessionWhenConfiguredLectureDurationExpires() { GuideReceivingSession session = new GuideReceivingSession(); session.setId(18L); session.setGuideId(8L); session.setStatus("IN_SERVICE"); when(orderMapper.selectDueServiceSessionIds(any(), eq(100))) .thenReturn(Collections.singletonList(18L)); when(sessionMapper.selectById(18L)).thenReturn(session); scheduler.completeExpiredServiceSessions(); verify(orderMapper).selectDueServiceSessionIds(any(), eq(100)); verify(sessionTransitionService).completeSession(eq(session), any()); } @Test void shouldIgnoreSessionThatIsNoLongerInService() { GuideReceivingSession session = new GuideReceivingSession(); session.setId(18L); session.setStatus("STOPPED"); when(orderMapper.selectDueServiceSessionIds(any(), eq(100))) .thenReturn(Collections.singletonList(18L)); when(sessionMapper.selectById(18L)).thenReturn(session); scheduler.completeExpiredServiceSessions(); verify(sessionTransitionService, org.mockito.Mockito.never()).completeSession(any(), any()); } }