diff --git a/ui/app/(prowler)/attack-paths/(workflow)/query-builder/_components/scan-list-table.test.tsx b/ui/app/(prowler)/attack-paths/(workflow)/query-builder/_components/scan-list-table.test.tsx
index 83cea30326..a029481e7a 100644
--- a/ui/app/(prowler)/attack-paths/(workflow)/query-builder/_components/scan-list-table.test.tsx
+++ b/ui/app/(prowler)/attack-paths/(workflow)/query-builder/_components/scan-list-table.test.tsx
@@ -162,4 +162,45 @@ describe("ScanListTable", () => {
"/attack-paths?scanPage=1&scanPageSize=5&scanId=scan-1",
);
});
+
+ it("enables the select button for a failed scan when graph data is ready", async () => {
+ const user = userEvent.setup();
+ const failedScan: AttackPathScan = {
+ ...createScan(1),
+ attributes: {
+ ...createScan(1).attributes,
+ state: "failed",
+ graph_data_ready: true,
+ },
+ };
+
+ render();
+
+ const button = screen.getByRole("button", { name: "Select scan" });
+ expect(button).toBeEnabled();
+ expect(button).toHaveTextContent("Select");
+
+ await user.click(button);
+
+ expect(pushMock).toHaveBeenCalledWith(
+ "/attack-paths?scanPage=1&scanPageSize=5&scanId=scan-1",
+ );
+ });
+
+ it("disables the select button for a failed scan when graph data is not ready", () => {
+ const failedScan: AttackPathScan = {
+ ...createScan(1),
+ attributes: {
+ ...createScan(1).attributes,
+ state: "failed",
+ graph_data_ready: false,
+ },
+ };
+
+ render();
+
+ const button = screen.getByRole("button", { name: "Select scan" });
+ expect(button).toBeDisabled();
+ expect(button).toHaveTextContent("Failed");
+ });
});
diff --git a/ui/app/(prowler)/attack-paths/(workflow)/query-builder/_components/scan-list-table.tsx b/ui/app/(prowler)/attack-paths/(workflow)/query-builder/_components/scan-list-table.tsx
index aeb8b897f5..b5bd240cf0 100644
--- a/ui/app/(prowler)/attack-paths/(workflow)/query-builder/_components/scan-list-table.tsx
+++ b/ui/app/(prowler)/attack-paths/(workflow)/query-builder/_components/scan-list-table.tsx
@@ -42,11 +42,7 @@ const isSelectDisabled = (
scan: AttackPathScan,
selectedScanId: string | null,
) => {
- return (
- !scan.attributes.graph_data_ready ||
- scan.attributes.state === SCAN_STATES.FAILED ||
- selectedScanId === scan.id
- );
+ return !scan.attributes.graph_data_ready || selectedScanId === scan.id;
};
const getSelectButtonLabel = (
diff --git a/ui/app/(prowler)/attack-paths/(workflow)/query-builder/_components/scan-status-badge.tsx b/ui/app/(prowler)/attack-paths/(workflow)/query-builder/_components/scan-status-badge.tsx
index 71c8488e00..de8833749e 100644
--- a/ui/app/(prowler)/attack-paths/(workflow)/query-builder/_components/scan-status-badge.tsx
+++ b/ui/app/(prowler)/attack-paths/(workflow)/query-builder/_components/scan-status-badge.tsx
@@ -38,7 +38,7 @@ const BADGE_CONFIG: Record<
[SCAN_STATES.FAILED]: {
className: "bg-bg-fail-secondary text-text-error-primary",
label: "Failed",
- showGraphDot: false,
+ showGraphDot: true,
},
};