package com.zy.core.thread.impl.station; import com.alibaba.fastjson.JSON; import com.core.common.SpringUtils; import com.zy.asrs.entity.DeviceConfig; import com.zy.common.utils.RedisUtil; import com.zy.core.enums.RedisKeyType; import com.zy.core.model.CommandResponse; import com.zy.core.model.command.StationCommand; import com.zy.core.move.StationMoveCoordinator; import com.zy.core.move.StationMoveSessionRegistry; import com.zy.core.move.StationMoveSession; import org.junit.jupiter.api.Test; import org.springframework.context.ApplicationContext; import org.springframework.test.util.ReflectionTestUtils; import java.util.function.Function; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.never; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; class StationSegmentExecutorTest { @Test void sendSegmentWithRetry_skipsWhenRouteIsCancelPending() { ApplicationContext applicationContext = mock(ApplicationContext.class); StationMoveCoordinator coordinator = new StationMoveCoordinator(); StationMoveSessionRegistry sessionRegistry = new StationMoveSessionRegistry(); RedisUtil redisUtil = mock(RedisUtil.class); @SuppressWarnings("unchecked") Function commandSender = mock(Function.class); ReflectionTestUtils.setField(coordinator, "sessionRegistry", sessionRegistry); ReflectionTestUtils.setField(coordinator, "redisUtil", redisUtil); ReflectionTestUtils.setField(sessionRegistry, "redisUtil", redisUtil); when(applicationContext.getBean(StationMoveCoordinator.class)).thenReturn(coordinator); SpringUtils.init(applicationContext); StationSegmentExecutor executor = new StationSegmentExecutor(new DeviceConfig(), redisUtil, commandSender); StationCommand command = new StationCommand(); command.setTaskNo(10492); command.setStationId(186); command.setTargetStaNo(124); command.setRouteVersion(23); StationMoveSession session = new StationMoveSession(); session.setTaskNo(10492); session.setRouteVersion(23); session.setStatus(StationMoveSession.STATUS_CANCEL_PENDING); when(redisUtil.get(RedisKeyType.STATION_MOVE_SESSION_.key + 10492)) .thenReturn(JSON.toJSONString(session)); when(redisUtil.get(RedisKeyType.DEVICE_STATION_MOVE_RESET.key + 10492)).thenReturn(null); when(commandSender.apply(any())).thenReturn(new CommandResponse(true)); Boolean result = ReflectionTestUtils.invokeMethod( executor, "sendSegmentWithRetry", command, null, null, 186 ); assertFalse(Boolean.TRUE.equals(result)); verify(commandSender, never()).apply(any()); } }