Files
prowler/ui/lib/jira-dispatch-action.test.ts
2026-07-22 20:23:13 +02:00

128 lines
3.4 KiB
TypeScript

import { describe, expect, it } from "vitest";
import {
createJiraBatchSelection,
createJiraTargetSelection,
} from "@/lib/jira-dispatch-selection";
import { JIRA_DISPATCH_MODE, JIRA_DISPATCH_TARGET } from "@/types/integrations";
import {
buildJiraActionLabel,
getJiraDispatchActionState,
} from "./jira-dispatch-action";
describe("getJiraDispatchActionState", () => {
it("allows one Finding without grouped dispatch", () => {
// Given
const selection = createJiraTargetSelection(
["finding-1"],
JIRA_DISPATCH_TARGET.FINDING_ID,
)!;
// When
const state = getJiraDispatchActionState({ selection }, false);
// Then
expect(state).toEqual({
canChooseGroupedDispatch: false,
defaultDispatchMode: JIRA_DISPATCH_MODE.INDIVIDUAL,
requiresUpgrade: false,
});
});
it("offers grouped choice for multiple Findings in Cloud", () => {
// Given
const selection = createJiraTargetSelection(
["finding-1", "finding-2"],
JIRA_DISPATCH_TARGET.FINDING_ID,
)!;
// When
const state = getJiraDispatchActionState({ selection }, true);
// Then
expect(state).toEqual({
canChooseGroupedDispatch: true,
defaultDispatchMode: JIRA_DISPATCH_MODE.GROUPED,
requiresUpgrade: false,
});
});
it("requires upgrade for multiple Findings outside Cloud", () => {
// Given
const selection = createJiraTargetSelection(
["finding-1", "finding-2"],
JIRA_DISPATCH_TARGET.FINDING_ID,
)!;
// When
const state = getJiraDispatchActionState({ selection }, false);
// Then
expect(state.requiresUpgrade).toBe(true);
expect(state.canChooseGroupedDispatch).toBe(false);
});
it("offers grouped choice for one Finding Group with multiple resources", () => {
// Given
const selection = createJiraTargetSelection(
["check-1"],
JIRA_DISPATCH_TARGET.CHECK_ID,
)!;
// When
const state = getJiraDispatchActionState(
{ selection, selectedResourceCount: 2 },
true,
);
// Then
expect(state).toEqual({
canChooseGroupedDispatch: true,
defaultDispatchMode: JIRA_DISPATCH_MODE.GROUPED,
requiresUpgrade: false,
});
});
it("keeps mixed batches grouped without offering one global choice", () => {
// Given
const selection = createJiraBatchSelection([
{
targetIds: ["check-1"],
targetType: JIRA_DISPATCH_TARGET.CHECK_ID,
dispatchMode: JIRA_DISPATCH_MODE.GROUPED,
},
{
targetIds: ["finding-1"],
targetType: JIRA_DISPATCH_TARGET.FINDING_ID,
dispatchMode: JIRA_DISPATCH_MODE.INDIVIDUAL,
},
])!;
// When
const state = getJiraDispatchActionState({ selection }, true);
// Then
expect(state.defaultDispatchMode).toBe(JIRA_DISPATCH_MODE.GROUPED);
expect(state.canChooseGroupedDispatch).toBe(false);
});
});
describe("buildJiraActionLabel", () => {
it.each([
[{ findingCount: 1 }, "Send 1 Finding to Jira"],
[{ findingCount: 2 }, "Send 2 Findings to Jira"],
[{ findingGroupCount: 1 }, "Send 1 Finding Group to Jira"],
[
{ findingGroupCount: 2, findingCount: 1 },
"Send 2 Finding Groups and 1 Finding to Jira",
],
])("builds consistent Jira action copy", (counts, expected) => {
// Given / When
const label = buildJiraActionLabel(counts);
// Then
expect(label).toBe(expected);
});
});