package com.zy.asrs.controller;
|
|
import com.zy.asrs.entity.WrkMast;
|
import com.zy.asrs.mapper.WrkMastLogMapper;
|
import com.zy.asrs.mapper.WrkMastMapper;
|
import com.zy.asrs.service.WrkMastService;
|
import com.zy.asrs.service.impl.WrkMastServiceImpl;
|
import org.junit.jupiter.api.BeforeEach;
|
import org.junit.jupiter.api.Test;
|
import org.junit.jupiter.api.extension.ExtendWith;
|
import org.mockito.Mock;
|
import org.mockito.junit.jupiter.MockitoExtension;
|
import org.springframework.test.util.ReflectionTestUtils;
|
|
import java.util.Arrays;
|
import java.util.Date;
|
|
import static org.junit.jupiter.api.Assertions.assertEquals;
|
import static org.mockito.Mockito.verifyNoInteractions;
|
import static org.mockito.Mockito.when;
|
|
@ExtendWith(MockitoExtension.class)
|
class OpenControllerQueryTaskMetricsTest {
|
|
private static final long BASE_TIME = 1700000000000L;
|
|
@Mock
|
private WrkMastService wrkMastService;
|
@Mock
|
private WrkMastMapper wrkMastMapper;
|
@Mock
|
private WrkMastLogMapper wrkMastLogMapper;
|
|
private OpenController controller;
|
private WrkMastServiceImpl wrkMastServiceImpl;
|
|
@BeforeEach
|
void setUp() {
|
controller = new OpenController();
|
ReflectionTestUtils.setField(controller, "wrkMastService", wrkMastService);
|
|
wrkMastServiceImpl = new WrkMastServiceImpl();
|
ReflectionTestUtils.setField(wrkMastServiceImpl, "baseMapper", wrkMastMapper);
|
ReflectionTestUtils.setField(wrkMastServiceImpl, "wrkMastLogMapper", wrkMastLogMapper);
|
}
|
|
@Test
|
void inboundFirstPalletCostTimeIsZero() {
|
WrkMast wrkMast = inboundTask("TRAIN-1", 0);
|
when(wrkMastService.firstInboundCreateTimeByTrainNo("TRAIN-1")).thenReturn(atMinute(0));
|
|
assertEquals(0L, controller.resolveCostTime(wrkMast, atMinute(99)));
|
}
|
|
@Test
|
void inboundLaterPalletCostTimeUsesFirstTrainPalletCreateTime() {
|
WrkMast wrkMast = inboundTask("TRAIN-1", 17);
|
when(wrkMastService.firstInboundCreateTimeByTrainNo("TRAIN-1")).thenReturn(atMinute(0));
|
|
assertEquals(17L, controller.resolveCostTime(wrkMast, atMinute(99)));
|
}
|
|
@Test
|
void inboundSuppUsesFinishedPalletCountByTrainNo() {
|
WrkMast wrkMast = inboundTask("TRAIN-1", 17);
|
when(wrkMastService.finishedInboundPalletCountByTrainNo("TRAIN-1")).thenReturn(3);
|
|
assertEquals(3, controller.resolveInboundSupp(wrkMast));
|
}
|
|
@Test
|
void inboundMetricsReturnZeroWhenTrainNoIsEmpty() {
|
WrkMast wrkMast = inboundTask(null, 17);
|
|
assertEquals(0L, controller.resolveCostTime(wrkMast, atMinute(99)));
|
assertEquals(0, controller.resolveInboundSupp(wrkMast));
|
verifyNoInteractions(wrkMastService);
|
}
|
|
@Test
|
void outboundCostTimeUsesCurrentTimeMinusTaskCreateTime() {
|
WrkMast wrkMast = outboundTask(0);
|
|
assertEquals(12L, controller.resolveCostTime(wrkMast, atMinute(12)));
|
}
|
|
@Test
|
void costTimeReturnsZeroWhenCreateTimeIsMissingOrClockMovesBackward() {
|
WrkMast missingCreateTime = new WrkMast();
|
missingCreateTime.setIoType(101);
|
WrkMast futureCreateTime = outboundTask(20);
|
|
assertEquals(0L, controller.resolveCostTime(missingCreateTime, atMinute(12)));
|
assertEquals(0L, controller.resolveCostTime(futureCreateTime, atMinute(12)));
|
}
|
|
@Test
|
void serviceUsesEarliestInboundCreateTimeAcrossMainAndLog() {
|
when(wrkMastMapper.selectFirstInboundCreateTimeByTrainNo("TRAIN-1")).thenReturn(atMinute(10));
|
when(wrkMastLogMapper.selectFirstInboundCreateTimeByTrainNo("TRAIN-1")).thenReturn(atMinute(3));
|
|
assertEquals(atMinute(3), wrkMastServiceImpl.firstInboundCreateTimeByTrainNo("TRAIN-1"));
|
}
|
|
@Test
|
void serviceDeduplicatesFinishedInboundPalletsAcrossMainAndLog() {
|
when(wrkMastMapper.listFinishedInboundWrkNosByTrainNo("TRAIN-1")).thenReturn(Arrays.asList(1001, 1002));
|
when(wrkMastLogMapper.listFinishedInboundWrkNosByTrainNo("TRAIN-1")).thenReturn(Arrays.asList(1002, 1003, null, -1));
|
|
assertEquals(3, wrkMastServiceImpl.finishedInboundPalletCountByTrainNo("TRAIN-1"));
|
}
|
|
private static WrkMast inboundTask(String trainNo, int createMinute) {
|
WrkMast wrkMast = new WrkMast();
|
wrkMast.setIoType(1);
|
wrkMast.setTrainNo(trainNo);
|
wrkMast.setAppeTime(atMinute(createMinute));
|
return wrkMast;
|
}
|
|
private static WrkMast outboundTask(int createMinute) {
|
WrkMast wrkMast = new WrkMast();
|
wrkMast.setIoType(101);
|
wrkMast.setAppeTime(atMinute(createMinute));
|
return wrkMast;
|
}
|
|
private static Date atMinute(int minute) {
|
return new Date(BASE_TIME + minute * 60L * 1000L);
|
}
|
}
|