Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 | 1x 1x | /**
* Chart.js testing utilities for CIA Compliance Manager.
*
* This file consolidates Chart.js-specific test utilities from:
* - src/tests/testUtils/chartTestUtils.ts
* - src/utils/test-helpers.ts (chart mocking functions)
*
* @packageDocumentation
*/
import { vi } from "vitest";
type ChartMockConstructor = ReturnType<typeof setupChartJsMock>["MockChart"];
const chartModuleMock = vi.hoisted(() => ({
Chart: vi.fn() as unknown as ChartMockConstructor,
registerables: ["mockRegisterables"],
}));
vi.mock("chart.js", () => chartModuleMock);
/**
* Creates a mock for Chart.js library
* @returns Mock Chart constructor and instance
*/
export function setupChartJsMock() {
const mockChartInstance = {
update: vi.fn(),
destroy: vi.fn(),
resize: vi.fn(),
data: { datasets: [] },
options: {},
};
// Create the mock constructor function
const MockChart = vi.fn(() => mockChartInstance) as any;
// Add required Chart.js static methods
MockChart.register = vi.fn();
return { MockChart, mockChartInstance };
}
/**
* Sets up a complete environment for Chart.js tests
* @returns Test utilities and teardown function
*/
export function setupChartTest() {
const { MockChart, mockChartInstance } = setupChartJsMock();
chartModuleMock.Chart = MockChart;
// Create a canvas element for testing
const createCanvasMock = () => {
const canvas = document.createElement("canvas");
// Keep the original getContext method for proper typing
const originalGetContext = canvas.getContext;
// Create a properly typed mock that preserves the original method signature
canvas.getContext = vi
.fn()
.mockImplementation((contextType: string, options?: any) => {
// For 2d context, return our mock
if (contextType === "2d") {
return {
clearRect: vi.fn(),
save: vi.fn(),
restore: vi.fn(),
canvas,
globalAlpha: 1,
globalCompositeOperation: "source-over",
drawImage: vi.fn(),
// Add minimal required properties for a CanvasRenderingContext2D
fillRect: vi.fn(),
strokeRect: vi.fn(),
fillText: vi.fn(),
measureText: vi.fn(() => ({ width: 10 })),
// Add more methods as needed
} as unknown as CanvasRenderingContext2D;
}
// Use the original method for other context types to maintain type compatibility
return originalGetContext.call(canvas, contextType, options);
});
return canvas;
};
return {
MockChart,
mockChartInstance,
createCanvasMock,
cleanup: () => {
vi.resetAllMocks();
},
};
}
/**
* Creates a mock dataset for Chart.js radar charts
* @param label Dataset label
* @param data Data points
* @param color Color for the dataset
* @returns Formatted dataset object
*/
export function createMockRadarDataset(
label: string,
data: number[],
color: string
) {
return {
label,
data,
backgroundColor: `${color}33`, // 20% opacity
borderColor: color,
borderWidth: 2,
pointBackgroundColor: color,
pointBorderColor: "#fff",
pointHoverBackgroundColor: "#fff",
pointHoverBorderColor: color,
};
}
|