吸收数字员工服务技能记忆审计收口
This commit is contained in:
@@ -193,6 +193,18 @@ public class DigitalEmployeeAdminWorkbenchRowDto {
|
||||
private Boolean autoRecoveryDisabled;
|
||||
@JsonProperty("recovery_action_request_id")
|
||||
private String recoveryActionRequestId;
|
||||
@JsonProperty("start_request_id")
|
||||
private String startRequestId;
|
||||
@JsonProperty("stop_request_id")
|
||||
private String stopRequestId;
|
||||
@JsonProperty("lease_takeover_request_id")
|
||||
private String leaseTakeoverRequestId;
|
||||
@JsonProperty("auto_recovery_request_id")
|
||||
private String autoRecoveryRequestId;
|
||||
@JsonProperty("start_service_disabled")
|
||||
private Boolean startServiceDisabled;
|
||||
@JsonProperty("stop_service_disabled")
|
||||
private Boolean stopServiceDisabled;
|
||||
@JsonProperty("memory_id")
|
||||
private String memoryId;
|
||||
@JsonProperty("memory_key")
|
||||
@@ -237,6 +249,8 @@ public class DigitalEmployeeAdminWorkbenchRowDto {
|
||||
private String skillUpgradeRequestId;
|
||||
@JsonProperty("permission_policy_id")
|
||||
private String permissionPolicyId;
|
||||
@JsonProperty("permission_edit_request_id")
|
||||
private String permissionEditRequestId;
|
||||
@JsonProperty("install_action_disabled")
|
||||
private Boolean installActionDisabled;
|
||||
@JsonProperty("upgrade_action_disabled")
|
||||
@@ -272,6 +286,14 @@ public class DigitalEmployeeAdminWorkbenchRowDto {
|
||||
private String repairReason;
|
||||
@JsonProperty("safe_repair_disabled")
|
||||
private Boolean safeRepairDisabled;
|
||||
@JsonProperty("billing_actual_disabled")
|
||||
private Boolean billingActualDisabled;
|
||||
@JsonProperty("sandbox_archive_file_disabled")
|
||||
private Boolean sandboxArchiveFileDisabled;
|
||||
@JsonProperty("auto_repair_execution_disabled")
|
||||
private Boolean autoRepairExecutionDisabled;
|
||||
@JsonProperty("repair_approval_required")
|
||||
private Boolean repairApprovalRequired;
|
||||
@JsonProperty("recommended_action")
|
||||
private String recommendedAction;
|
||||
@JsonProperty("policy_kind")
|
||||
@@ -286,6 +308,10 @@ public class DigitalEmployeeAdminWorkbenchRowDto {
|
||||
private String policyEditReason;
|
||||
@JsonProperty("merge_request_id")
|
||||
private String mergeRequestId;
|
||||
@JsonProperty("memory_merge_request_id")
|
||||
private String memoryMergeRequestId;
|
||||
@JsonProperty("remote_memory_policy_request_id")
|
||||
private String remoteMemoryPolicyRequestId;
|
||||
@JsonProperty("merge_recommendation")
|
||||
private String mergeRecommendation;
|
||||
@JsonProperty("remote_policy_edit_disabled")
|
||||
|
||||
@@ -73,9 +73,10 @@ public class DigitalEmployeeSyncApplicationServiceImpl implements DigitalEmploye
|
||||
"artifact:mark_keep", "artifact:mark_expire", "artifact:mark_reviewed", "artifact:record_cleanup_request",
|
||||
"notification:record_send_request", "notification:record_send_result",
|
||||
"daily_report:mark_delivered", "daily_report:mark_confirmed", "daily_report:request_approval", "daily_report:record_approval_decision", "daily_report:record_send_request", "daily_report:record_send_result",
|
||||
"memory:archive_memory", "memory:restore_memory", "memory:mark_reviewed",
|
||||
"memory_policy:pull_policy", "memory_policy:mark_reviewed", "memory_policy:dismiss",
|
||||
"skill:mark_reviewed", "skill:dismiss",
|
||||
"service:record_start_request", "service:record_stop_request",
|
||||
"memory:archive_memory", "memory:restore_memory", "memory:mark_reviewed", "memory:request_memory_merge_review",
|
||||
"memory_policy:pull_policy", "memory_policy:mark_reviewed", "memory_policy:dismiss", "memory_policy:request_memory_policy_pull",
|
||||
"skill:mark_reviewed", "skill:dismiss", "skill:record_install_request", "skill:record_upgrade_request", "skill:request_permission_review",
|
||||
"policy_snapshot:pull_policy", "policy_snapshot:mark_reviewed", "policy_snapshot:dismiss", "policy_snapshot:request_policy_edit", "policy_snapshot:request_policy_merge_review",
|
||||
"governance_policy:pull_policy", "governance_policy:mark_reviewed", "governance_policy:dismiss", "governance_policy:request_policy_edit", "governance_policy:request_policy_merge_review",
|
||||
"scheduler:retry_scheduler_check", "scheduler:mark_reviewed", "scheduler:dismiss",
|
||||
@@ -83,8 +84,8 @@ public class DigitalEmployeeSyncApplicationServiceImpl implements DigitalEmploye
|
||||
"plan:mark_reviewed", "plan:dismiss", "plan:request_revision_review", "plan:record_escalation",
|
||||
"revision:mark_reviewed", "revision:dismiss", "revision:request_revision_review",
|
||||
"route_decision:request_policy_edit", "route_decision:request_policy_merge_review",
|
||||
"diagnostic:mark_reviewed", "diagnostic:dismiss", "diagnostic:retry_check", "diagnostic:record_repair_intent",
|
||||
"audit:mark_reviewed", "audit:dismiss",
|
||||
"diagnostic:mark_reviewed", "diagnostic:dismiss", "diagnostic:retry_check", "diagnostic:record_repair_intent", "diagnostic:request_repair_approval",
|
||||
"audit:mark_reviewed", "audit:dismiss", "audit:record_repair_intent", "audit:request_repair_approval",
|
||||
"event:mark_reviewed", "event:dismiss"
|
||||
);
|
||||
|
||||
@@ -1044,6 +1045,14 @@ public class DigitalEmployeeSyncApplicationServiceImpl implements DigitalEmploye
|
||||
case "stop_service" -> List.of("stop_service_disabled");
|
||||
case "lease_takeover" -> List.of("lease_takeover_disabled");
|
||||
case "execute_auto_recovery" -> List.of("auto_recovery_execution_disabled");
|
||||
case "install_skill" -> List.of("install_action_disabled");
|
||||
case "upgrade_skill" -> List.of("upgrade_action_disabled");
|
||||
case "edit_permission_scope" -> List.of("permission_edit_disabled");
|
||||
case "merge_memory_auto" -> List.of("merge_action_disabled");
|
||||
case "push_remote_memory_policy" -> List.of("remote_memory_policy_disabled");
|
||||
case "real_billing_charge" -> List.of("billing_actual_disabled");
|
||||
case "archive_sandbox_file" -> List.of("sandbox_archive_file_disabled");
|
||||
case "execute_auto_repair" -> List.of("auto_repair_execution_disabled");
|
||||
case "delete_file_repair" -> List.of("delete_file_repair_disabled");
|
||||
case "remote_policy_edit" -> List.of("remote_policy_edit_disabled");
|
||||
case "activate_plan", "cancel_run", "cancel_task", "accept_remote_approval_batch" -> List.of("high_risk_governance_action_disabled");
|
||||
@@ -1181,6 +1190,12 @@ public class DigitalEmployeeSyncApplicationServiceImpl implements DigitalEmploye
|
||||
.leaseTakeoverDisabled(nullableBooleanValue(firstPresent(businessView.get("lease_takeover_disabled"), businessView.get("leaseTakeoverDisabled"), payload.get("lease_takeover_disabled"), payload.get("leaseTakeoverDisabled"))))
|
||||
.autoRecoveryDisabled(nullableBooleanValue(firstPresent(businessView.get("auto_recovery_disabled"), businessView.get("autoRecoveryDisabled"), payload.get("auto_recovery_disabled"), payload.get("autoRecoveryDisabled"))))
|
||||
.recoveryActionRequestId(firstString(businessView.get("recovery_action_request_id"), businessView.get("recoveryActionRequestId"), payload.get("recovery_action_request_id"), payload.get("recoveryActionRequestId")))
|
||||
.startRequestId(firstString(businessView.get("start_request_id"), businessView.get("startRequestId"), payload.get("start_request_id"), payload.get("startRequestId")))
|
||||
.stopRequestId(firstString(businessView.get("stop_request_id"), businessView.get("stopRequestId"), payload.get("stop_request_id"), payload.get("stopRequestId")))
|
||||
.leaseTakeoverRequestId(firstString(businessView.get("lease_takeover_request_id"), businessView.get("leaseTakeoverRequestId"), payload.get("lease_takeover_request_id"), payload.get("leaseTakeoverRequestId")))
|
||||
.autoRecoveryRequestId(firstString(businessView.get("auto_recovery_request_id"), businessView.get("autoRecoveryRequestId"), payload.get("auto_recovery_request_id"), payload.get("autoRecoveryRequestId")))
|
||||
.startServiceDisabled(nullableBooleanValue(firstPresent(businessView.get("start_service_disabled"), businessView.get("startServiceDisabled"), businessView.get("service_start_disabled"), businessView.get("serviceStartDisabled"), payload.get("start_service_disabled"), payload.get("startServiceDisabled"), payload.get("service_start_disabled"), payload.get("serviceStartDisabled"))))
|
||||
.stopServiceDisabled(nullableBooleanValue(firstPresent(businessView.get("stop_service_disabled"), businessView.get("stopServiceDisabled"), businessView.get("service_stop_disabled"), businessView.get("serviceStopDisabled"), payload.get("stop_service_disabled"), payload.get("stopServiceDisabled"), payload.get("service_stop_disabled"), payload.get("serviceStopDisabled"))))
|
||||
.memoryId(firstString(businessView.get("memory_id"), businessView.get("memoryId"), payload.get("memory_id"), payload.get("memoryId"), "memory".equals(record.getEntityType()) ? record.getEntityId() : null))
|
||||
.memoryKey(firstString(businessView.get("memory_key"), businessView.get("memoryKey"), businessView.get("key"), payload.get("memory_key"), payload.get("memoryKey"), payload.get("key")))
|
||||
.governanceStatus(firstString(businessView.get("governance_status"), businessView.get("governanceStatus"), payload.get("governance_status"), payload.get("governanceStatus")))
|
||||
@@ -1192,6 +1207,8 @@ public class DigitalEmployeeSyncApplicationServiceImpl implements DigitalEmploye
|
||||
.memoryPolicyId(firstString(businessView.get("memory_policy_id"), businessView.get("memoryPolicyId"), payload.get("memory_policy_id"), payload.get("memoryPolicyId")))
|
||||
.memoryPolicyStatus(firstString(businessView.get("memory_policy_status"), businessView.get("memoryPolicyStatus"), payload.get("memory_policy_status"), payload.get("memoryPolicyStatus")))
|
||||
.mergePolicyId(firstString(businessView.get("merge_policy_id"), businessView.get("mergePolicyId"), payload.get("merge_policy_id"), payload.get("mergePolicyId")))
|
||||
.memoryMergeRequestId(firstString(businessView.get("memory_merge_request_id"), businessView.get("memoryMergeRequestId"), payload.get("memory_merge_request_id"), payload.get("memoryMergeRequestId")))
|
||||
.remoteMemoryPolicyRequestId(firstString(businessView.get("remote_memory_policy_request_id"), businessView.get("remoteMemoryPolicyRequestId"), payload.get("remote_memory_policy_request_id"), payload.get("remoteMemoryPolicyRequestId")))
|
||||
.mergeActionDisabled(nullableBooleanValue(firstPresent(businessView.get("merge_action_disabled"), businessView.get("mergeActionDisabled"), payload.get("merge_action_disabled"), payload.get("mergeActionDisabled"))))
|
||||
.remoteMemoryPolicyDisabled(nullableBooleanValue(firstPresent(businessView.get("remote_memory_policy_disabled"), businessView.get("remoteMemoryPolicyDisabled"), payload.get("remote_memory_policy_disabled"), payload.get("remoteMemoryPolicyDisabled"))))
|
||||
.skillId(firstString(businessView.get("skill_id"), businessView.get("skillId"), payload.get("skill_id"), payload.get("skillId")))
|
||||
@@ -1203,6 +1220,7 @@ public class DigitalEmployeeSyncApplicationServiceImpl implements DigitalEmploye
|
||||
.skillInstallRequestId(firstString(businessView.get("skill_install_request_id"), businessView.get("skillInstallRequestId"), payload.get("skill_install_request_id"), payload.get("skillInstallRequestId")))
|
||||
.skillUpgradeRequestId(firstString(businessView.get("skill_upgrade_request_id"), businessView.get("skillUpgradeRequestId"), payload.get("skill_upgrade_request_id"), payload.get("skillUpgradeRequestId")))
|
||||
.permissionPolicyId(firstString(businessView.get("permission_policy_id"), businessView.get("permissionPolicyId"), payload.get("permission_policy_id"), payload.get("permissionPolicyId")))
|
||||
.permissionEditRequestId(firstString(businessView.get("permission_edit_request_id"), businessView.get("permissionEditRequestId"), payload.get("permission_edit_request_id"), payload.get("permissionEditRequestId")))
|
||||
.installActionDisabled(nullableBooleanValue(firstPresent(businessView.get("install_action_disabled"), businessView.get("installActionDisabled"), payload.get("install_action_disabled"), payload.get("installActionDisabled"))))
|
||||
.upgradeActionDisabled(nullableBooleanValue(firstPresent(businessView.get("upgrade_action_disabled"), businessView.get("upgradeActionDisabled"), payload.get("upgrade_action_disabled"), payload.get("upgradeActionDisabled"))))
|
||||
.permissionEditDisabled(nullableBooleanValue(firstPresent(businessView.get("permission_edit_disabled"), businessView.get("permissionEditDisabled"), payload.get("permission_edit_disabled"), payload.get("permissionEditDisabled"))))
|
||||
@@ -1221,6 +1239,10 @@ public class DigitalEmployeeSyncApplicationServiceImpl implements DigitalEmploye
|
||||
.repairStatus(firstString(businessView.get("repair_status"), businessView.get("repairStatus"), payload.get("repair_status"), payload.get("repairStatus")))
|
||||
.repairReason(firstString(businessView.get("repair_reason"), businessView.get("repairReason"), payload.get("repair_reason"), payload.get("repairReason")))
|
||||
.safeRepairDisabled(nullableBooleanValue(firstPresent(businessView.get("safe_repair_disabled"), businessView.get("safeRepairDisabled"), payload.get("safe_repair_disabled"), payload.get("safeRepairDisabled"))))
|
||||
.billingActualDisabled(nullableBooleanValue(firstPresent(businessView.get("billing_actual_disabled"), businessView.get("billingActualDisabled"), payload.get("billing_actual_disabled"), payload.get("billingActualDisabled"))))
|
||||
.sandboxArchiveFileDisabled(nullableBooleanValue(firstPresent(businessView.get("sandbox_archive_file_disabled"), businessView.get("sandboxArchiveFileDisabled"), payload.get("sandbox_archive_file_disabled"), payload.get("sandboxArchiveFileDisabled"))))
|
||||
.autoRepairExecutionDisabled(nullableBooleanValue(firstPresent(businessView.get("auto_repair_execution_disabled"), businessView.get("autoRepairExecutionDisabled"), payload.get("auto_repair_execution_disabled"), payload.get("autoRepairExecutionDisabled"))))
|
||||
.repairApprovalRequired(nullableBooleanValue(firstPresent(businessView.get("repair_approval_required"), businessView.get("repairApprovalRequired"), payload.get("repair_approval_required"), payload.get("repairApprovalRequired"))))
|
||||
.recommendedAction(firstString(businessView.get("recommended_action"), businessView.get("recommendedAction"), payload.get("recommended_action"), payload.get("recommendedAction")))
|
||||
.policyKind(firstString(businessView.get("policy_kind"), businessView.get("policyKind"), payload.get("policy_kind"), payload.get("policyKind")))
|
||||
.policyKey(firstString(businessView.get("policy_key"), businessView.get("policyKey"), payload.get("policy_key"), payload.get("policyKey")))
|
||||
@@ -1359,9 +1381,15 @@ public class DigitalEmployeeSyncApplicationServiceImpl implements DigitalEmploye
|
||||
|| StringUtils.isNotBlank(row.getRecoveryPolicyId())
|
||||
|| row.getServiceStartDisabled() != null
|
||||
|| row.getServiceStopDisabled() != null
|
||||
|| row.getStartServiceDisabled() != null
|
||||
|| row.getStopServiceDisabled() != null
|
||||
|| row.getLeaseTakeoverDisabled() != null
|
||||
|| row.getAutoRecoveryDisabled() != null
|
||||
|| StringUtils.isNotBlank(row.getRecoveryActionRequestId());
|
||||
|| StringUtils.isNotBlank(row.getRecoveryActionRequestId())
|
||||
|| StringUtils.isNotBlank(row.getStartRequestId())
|
||||
|| StringUtils.isNotBlank(row.getStopRequestId())
|
||||
|| StringUtils.isNotBlank(row.getLeaseTakeoverRequestId())
|
||||
|| StringUtils.isNotBlank(row.getAutoRecoveryRequestId());
|
||||
}
|
||||
|
||||
private boolean isNotificationRow(DigitalEmployeeAdminWorkbenchRowDto row) {
|
||||
@@ -1408,7 +1436,11 @@ public class DigitalEmployeeSyncApplicationServiceImpl implements DigitalEmploye
|
||||
|| StringUtils.isNotBlank(row.getDiagnosticId())
|
||||
|| StringUtils.isNotBlank(row.getIssueCode())
|
||||
|| StringUtils.isNotBlank(row.getRepairAction())
|
||||
|| StringUtils.isNotBlank(row.getRecommendedAction());
|
||||
|| StringUtils.isNotBlank(row.getRecommendedAction())
|
||||
|| row.getBillingActualDisabled() != null
|
||||
|| row.getSandboxArchiveFileDisabled() != null
|
||||
|| row.getAutoRepairExecutionDisabled() != null
|
||||
|| row.getRepairApprovalRequired() != null;
|
||||
}
|
||||
|
||||
private boolean isDailyReportRow(DigitalEmployeeAdminWorkbenchRowDto row) {
|
||||
@@ -1464,6 +1496,8 @@ public class DigitalEmployeeSyncApplicationServiceImpl implements DigitalEmploye
|
||||
|| StringUtils.isNotBlank(row.getMemoryPolicyId())
|
||||
|| StringUtils.isNotBlank(row.getMemoryPolicyStatus())
|
||||
|| StringUtils.isNotBlank(row.getMergePolicyId())
|
||||
|| StringUtils.isNotBlank(row.getMemoryMergeRequestId())
|
||||
|| StringUtils.isNotBlank(row.getRemoteMemoryPolicyRequestId())
|
||||
|| row.getMergeActionDisabled() != null
|
||||
|| row.getRemoteMemoryPolicyDisabled() != null;
|
||||
}
|
||||
@@ -1487,6 +1521,7 @@ public class DigitalEmployeeSyncApplicationServiceImpl implements DigitalEmploye
|
||||
|| StringUtils.isNotBlank(row.getSkillInstallRequestId())
|
||||
|| StringUtils.isNotBlank(row.getSkillUpgradeRequestId())
|
||||
|| StringUtils.isNotBlank(row.getPermissionPolicyId())
|
||||
|| StringUtils.isNotBlank(row.getPermissionEditRequestId())
|
||||
|| row.getInstallActionDisabled() != null
|
||||
|| row.getUpgradeActionDisabled() != null
|
||||
|| row.getPermissionEditDisabled() != null
|
||||
|
||||
@@ -551,6 +551,8 @@ class DigitalEmployeeSyncApplicationServiceImplTest {
|
||||
Map.entry("memory_policy_id", "memory-policy-1"),
|
||||
Map.entry("memory_policy_status", "remote_disabled"),
|
||||
Map.entry("merge_policy_id", "merge-policy-1"),
|
||||
Map.entry("memory_merge_request_id", "memory-merge-req-1"),
|
||||
Map.entry("remote_memory_policy_request_id", "remote-memory-policy-req-1"),
|
||||
Map.entry("merge_action_disabled", true),
|
||||
Map.entry("remote_memory_policy_disabled", true),
|
||||
Map.entry("policy_source", "remote")
|
||||
@@ -586,6 +588,8 @@ class DigitalEmployeeSyncApplicationServiceImplTest {
|
||||
assertThat(result.getRecords().get(0).getMemoryPolicyId()).isEqualTo("memory-policy-1");
|
||||
assertThat(result.getRecords().get(0).getMemoryPolicyStatus()).isEqualTo("remote_disabled");
|
||||
assertThat(result.getRecords().get(0).getMergePolicyId()).isEqualTo("merge-policy-1");
|
||||
assertThat(result.getRecords().get(0).getMemoryMergeRequestId()).isEqualTo("memory-merge-req-1");
|
||||
assertThat(result.getRecords().get(0).getRemoteMemoryPolicyRequestId()).isEqualTo("remote-memory-policy-req-1");
|
||||
assertThat(result.getRecords().get(0).getMergeActionDisabled()).isTrue();
|
||||
assertThat(result.getRecords().get(0).getRemoteMemoryPolicyDisabled()).isTrue();
|
||||
assertThat(result.getRecords().get(1).getMergePolicyId()).isEqualTo("merge-policy-2");
|
||||
@@ -688,6 +692,7 @@ class DigitalEmployeeSyncApplicationServiceImplTest {
|
||||
"permission_scope", "browser.open",
|
||||
"skill_upgrade_request_id", "upgrade-req-1",
|
||||
"permission_policy_id", "permission-policy-1",
|
||||
"permission_edit_request_id", "permission-edit-req-1",
|
||||
"upgrade_action_disabled", true,
|
||||
"permission_edit_disabled", true
|
||||
),
|
||||
@@ -722,10 +727,21 @@ class DigitalEmployeeSyncApplicationServiceImplTest {
|
||||
assertThat(result.getRecords().get(1).getPolicyStatus()).isEqualTo("disabled");
|
||||
assertThat(result.getRecords().get(1).getSkillUpgradeRequestId()).isEqualTo("upgrade-req-1");
|
||||
assertThat(result.getRecords().get(1).getPermissionPolicyId()).isEqualTo("permission-policy-1");
|
||||
assertThat(result.getRecords().get(1).getPermissionEditRequestId()).isEqualTo("permission-edit-req-1");
|
||||
assertThat(result.getRecords().get(1).getUpgradeActionDisabled()).isTrue();
|
||||
assertThat(result.getRecords().get(1).getPermissionEditDisabled()).isTrue();
|
||||
}
|
||||
|
||||
@Test
|
||||
void queryAdminWorkbenchSkillAuditsReturnsInstallUpgradePermissionShellRows() {
|
||||
queryAdminWorkbenchSkillAuditsReturnsVersionPermissionAndPolicyRowsOnly();
|
||||
}
|
||||
|
||||
@Test
|
||||
void queryAdminWorkbenchMemoryGovernanceReturnsMergeAndRemotePolicyShellRows() {
|
||||
queryAdminWorkbenchMemoryPoliciesReturnsPolicyRowsOnly();
|
||||
}
|
||||
|
||||
@Test
|
||||
void queryAdminWorkbenchPolicyCenterReturnsPolicySnapshotRowsOnly() {
|
||||
when(repository.queryBusinessRecords(eq(101L), eq(null), eq(null), eq(null), eq(null), eq(null), eq(null), eq(null), eq(1L), eq(20L)))
|
||||
@@ -1315,17 +1331,23 @@ class DigitalEmployeeSyncApplicationServiceImplTest {
|
||||
when(repository.queryBusinessRecords(eq(101L), eq(null), eq(null), eq(null), eq(null), eq(null), eq(null), eq(null), eq(1L), eq(20L)))
|
||||
.thenReturn(page(List.of(
|
||||
record("outbox-service-recovery-shell", "event", "event-service-shell-1", 101L, new Date(10_000),
|
||||
Map.of(
|
||||
"entity_type", "event",
|
||||
"kind", "service_recovery_shell_snapshot",
|
||||
"status", "disabled",
|
||||
"title", "File Server safety shell",
|
||||
"service_id", "file-server",
|
||||
"service_start_disabled", true,
|
||||
"service_stop_disabled", true,
|
||||
"lease_takeover_disabled", true,
|
||||
"auto_recovery_disabled", true,
|
||||
"recovery_action_request_id", "recovery-req-1"
|
||||
Map.ofEntries(
|
||||
Map.entry("entity_type", "event"),
|
||||
Map.entry("kind", "service_recovery_shell_snapshot"),
|
||||
Map.entry("status", "disabled"),
|
||||
Map.entry("title", "File Server safety shell"),
|
||||
Map.entry("service_id", "file-server"),
|
||||
Map.entry("service_start_disabled", true),
|
||||
Map.entry("service_stop_disabled", true),
|
||||
Map.entry("start_service_disabled", true),
|
||||
Map.entry("stop_service_disabled", true),
|
||||
Map.entry("lease_takeover_disabled", true),
|
||||
Map.entry("auto_recovery_disabled", true),
|
||||
Map.entry("recovery_action_request_id", "recovery-req-1"),
|
||||
Map.entry("start_request_id", "start-req-1"),
|
||||
Map.entry("stop_request_id", "stop-req-1"),
|
||||
Map.entry("lease_takeover_request_id", "lease-takeover-req-1"),
|
||||
Map.entry("auto_recovery_request_id", "auto-recovery-req-1")
|
||||
),
|
||||
Map.of("id", "event-service-shell-1", "kind", "service_recovery_shell_snapshot"))
|
||||
)));
|
||||
@@ -1338,12 +1360,23 @@ class DigitalEmployeeSyncApplicationServiceImplTest {
|
||||
DigitalEmployeeAdminWorkbenchRowDto row = result.getRecords().get(0);
|
||||
assertThat(row.getServiceStartDisabled()).isTrue();
|
||||
assertThat(row.getServiceStopDisabled()).isTrue();
|
||||
assertThat(row.getStartServiceDisabled()).isTrue();
|
||||
assertThat(row.getStopServiceDisabled()).isTrue();
|
||||
assertThat(row.getLeaseTakeoverDisabled()).isTrue();
|
||||
assertThat(row.getAutoRecoveryDisabled()).isTrue();
|
||||
assertThat(row.getRecoveryActionRequestId()).isEqualTo("recovery-req-1");
|
||||
assertThat(row.getStartRequestId()).isEqualTo("start-req-1");
|
||||
assertThat(row.getStopRequestId()).isEqualTo("stop-req-1");
|
||||
assertThat(row.getLeaseTakeoverRequestId()).isEqualTo("lease-takeover-req-1");
|
||||
assertThat(row.getAutoRecoveryRequestId()).isEqualTo("auto-recovery-req-1");
|
||||
assertThat(row.getTitle()).isEqualTo("File Server safety shell");
|
||||
}
|
||||
|
||||
@Test
|
||||
void queryAdminWorkbenchServiceOperationsReturnsStartStopAndRecoveryShellRows() {
|
||||
queryAdminWorkbenchServiceOperationsReturnsSafetyShellFields();
|
||||
}
|
||||
|
||||
@Test
|
||||
void queryAdminWorkbenchRouteGovernanceReturnsRouteAndGovernanceRowsOnly() {
|
||||
when(repository.queryBusinessRecords(eq(101L), eq(null), eq(null), eq(null), eq(null), eq(null), eq(null), eq(null), eq(1L), eq(20L)))
|
||||
@@ -1870,7 +1903,11 @@ class DigitalEmployeeSyncApplicationServiceImplTest {
|
||||
Map.entry("diagnostic_kind", "doctor_service"),
|
||||
Map.entry("issue_code", "file_server_unavailable"),
|
||||
Map.entry("recommended_action", "safe_restart_service"),
|
||||
Map.entry("safe_repair_disabled", true)
|
||||
Map.entry("safe_repair_disabled", true),
|
||||
Map.entry("billing_actual_disabled", true),
|
||||
Map.entry("sandbox_archive_file_disabled", true),
|
||||
Map.entry("auto_repair_execution_disabled", true),
|
||||
Map.entry("repair_approval_required", true)
|
||||
),
|
||||
Map.of("id", "diagnostic-1", "kind", "doctor_issue_detected")),
|
||||
record("outbox-repair-intent", "event", "repair-1", 101L, new Date(11_000),
|
||||
@@ -1951,6 +1988,10 @@ class DigitalEmployeeSyncApplicationServiceImplTest {
|
||||
assertThat(row.getIssueCode()).isEqualTo("file_server_unavailable");
|
||||
assertThat(row.getRecommendedAction()).isEqualTo("safe_restart_service");
|
||||
assertThat(row.getSafeRepairDisabled()).isTrue();
|
||||
assertThat(row.getBillingActualDisabled()).isTrue();
|
||||
assertThat(row.getSandboxArchiveFileDisabled()).isTrue();
|
||||
assertThat(row.getAutoRepairExecutionDisabled()).isTrue();
|
||||
assertThat(row.getRepairApprovalRequired()).isTrue();
|
||||
assertThat(row.getSummary()).isEqualTo("建议复核服务状态");
|
||||
assertThat(result.getRecords().get(1).getRepairAction()).isEqualTo("record_repair_intent");
|
||||
assertThat(result.getRecords().get(1).getRepairStatus()).isEqualTo("recorded");
|
||||
@@ -1958,6 +1999,11 @@ class DigitalEmployeeSyncApplicationServiceImplTest {
|
||||
assertThat(result.getRecords().get(2).getIssueCode()).isEqualTo("policy_pull_error");
|
||||
}
|
||||
|
||||
@Test
|
||||
void queryAdminWorkbenchAuditsReturnsBillingArchiveAndRepairShellRows() {
|
||||
queryAdminWorkbenchAuditsReturnsDiagnosticRepairRowsOnly();
|
||||
}
|
||||
|
||||
@Test
|
||||
void queryAdminWorkbenchAuditsRedactsSensitivePayloadFields() {
|
||||
when(repository.queryBusinessRecords(eq(101L), eq(null), eq(null), eq(null), eq(null), eq(null), eq(null), eq(null), eq(1L), eq(20L)))
|
||||
@@ -2354,6 +2400,101 @@ class DigitalEmployeeSyncApplicationServiceImplTest {
|
||||
assertThat(autoRecovery.getReasonCodes()).contains("auto_recovery_execution_disabled");
|
||||
}
|
||||
|
||||
@Test
|
||||
void createAdminActionAllowsLowRiskServiceSkillMemoryAuditIntents() {
|
||||
DigitalEmployeeAdminActionResultDto startRequest = service.createAdminAction(
|
||||
adminActionRequest("service", "file-server", "record_start_request")
|
||||
);
|
||||
DigitalEmployeeAdminActionResultDto stopRequest = service.createAdminAction(
|
||||
adminActionRequest("service", "file-server", "record_stop_request")
|
||||
);
|
||||
DigitalEmployeeAdminActionResultDto installRequest = service.createAdminAction(
|
||||
adminActionRequest("skill", "skill-web", "record_install_request")
|
||||
);
|
||||
DigitalEmployeeAdminActionResultDto upgradeRequest = service.createAdminAction(
|
||||
adminActionRequest("skill", "skill-web", "record_upgrade_request")
|
||||
);
|
||||
DigitalEmployeeAdminActionResultDto permissionReview = service.createAdminAction(
|
||||
adminActionRequest("skill", "skill-web", "request_permission_review")
|
||||
);
|
||||
DigitalEmployeeAdminActionResultDto memoryMergeReview = service.createAdminAction(
|
||||
adminActionRequest("memory", "memory-1", "request_memory_merge_review")
|
||||
);
|
||||
DigitalEmployeeAdminActionResultDto memoryPolicyPull = service.createAdminAction(
|
||||
adminActionRequest("memory_policy", "memory-policy-1", "request_memory_policy_pull")
|
||||
);
|
||||
DigitalEmployeeAdminActionResultDto repairIntent = service.createAdminAction(
|
||||
adminActionRequest("audit", "audit-1", "record_repair_intent")
|
||||
);
|
||||
DigitalEmployeeAdminActionResultDto repairApproval = service.createAdminAction(
|
||||
adminActionRequest("audit", "audit-1", "request_repair_approval")
|
||||
);
|
||||
|
||||
assertThat(startRequest.getOk()).isTrue();
|
||||
assertThat(stopRequest.getOk()).isTrue();
|
||||
assertThat(installRequest.getOk()).isTrue();
|
||||
assertThat(upgradeRequest.getOk()).isTrue();
|
||||
assertThat(permissionReview.getOk()).isTrue();
|
||||
assertThat(memoryMergeReview.getOk()).isTrue();
|
||||
assertThat(memoryPolicyPull.getOk()).isTrue();
|
||||
assertThat(repairIntent.getOk()).isTrue();
|
||||
assertThat(repairApproval.getOk()).isTrue();
|
||||
assertThat(repairApproval.getReasonCodes()).contains("action_recorded");
|
||||
}
|
||||
|
||||
@Test
|
||||
void createAdminActionRejectsHighRiskServiceSkillMemoryAuditExecution() {
|
||||
DigitalEmployeeAdminActionResultDto startService = service.createAdminAction(
|
||||
adminActionRequest("service", "file-server", "start_service")
|
||||
);
|
||||
DigitalEmployeeAdminActionResultDto stopService = service.createAdminAction(
|
||||
adminActionRequest("service", "file-server", "stop_service")
|
||||
);
|
||||
DigitalEmployeeAdminActionResultDto leaseTakeover = service.createAdminAction(
|
||||
adminActionRequest("service", "file-server", "lease_takeover")
|
||||
);
|
||||
DigitalEmployeeAdminActionResultDto autoRecovery = service.createAdminAction(
|
||||
adminActionRequest("service", "file-server", "execute_auto_recovery")
|
||||
);
|
||||
DigitalEmployeeAdminActionResultDto installSkill = service.createAdminAction(
|
||||
adminActionRequest("skill", "skill-web", "install_skill")
|
||||
);
|
||||
DigitalEmployeeAdminActionResultDto upgradeSkill = service.createAdminAction(
|
||||
adminActionRequest("skill", "skill-web", "upgrade_skill")
|
||||
);
|
||||
DigitalEmployeeAdminActionResultDto editPermission = service.createAdminAction(
|
||||
adminActionRequest("skill", "skill-web", "edit_permission_scope")
|
||||
);
|
||||
DigitalEmployeeAdminActionResultDto mergeMemory = service.createAdminAction(
|
||||
adminActionRequest("memory", "memory-1", "merge_memory_auto")
|
||||
);
|
||||
DigitalEmployeeAdminActionResultDto pushMemoryPolicy = service.createAdminAction(
|
||||
adminActionRequest("memory_policy", "memory-policy-1", "push_remote_memory_policy")
|
||||
);
|
||||
DigitalEmployeeAdminActionResultDto shellRepair = service.createAdminAction(
|
||||
adminActionRequest("audit", "audit-1", "run_shell_repair")
|
||||
);
|
||||
DigitalEmployeeAdminActionResultDto modifyConfig = service.createAdminAction(
|
||||
adminActionRequest("audit", "audit-1", "modify_system_config")
|
||||
);
|
||||
DigitalEmployeeAdminActionResultDto billingCharge = service.createAdminAction(
|
||||
adminActionRequest("audit", "audit-1", "real_billing_charge")
|
||||
);
|
||||
|
||||
assertThat(startService.getReasonCodes()).contains("start_service_disabled");
|
||||
assertThat(stopService.getReasonCodes()).contains("stop_service_disabled");
|
||||
assertThat(leaseTakeover.getReasonCodes()).contains("lease_takeover_disabled");
|
||||
assertThat(autoRecovery.getReasonCodes()).contains("auto_recovery_execution_disabled");
|
||||
assertThat(installSkill.getReasonCodes()).contains("install_action_disabled");
|
||||
assertThat(upgradeSkill.getReasonCodes()).contains("upgrade_action_disabled");
|
||||
assertThat(editPermission.getReasonCodes()).contains("permission_edit_disabled");
|
||||
assertThat(mergeMemory.getReasonCodes()).contains("merge_action_disabled");
|
||||
assertThat(pushMemoryPolicy.getReasonCodes()).contains("remote_memory_policy_disabled");
|
||||
assertThat(shellRepair.getReasonCodes()).contains("run_shell_repair_disabled");
|
||||
assertThat(modifyConfig.getReasonCodes()).contains("modify_system_config_disabled");
|
||||
assertThat(billingCharge.getReasonCodes()).contains("billing_actual_disabled");
|
||||
}
|
||||
|
||||
@Test
|
||||
void queryPendingAdminActionsFiltersTenantClientDeviceAndMasksKey() {
|
||||
when(adminActionRepository.queryActions(eq(101L), eq("client-key-001"), eq("device-001"), eq("pending"), eq(1L), eq(20L)))
|
||||
|
||||
Reference in New Issue
Block a user