feat: observe inbound allocation without changing legacy
This commit is contained in:
@@ -0,0 +1,95 @@
|
||||
package com.ruoyi.api.service.impl;
|
||||
|
||||
import com.ruoyi.algorithm.shadow.InboundShadowObservation;
|
||||
import com.ruoyi.algorithm.shadow.ShadowObservationGateway;
|
||||
import com.ruoyi.api.domain.RequestEnter;
|
||||
import com.ruoyi.common.core.domain.AjaxResult;
|
||||
import com.ruoyi.job.mydojob.domain.MydoJob;
|
||||
import com.ruoyi.job.mydojob.mapper.MydoJobMapper;
|
||||
import org.junit.jupiter.api.BeforeEach;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.junit.jupiter.api.extension.ExtendWith;
|
||||
import org.mockito.InOrder;
|
||||
import org.mockito.InjectMocks;
|
||||
import org.mockito.Mock;
|
||||
import org.mockito.junit.jupiter.MockitoExtension;
|
||||
|
||||
import java.util.HashMap;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
import static org.mockito.ArgumentMatchers.any;
|
||||
import static org.mockito.Mockito.doAnswer;
|
||||
import static org.mockito.Mockito.inOrder;
|
||||
import static org.mockito.Mockito.times;
|
||||
import static org.mockito.Mockito.verify;
|
||||
import static org.mockito.Mockito.when;
|
||||
|
||||
@ExtendWith(MockitoExtension.class)
|
||||
class ToWmsServiceImplShadowTest {
|
||||
@Mock
|
||||
private MydoJobMapper mydoJobMapper;
|
||||
@Mock
|
||||
private ShadowObservationGateway shadowObservationGateway;
|
||||
@InjectMocks
|
||||
private ToWmsServiceImpl service;
|
||||
|
||||
private RequestEnter request;
|
||||
private MydoJob beforeLegacy;
|
||||
private MydoJob legacyResult;
|
||||
|
||||
@BeforeEach
|
||||
void setUp() {
|
||||
request = new RequestEnter();
|
||||
request.setTaskNo("TASK-1");
|
||||
request.setDeviceCode("ENTRY-1");
|
||||
beforeLegacy = inboundJob("TRAY-1", null);
|
||||
legacyResult = inboundJob("TRAY-1", "SPACE-LEGACY");
|
||||
when(mydoJobMapper.selectInJobByTaskNo("TASK-1")).thenReturn(beforeLegacy, legacyResult);
|
||||
doAnswer(invocation -> {
|
||||
@SuppressWarnings("unchecked")
|
||||
HashMap<String, Object> parameters = invocation.getArgument(0);
|
||||
parameters.put("v_result", "10");
|
||||
parameters.put("v_resultmsg", "ok");
|
||||
return null;
|
||||
}).when(mydoJobMapper).allotInJobSpace(any());
|
||||
}
|
||||
|
||||
@Test
|
||||
void observesBeforeLegacyAndReturnsTheReloadedLegacyJob() {
|
||||
InboundShadowObservation observation = new InboundShadowObservation(
|
||||
true, "W01", "JOB-1", "READY", "SPACE-SHADOW", "proposal");
|
||||
when(shadowObservationGateway.planInbound("TASK-1", "TRAY-1")).thenReturn(observation);
|
||||
|
||||
AjaxResult result = service.requestEnterByTaskNo(request);
|
||||
|
||||
assertThat(result.get(AjaxResult.DATA_TAG)).isSameAs(legacyResult);
|
||||
InOrder order = inOrder(mydoJobMapper, shadowObservationGateway);
|
||||
order.verify(mydoJobMapper).selectInJobByTaskNo("TASK-1");
|
||||
order.verify(shadowObservationGateway).planInbound("TASK-1", "TRAY-1");
|
||||
order.verify(mydoJobMapper).allotInJobSpace(any());
|
||||
order.verify(mydoJobMapper).selectInJobByTaskNo("TASK-1");
|
||||
order.verify(shadowObservationGateway)
|
||||
.compareInbound(observation, "10", "SPACE-LEGACY");
|
||||
verify(mydoJobMapper, times(1)).allotInJobSpace(any());
|
||||
}
|
||||
|
||||
@Test
|
||||
void shadowExceptionCannotSkipOrReplaceLegacyAllocation() {
|
||||
when(shadowObservationGateway.planInbound("TASK-1", "TRAY-1"))
|
||||
.thenThrow(new IllegalStateException("shadow unavailable"));
|
||||
|
||||
AjaxResult result = service.requestEnterByTaskNo(request);
|
||||
|
||||
assertThat(result.get(AjaxResult.DATA_TAG)).isSameAs(legacyResult);
|
||||
verify(shadowObservationGateway).planInbound("TASK-1", "TRAY-1");
|
||||
verify(mydoJobMapper, times(1)).allotInJobSpace(any());
|
||||
}
|
||||
|
||||
private MydoJob inboundJob(String trayNo, String cargoSpaceId) {
|
||||
MydoJob job = new MydoJob();
|
||||
job.setInOrOut("10");
|
||||
job.setTrayCode(trayNo);
|
||||
job.setCargoSpaceId(cargoSpaceId);
|
||||
return job;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user