fix(ui): prevent timezone mismatch in scan findings links

This commit is contained in:
Josema Camacho
2026-08-10 13:41:08 +02:00
parent 356036fe1f
commit 0e940a350b
3 changed files with 8 additions and 13 deletions
@@ -0,0 +1 @@
`View Findings` from completed scans no longer returns empty results near local midnight in non-UTC timezones
@@ -44,11 +44,6 @@ vi.mock("@/lib/helper", () => ({
downloadScanZip: downloadScanZipMock,
}));
vi.mock("@/lib/date-utils", () => ({
toLocalDateString: (value: string | null | undefined) =>
value ? "2026-01-01" : undefined,
}));
vi.mock("@/components/scans/edit-alias-modal", () => ({
EditAliasModal: ({
open,
@@ -314,14 +309,14 @@ describe("ScanJobsRowActions", () => {
).not.toBeInTheDocument();
});
it("links completed scans to filtered findings", async () => {
it("delegates scan date resolution when opening findings", async () => {
// Given
const user = userEvent.setup();
render(
<ScanJobsRowActions
scan={makeScan({
state: "completed",
completed_at: "2026-01-01T10:05:00Z",
completed_at: "2026-08-01T14:30:00Z",
})}
tab="completed"
/>,
@@ -335,7 +330,7 @@ describe("ScanJobsRowActions", () => {
// Then
expect(pushMock).toHaveBeenCalledWith(
"/findings?filter[scan__in]=scan-1&filter[inserted_at]=2026-01-01&filter[status__in]=FAIL",
"/findings?filter[scan__in]=scan-1&filter[status__in]=FAIL",
);
});
@@ -30,7 +30,6 @@ import {
ActionDropdownItem,
} from "@/components/shadcn/dropdown";
import { buildPerScanComplianceHref } from "@/lib/compliance/compliance-tab-url";
import { toLocalDateString } from "@/lib/date-utils";
import { downloadScanZip } from "@/lib/helper";
import { getScanScheduleCapability } from "@/lib/schedules";
import { isCloud } from "@/lib/shared/env";
@@ -80,7 +79,7 @@ export function ScanJobsRowActions({
const isCompleted = scanState === "completed";
const isFailed = scanState === "failed";
const taskId = scan.relationships.task.data?.id;
const scanDate = toLocalDateString(scan.attributes.completed_at);
const canViewFindings = isCompleted && Boolean(scan.attributes.completed_at);
const providerId = scan.relationships.provider.data?.id;
const scheduleProvider: ScanScheduleProvider | undefined = providerId
? {
@@ -92,9 +91,9 @@ export function ScanJobsRowActions({
: undefined;
const openFindings = () => {
if (!isCompleted || !scanDate) return;
if (!canViewFindings) return;
router.push(
`/findings?filter[scan__in]=${scan.id}&filter[inserted_at]=${scanDate}&filter[status__in]=FAIL`,
`/findings?filter[scan__in]=${scan.id}&filter[status__in]=FAIL`,
);
};
@@ -202,7 +201,7 @@ export function ScanJobsRowActions({
icon={<Eye />}
label="View Findings"
onSelect={openFindings}
disabled={!isCompleted || !scanDate}
disabled={!canViewFindings}
/>
<ActionDropdownItem
icon={<ShieldCheck />}