package com.zy.asrs.task; import com.zy.asrs.entity.WrkMast; import com.zy.common.properties.SlaveProperties; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.springframework.test.util.ReflectionTestUtils; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import static org.junit.jupiter.api.Assertions.assertEquals; class WorkMastSchedulerTest { private WorkMastScheduler scheduler; @BeforeEach void setUp() { scheduler = new WorkMastScheduler(); SlaveProperties slaveProperties = new SlaveProperties(); slaveProperties.setDoubleDeep(true); slaveProperties.setDoubleLocs(Arrays.asList(1, 4, 5, 8, 9, 12, 13, 16, 17, 20)); slaveProperties.setDoubleLocsLeft(Arrays.asList(1, 5, 9, 13, 17)); slaveProperties.setDoubleLocsRight(Arrays.asList(4, 8, 12, 16, 20)); ReflectionTestUtils.setField(scheduler, "slaveProperties", slaveProperties); } @Test void selectOutboundBatchMasts_unorderedDoubleExtension_shouldPreferShallowThenDeep() { List candidates = new ArrayList<>(); for (int i = 0; i < 20; i++) { candidates.add(outboundMast(1000 + i, 19, 0, "0100101")); } for (int i = 0; i < 5; i++) { candidates.add(outboundMast(2000 + i, 19, 0, "0200101")); } List result = selectOutboundBatchMasts(candidates); assertEquals(25, result.size()); for (int i = 0; i < 5; i++) { assertEquals("0200101", result.get(i).getSourceLocNo()); } for (int i = 5; i < 20; i++) { assertEquals("0100101", result.get(i).getSourceLocNo()); } } @Test void selectOutboundBatchMasts_orderedDoubleExtension_shouldKeepOutboundSeqOrder() { List candidates = Arrays.asList( outboundMast(1002, 19, 2, "0200101"), outboundMast(1001, 19, 1, "0100101"), outboundMast(1003, 19, 3, "0200101") ); List result = selectOutboundBatchMasts(candidates); assertEquals(Integer.valueOf(1), result.get(0).getPltType()); assertEquals(Integer.valueOf(2), result.get(1).getPltType()); assertEquals(Integer.valueOf(3), result.get(2).getPltType()); } @SuppressWarnings("unchecked") private List selectOutboundBatchMasts(List candidates) { return ReflectionTestUtils.invokeMethod(scheduler, "selectOutboundBatchMasts", candidates); } private static WrkMast outboundMast(Integer wrkNo, Integer crnNo, Integer outboundSeq, String sourceLocNo) { WrkMast mast = new WrkMast(); mast.setWrkNo(wrkNo); mast.setIoType(101); mast.setCrnNo(crnNo); mast.setPltType(outboundSeq); mast.setSourceLocNo(sourceLocNo); return mast; } }