fix(selfop): allow controlled continuous inventory retry in test
This commit is contained in:
+2
-2
@@ -56,7 +56,7 @@ public class SelfopCommandService {
|
|||||||
require("WAREHOUSE_SYNC".equals(original.getTaskRole())&&c.warehouseCode().equals(original.getWarehouseCode()),"SELFOP_TASK_SCOPE_MISMATCH");
|
require("WAREHOUSE_SYNC".equals(original.getTaskRole())&&c.warehouseCode().equals(original.getWarehouseCode()),"SELFOP_TASK_SCOPE_MISMATCH");
|
||||||
require(!"WAITING_SOURCE".equals(original.getStatus()),"SELFOP_RETRY_WAITING_SOURCE");
|
require(!"WAITING_SOURCE".equals(original.getStatus()),"SELFOP_RETRY_WAITING_SOURCE");
|
||||||
require("BUSINESS".equals(original.getExecutionPurpose())&&"BUSINESS".equals(config.getCollectionMode()),"SELFOP_BUSINESS_PURPOSE_REQUIRED");
|
require("BUSINESS".equals(original.getExecutionPurpose())&&"BUSINESS".equals(config.getCollectionMode()),"SELFOP_BUSINESS_PURPOSE_REQUIRED");
|
||||||
require(!"test".equals(config.getEnvironment())||SelfopCollectionPolicy.controlledBusinessTask(original,tasks::selectById),"SELFOP_TEST_MANUAL_TASK_REQUIRED");
|
require(!"test".equals(config.getEnvironment())||SelfopCollectionPolicy.controlledBusinessTask(original,tasks::selectById,SelfopCollectionPolicy.continuousBusiness(config)),"SELFOP_TEST_MANUAL_TASK_REQUIRED");
|
||||||
return taskService.retry(original.getId(),c.requestKey(),operator,c.reason());}
|
return taskService.retry(original.getId(),c.requestKey(),operator,c.reason());}
|
||||||
String purpose=SelfopCollectionPolicy.configuredPurpose(config);
|
String purpose=SelfopCollectionPolicy.configuredPurpose(config);
|
||||||
require(("VALIDATION".equals(purpose))==("VALIDATION".equals(c.action())),"SELFOP_VALIDATION_ENTRY_REQUIRED");
|
require(("VALIDATION".equals(purpose))==("VALIDATION".equals(c.action())),"SELFOP_VALIDATION_ENTRY_REQUIRED");
|
||||||
@@ -123,6 +123,6 @@ public class SelfopCommandService {
|
|||||||
Map.entry("SELFOP_TASK_ALREADY_SUCCEEDED","任务已成功完成,无需重试"),
|
Map.entry("SELFOP_TASK_ALREADY_SUCCEEDED","任务已成功完成,无需重试"),
|
||||||
Map.entry("SELFOP_COLLECTION_MODE_REJECTED","当前采集模式不允许此操作"),
|
Map.entry("SELFOP_COLLECTION_MODE_REJECTED","当前采集模式不允许此操作"),
|
||||||
Map.entry("SELFOP_BUSINESS_ENVIRONMENT_REJECTED","当前环境不允许正式采集"),
|
Map.entry("SELFOP_BUSINESS_ENVIRONMENT_REJECTED","当前环境不允许正式采集"),
|
||||||
Map.entry("SELFOP_TEST_MANUAL_TASK_REQUIRED","测试环境仅允许重试人工采集任务及其派生任务"),
|
Map.entry("SELFOP_TEST_MANUAL_TASK_REQUIRED","测试环境仅允许重试当前已启用的受控采集任务"),
|
||||||
Map.entry("SELFOP_BUDGET_INVALID","采集预算配置无效,请联系管理员"));
|
Map.entry("SELFOP_BUDGET_INVALID","采集预算配置无效,请联系管理员"));
|
||||||
}
|
}
|
||||||
|
|||||||
+30
-2
@@ -117,11 +117,39 @@ class SelfopCommandServiceTest {
|
|||||||
verify(taskService,never()).create(any(SelfopSyncTask.class));
|
verify(taskService,never()).create(any(SelfopSyncTask.class));
|
||||||
}
|
}
|
||||||
@Test void testCannotUseRetryToReviveAutomaticScheduledWork() {
|
@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);
|
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());
|
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() {
|
@Test void validationModeRejectsFormalInventoryEntry() {
|
||||||
configure();config.setCollectionMode("VALIDATION");
|
configure();config.setCollectionMode("VALIDATION");
|
||||||
var c=new SelfopCommandService.Command("wrong-purpose","WH-A","INVENTORY",null,null,null,null,null,"offline test");
|
var c=new SelfopCommandService.Command("wrong-purpose","WH-A","INVENTORY",null,null,null,null,null,"offline test");
|
||||||
|
|||||||
Reference in New Issue
Block a user