UNPKG

@allurereport/web-awesome

Version:

The static files for Allure Awesome Report

410 lines (384 loc) 11.7 kB
import { describe, expect, it } from "vitest"; import { createRecursiveTree, filterLeaves } from "../../src/utils/treeFilters.js"; import type { AwesomeTestResult } from "../../types.js"; // Predicate that always returns true (no filtering) const alwaysTruePredicate = () => true; describe("utils > treeFilters", () => { describe("filterLeaves", () => { it("sorts leave by duration in ascending order", () => { const leaves = ["a1", "b2", "c3"]; const leavesById = { a1: { name: "a1", duration: 1000, } as AwesomeTestResult, b2: { name: "b2", duration: 2000, } as AwesomeTestResult, c3: { name: "c3", duration: 3000, } as AwesomeTestResult, }; const result = filterLeaves(leaves, leavesById as any, alwaysTruePredicate, "duration,asc"); expect(result).toEqual([ expect.objectContaining({ name: "a1" }), expect.objectContaining({ name: "b2" }), expect.objectContaining({ name: "c3" }), ]); }); it("sorts leave by duration in descending order", () => { const leaves = ["a1", "b2", "c3"]; const leavesById = { a1: { name: "a1", duration: 1000, } as AwesomeTestResult, b2: { name: "b2", duration: 2000, } as AwesomeTestResult, c3: { name: "c3", duration: 3000, } as AwesomeTestResult, }; const result = filterLeaves(leaves, leavesById as any, alwaysTruePredicate, "duration,desc"); expect(result).toEqual([ expect.objectContaining({ name: "c3" }), expect.objectContaining({ name: "b2" }), expect.objectContaining({ name: "a1" }), ]); }); it("sorts leaves by title in ascending order", () => { const leaves = ["a1", "b2", "c3"]; const leavesById = { a1: { name: "a1", } as AwesomeTestResult, b2: { name: "b2", } as AwesomeTestResult, c3: { name: "c3", } as AwesomeTestResult, }; const result = filterLeaves(leaves, leavesById as any, alwaysTruePredicate, "name,asc"); expect(result).toEqual([ expect.objectContaining({ name: "a1" }), expect.objectContaining({ name: "b2" }), expect.objectContaining({ name: "c3" }), ]); }); it("sorts leaves by title in descending order", () => { const leaves = ["a1", "b2", "c3"]; const leavesById = { a1: { name: "a1", } as AwesomeTestResult, b2: { name: "b2", } as AwesomeTestResult, c3: { name: "c3", } as AwesomeTestResult, }; const result = filterLeaves(leaves, leavesById as any, alwaysTruePredicate, "name,desc"); expect(result).toEqual([ expect.objectContaining({ name: "c3" }), expect.objectContaining({ name: "b2" }), expect.objectContaining({ name: "a1" }), ]); }); it("sorts leaves by status in ascending order", () => { const leaves = ["a1", "b2", "c3", "d4", "e5"]; const leavesById = { a1: { name: "a1", status: "passed", } as AwesomeTestResult, b2: { name: "b2", status: "failed", } as AwesomeTestResult, c3: { name: "c3", status: "broken", } as AwesomeTestResult, d4: { name: "d4", status: "unknown", } as AwesomeTestResult, e5: { name: "e5", status: "skipped", } as AwesomeTestResult, }; const result = filterLeaves(leaves, leavesById as any, alwaysTruePredicate, "status,asc"); expect(result).toEqual([ expect.objectContaining({ name: "b2" }), expect.objectContaining({ name: "c3" }), expect.objectContaining({ name: "a1" }), expect.objectContaining({ name: "e5" }), expect.objectContaining({ name: "d4" }), ]); }); it("sorts leaves by status in descending order", () => { const leaves = ["a1", "b2", "c3", "d4", "e5", "f6", "z9"]; const leavesById = { a1: { name: "a1", status: "passed", } as AwesomeTestResult, b2: { name: "b2", status: "failed", } as AwesomeTestResult, c3: { name: "c3", status: "broken", } as AwesomeTestResult, d4: { name: "d4", status: "unknown", } as AwesomeTestResult, e5: { name: "e5", status: "skipped", } as AwesomeTestResult, f6: { name: "f6", status: "failed", } as AwesomeTestResult, z9: { name: "z9", status: "passed", } as AwesomeTestResult, }; const result = filterLeaves(leaves, leavesById as any, alwaysTruePredicate, "status,desc"); expect(result).toEqual([ expect.objectContaining({ name: "f6" }), expect.objectContaining({ name: "b2" }), expect.objectContaining({ name: "c3" }), expect.objectContaining({ name: "z9" }), expect.objectContaining({ name: "a1" }), expect.objectContaining({ name: "e5" }), expect.objectContaining({ name: "d4" }), ]); }); it("sorts leaves by order number in ascending order", () => { const baseDate = Date.now(); const leaves = ["a1", "b2", "c3"]; const leavesById = { a1: { name: "a1", start: baseDate + 2000, groupOrder: 3, } as AwesomeTestResult, b2: { name: "b2", start: baseDate + 1000, groupOrder: 2, } as AwesomeTestResult, c3: { name: "c3", start: baseDate, groupOrder: 1, } as AwesomeTestResult, }; const result = filterLeaves(leaves, leavesById as any, alwaysTruePredicate, "order,asc"); expect(result).toEqual([ expect.objectContaining({ name: "c3" }), expect.objectContaining({ name: "b2" }), expect.objectContaining({ name: "a1" }), ]); }); it("sorts leaves by order number in descending order", () => { const baseDate = Date.now(); const leaves = ["a1", "b2", "c3"]; const leavesById = { a1: { name: "a1", start: baseDate + 2000, groupOrder: 3, } as AwesomeTestResult, b2: { name: "b2", start: baseDate + 1000, groupOrder: 2, } as AwesomeTestResult, c3: { name: "c3", start: baseDate, groupOrder: 1, } as AwesomeTestResult, }; const result = filterLeaves(leaves, leavesById as any, alwaysTruePredicate, "order,desc"); expect(result).toEqual([ expect.objectContaining({ name: "a1" }), expect.objectContaining({ name: "b2" }), expect.objectContaining({ name: "c3" }), ]); }); }); describe("createRecursiveTree", () => { it("creates recursive tree with sorted leaves objects", () => { const baseDate = Date.now(); const group = { leaves: ["a1"], groups: ["a1"], }; const leavesById = { a1: { name: "a1", start: baseDate, } as AwesomeTestResult, b2: { name: "b2", start: baseDate + 1000, } as AwesomeTestResult, c3: { name: "c3", start: baseDate + 2000, } as AwesomeTestResult, }; const groupsById = { a1: { leaves: ["b2"], groups: ["b2"], }, b2: { leaves: ["c3"], groups: [] as string[], }, }; const result = createRecursiveTree({ group: group as any, leavesById: leavesById as any, groupsById: groupsById as any, filterPredicate: alwaysTruePredicate, sortBy: "name,asc", }); expect(result).toEqual( expect.objectContaining({ leaves: [expect.objectContaining({ name: "a1" })], trees: [ expect.objectContaining({ leaves: [expect.objectContaining({ name: "b2" })], trees: [ expect.objectContaining({ leaves: [expect.objectContaining({ name: "c3" })], trees: [], }), ], }), ], }), ); }); it("ignores missing nested group references", () => { const group = { leaves: ["a1"], groups: ["exists", "missing"], }; const leavesById = { a1: { name: "a1", status: "passed", } as AwesomeTestResult, b2: { name: "b2", status: "failed", } as AwesomeTestResult, }; const groupsById = { exists: { leaves: ["b2"], groups: [] as string[], }, }; const result = createRecursiveTree({ group: group as any, leavesById: leavesById as any, groupsById: groupsById as any, filterPredicate: alwaysTruePredicate, sortBy: "name,asc", }); expect(result.trees).toHaveLength(1); expect(result.trees[0]).toEqual( expect.objectContaining({ leaves: [expect.objectContaining({ name: "b2" })], trees: [], }), ); }); it("keeps problem-heavy groups first when sorting by status in descending order", () => { const group = { leaves: [], groups: ["passedHeavy", "failedAlpha", "brokenGroup", "failedZulu"], }; const leavesById = { failedAlphaTest: { name: "failedAlphaTest", status: "failed", } as AwesomeTestResult, failedZuluTest: { name: "failedZuluTest", status: "failed", } as AwesomeTestResult, brokenTest1: { name: "brokenTest1", status: "broken", } as AwesomeTestResult, brokenTest2: { name: "brokenTest2", status: "broken", } as AwesomeTestResult, passedTest1: { name: "passedTest1", status: "passed", } as AwesomeTestResult, passedTest2: { name: "passedTest2", status: "passed", } as AwesomeTestResult, }; const groupsById = { passedHeavy: { name: "passedHeavy", leaves: ["passedTest1", "passedTest2"], groups: [] as string[], }, brokenGroup: { name: "brokenGroup", leaves: ["brokenTest1", "brokenTest2"], groups: [] as string[], }, failedAlpha: { name: "failedAlpha", leaves: ["failedAlphaTest"], groups: [] as string[], }, failedZulu: { name: "failedZulu", leaves: ["failedZuluTest"], groups: [] as string[], }, }; const result = createRecursiveTree({ group: group as any, leavesById: leavesById as any, groupsById: groupsById as any, filterPredicate: alwaysTruePredicate, sortBy: "status,desc", }); expect(result.trees).toEqual([ expect.objectContaining({ name: "failedZulu" }), expect.objectContaining({ name: "failedAlpha" }), expect.objectContaining({ name: "brokenGroup" }), expect.objectContaining({ name: "passedHeavy" }), ]); }); }); });