fix(selfop): allow controlled continuous inventory retry in test

This commit is contained in:
2026-10-14 09:29:08 +08:00
parent c0e1d42b62
commit 0aa188445b
2 changed files with 32 additions and 4 deletions
@@ -117,11 +117,39 @@ class SelfopCommandServiceTest {
verify(taskService,never()).create(any(SelfopSyncTask.class));
}
@Test void testCannotUseRetryToReviveAutomaticScheduledWork() {
configure();config.setEnvironment("test");var original=original("synthetic-account","WH-A");
configure();config.setEnvironment("test");config.setContinuousBusinessCollectionEnabled(true);var original=original("synthetic-account","WH-A");
original.setTaskType("SCHEDULED");original.setRequestKey("slot:old");when(tasks.selectOne(any())).thenReturn(original);
assertThatThrownBy(()->service.request(retry(),"42")).hasMessage("测试环境仅允许重试人工采集任务及其派生任务");
assertThatThrownBy(()->service.request(retry(),"42")).hasMessage("测试环境仅允许重试当前已启用的受控采集任务");
verify(taskService,never()).retry(anyLong(),anyString(),anyString(),anyString());
}
@Test void enabledContinuousInventoryCanResumeItsOriginalScheduledIdentity() {
configure();config.setEnvironment("test");config.setContinuousBusinessCollectionEnabled(true);
var original=continuousInventory();when(tasks.selectOne(any())).thenReturn(original);
when(taskService.retry(anyLong(),anyString(),anyString(),anyString())).thenReturn(original);
assertThat(service.request(retry(),"42")).isSameAs(original);
verify(taskService).retry(eq(original.getId()),eq(retry().requestKey()),eq("42"),eq(retry().reason()));
verify(taskService,never()).create(any(SelfopSyncTask.class));
assertThat(original.getTaskType()).isEqualTo("SCHEDULED");
assertThat(original.getRequestedBy()).isEqualTo(SelfopCollectionPolicy.CONTINUOUS_PLANNER);
assertThat(original.getPlannedAtUtc()).isEqualTo(LocalDateTime.of(2026,10,14,0,0));
}
@Test void continuousRetryStillRejectsDisabledModeAndForgedPlannerIdentity() {
configure();config.setEnvironment("test");var original=continuousInventory();
when(tasks.selectOne(any())).thenReturn(original);
assertThatThrownBy(()->service.request(retry(),"42")).hasMessage("测试环境仅允许重试当前已启用的受控采集任务");
config.setContinuousBusinessCollectionEnabled(true);original.setRequestedBy("42");
assertThatThrownBy(()->service.request(retry(),"42")).hasMessage("测试环境仅允许重试当前已启用的受控采集任务");
verify(taskService,never()).retry(anyLong(),anyString(),anyString(),anyString());
}
private SelfopSyncTask continuousInventory() {
var task=original("synthetic-account","WH-A");task.setScopeId(10L);task.setScopeHash("a".repeat(64));
task.setTaskType("SCHEDULED");task.setPlannedAtUtc(LocalDateTime.of(2026,10,14,0,0));
task.setRequestedBy(SelfopCollectionPolicy.CONTINUOUS_PLANNER);task.setBusinessRootTaskId(task.getId());
task.setRequestKey("continuous:inventory:WH-A:"+task.getPlannedAtUtc()+":"+task.getScopeHash().substring(0,12));
task.setQueryScopeJson(com.baiyue.lastleg.selfoperated.analytics.model.SelfopSupport.json(Map.of(
"sourceAccount","synthetic-account","warehouseCode","WH-A","dataFamily","INVENTORY","businessTimezone","Asia/Shanghai")));
return task;
}
@Test void validationModeRejectsFormalInventoryEntry() {
configure();config.setCollectionMode("VALIDATION");
var c=new SelfopCommandService.Command("wrong-purpose","WH-A","INVENTORY",null,null,null,null,null,"offline test");