Files
prowler/ui/components/scans/scans.utils.test.ts
2026-05-28 19:20:39 +02:00

152 lines
4.5 KiB
TypeScript

import { describe, expect, it } from "vitest";
import {
SCAN_JOBS_TAB,
type ScanAttributes,
type ScanProps,
type ScanTrigger,
} from "@/types";
import {
formatScanDuration,
getScanAlias,
getScanFindingsSummary,
getScanJobsTab,
getScanJobsTabFilters,
getScanJobsUserFilters,
getScanScheduleLabel,
getScanStatusLabel,
getScanTriggerFilterOptions,
} from "./scans.utils";
const makeScan = (
name: string | null,
trigger: ScanTrigger = "manual",
): ScanProps => ({
type: "scans",
id: "scan-1",
attributes: {
name: name ?? "",
trigger,
state: "completed",
unique_resource_count: 0,
progress: 100,
scanner_args: null,
duration: 0,
started_at: "",
inserted_at: "",
completed_at: "",
scheduled_at: "",
next_scan_at: "",
},
relationships: {
provider: { data: { type: "providers", id: "provider-1" } },
task: { data: { type: "tasks", id: "task-1" } },
},
});
describe("scans.utils", () => {
it("falls back to completed tab for unknown tab values", () => {
expect(getScanJobsTab("unknown")).toBe(SCAN_JOBS_TAB.COMPLETED);
expect(getScanJobsTab(SCAN_JOBS_TAB.COMPLETED)).toBe(
SCAN_JOBS_TAB.COMPLETED,
);
});
it("maps scan job tabs to the state filters expected by the API", () => {
expect(getScanJobsTabFilters(SCAN_JOBS_TAB.ACTIVE)).toEqual({
"filter[state__in]": "available,executing",
});
expect(getScanJobsTabFilters(SCAN_JOBS_TAB.COMPLETED)).toEqual({
"filter[state__in]": "completed,failed,cancelled",
});
expect(getScanJobsTabFilters(SCAN_JOBS_TAB.SCHEDULED)).toEqual({
"filter[state__in]": "scheduled",
});
});
it("narrows tab state filters when a matching status is selected", () => {
expect(getScanJobsTabFilters(SCAN_JOBS_TAB.COMPLETED, "failed")).toEqual({
"filter[state__in]": "failed",
});
expect(
getScanJobsTabFilters(SCAN_JOBS_TAB.COMPLETED, "failed,cancelled"),
).toEqual({
"filter[state__in]": "failed,cancelled",
});
expect(getScanJobsTabFilters(SCAN_JOBS_TAB.ACTIVE, "failed")).toEqual({
"filter[state__in]": "available,executing",
});
});
it("keeps user filters while excluding scan state filters", () => {
expect(
getScanJobsUserFilters({
tab: "completed",
page: "2",
"filter[provider_uid]": "123456789012",
"filter[state__in]": "failed,cancelled",
"filter[search]": "production",
}),
).toEqual({
"filter[provider_uid]": "123456789012",
"filter[search]": "production",
});
});
it("formats scan labels and durations for table display", () => {
expect(getScanAlias(makeScan(""))).toBe("-");
expect(getScanAlias(makeScan("Daily scheduled scan", "scheduled"))).toBe(
"scheduled scan",
);
expect(getScanAlias(makeScan("", "scheduled"))).toBe("scheduled scan");
expect(getScanAlias(makeScan("Production scan"))).toBe("Production scan");
expect(formatScanDuration(73)).toBe("1 min 13 sec");
expect(formatScanDuration(null)).toBe("-");
});
it("maps trigger and state values to product labels", () => {
expect(getScanScheduleLabel("manual")).toBe("Manual");
expect(getScanScheduleLabel("scheduled")).toBe("Scheduled");
expect(getScanScheduleLabel("imported")).toBe("Imported");
expect(getScanStatusLabel("available")).toBe("Queued");
expect(getScanStatusLabel("completed")).toBe("Completed");
});
it("includes imported in the trigger filter only for Cloud", () => {
expect(getScanTriggerFilterOptions(false)).toEqual([
{ value: "all", label: "All Types" },
{ value: "manual", label: "Manual" },
{ value: "scheduled", label: "Scheduled" },
]);
expect(getScanTriggerFilterOptions(true)).toEqual([
{ value: "all", label: "All Types" },
{ value: "manual", label: "Manual" },
{ value: "scheduled", label: "Scheduled" },
{ value: "imported", label: "Imported" },
]);
});
it("reads findings summary from root or nested API fields", () => {
expect(
getScanFindingsSummary({
fail: 2,
pass: 3,
fail_new: 1,
} as unknown as ScanAttributes),
).toEqual({ fail: 2, pass: 3, failNew: 1 });
expect(
getScanFindingsSummary({
findings: {
failed_findings: 4,
passed_findings: 8,
new_passed_findings: 2,
},
} as unknown as ScanAttributes),
).toEqual({ fail: 4, pass: 8, passNew: 2 });
expect(getScanFindingsSummary(makeScan("x").attributes)).toBeNull();
});
});