mirror of
https://github.com/Frooodle/Stirling-PDF.git
synced 2025-11-16 01:21:16 +01:00
# Description of Changes Adds auto-redact tool to V2, with manual-redact in the UI but explicitly disabled. Also creates a shared component for the large buttons we're using in a couple different tools and uses consistently.
135 lines
5.0 KiB
TypeScript
135 lines
5.0 KiB
TypeScript
import { describe, expect, test } from 'vitest';
|
|
import { renderHook, act } from '@testing-library/react';
|
|
import { useRedactParameters, defaultParameters } from './useRedactParameters';
|
|
|
|
describe('useRedactParameters', () => {
|
|
test('should initialize with default parameters', () => {
|
|
const { result } = renderHook(() => useRedactParameters());
|
|
|
|
expect(result.current.parameters).toStrictEqual(defaultParameters);
|
|
});
|
|
|
|
test.each([
|
|
{ paramName: 'mode' as const, value: 'manual' as const },
|
|
{ paramName: 'wordsToRedact' as const, value: ['word1', 'word2'] },
|
|
{ paramName: 'useRegex' as const, value: true },
|
|
{ paramName: 'wholeWordSearch' as const, value: true },
|
|
{ paramName: 'redactColor' as const, value: '#FF0000' },
|
|
{ paramName: 'customPadding' as const, value: 0.5 },
|
|
{ paramName: 'convertPDFToImage' as const, value: false }
|
|
])('should update parameter $paramName', ({ paramName, value }) => {
|
|
const { result } = renderHook(() => useRedactParameters());
|
|
|
|
act(() => {
|
|
result.current.updateParameter(paramName, value);
|
|
});
|
|
|
|
expect(result.current.parameters[paramName]).toStrictEqual(value);
|
|
});
|
|
|
|
test('should reset parameters to defaults', () => {
|
|
const { result } = renderHook(() => useRedactParameters());
|
|
|
|
// Modify some parameters
|
|
act(() => {
|
|
result.current.updateParameter('mode', 'manual');
|
|
result.current.updateParameter('wordsToRedact', ['test']);
|
|
result.current.updateParameter('useRegex', true);
|
|
});
|
|
|
|
// Reset parameters
|
|
act(() => {
|
|
result.current.resetParameters();
|
|
});
|
|
|
|
expect(result.current.parameters).toStrictEqual(defaultParameters);
|
|
});
|
|
|
|
describe('validation', () => {
|
|
test.each([
|
|
{ description: 'validate when wordsToRedact has non-empty words in automatic mode', wordsToRedact: ['word1', 'word2'], expected: true },
|
|
{ description: 'not validate when wordsToRedact is empty in automatic mode', wordsToRedact: [], expected: false },
|
|
{ description: 'not validate when wordsToRedact contains only empty strings in automatic mode', wordsToRedact: ['', ' ', ''], expected: false },
|
|
{ description: 'validate when wordsToRedact contains at least one non-empty word in automatic mode', wordsToRedact: ['', 'valid', ' '], expected: true },
|
|
])('should $description', ({ wordsToRedact, expected }) => {
|
|
const { result } = renderHook(() => useRedactParameters());
|
|
|
|
act(() => {
|
|
result.current.updateParameter('mode', 'automatic');
|
|
result.current.updateParameter('wordsToRedact', wordsToRedact);
|
|
});
|
|
|
|
expect(result.current.validateParameters()).toBe(expected);
|
|
});
|
|
|
|
test('should not validate in manual mode (not implemented)', () => {
|
|
const { result } = renderHook(() => useRedactParameters());
|
|
|
|
act(() => {
|
|
result.current.updateParameter('mode', 'manual');
|
|
});
|
|
|
|
expect(result.current.validateParameters()).toBe(false);
|
|
});
|
|
});
|
|
|
|
describe('endpoint handling', () => {
|
|
test('should return correct endpoint for automatic mode', () => {
|
|
const { result } = renderHook(() => useRedactParameters());
|
|
|
|
act(() => {
|
|
result.current.updateParameter('mode', 'automatic');
|
|
});
|
|
|
|
expect(result.current.getEndpointName()).toBe('/api/v1/security/auto-redact');
|
|
});
|
|
|
|
test('should throw error for manual mode (not implemented)', () => {
|
|
const { result } = renderHook(() => useRedactParameters());
|
|
|
|
act(() => {
|
|
result.current.updateParameter('mode', 'manual');
|
|
});
|
|
|
|
expect(() => result.current.getEndpointName()).toThrow('Manual redaction not yet implemented');
|
|
});
|
|
});
|
|
|
|
test('should maintain parameter state across updates', () => {
|
|
const { result } = renderHook(() => useRedactParameters());
|
|
|
|
act(() => {
|
|
result.current.updateParameter('redactColor', '#FF0000');
|
|
result.current.updateParameter('customPadding', 0.5);
|
|
result.current.updateParameter('wordsToRedact', ['word1']);
|
|
});
|
|
|
|
// All parameters should be updated
|
|
expect(result.current.parameters.redactColor).toBe('#FF0000');
|
|
expect(result.current.parameters.customPadding).toBe(0.5);
|
|
expect(result.current.parameters.wordsToRedact).toEqual(['word1']);
|
|
|
|
// Other parameters should remain at defaults
|
|
expect(result.current.parameters.mode).toBe('automatic');
|
|
expect(result.current.parameters.useRegex).toBe(false);
|
|
expect(result.current.parameters.wholeWordSearch).toBe(false);
|
|
expect(result.current.parameters.convertPDFToImage).toBe(true);
|
|
});
|
|
|
|
test('should handle array parameter updates correctly', () => {
|
|
const { result } = renderHook(() => useRedactParameters());
|
|
|
|
act(() => {
|
|
result.current.updateParameter('wordsToRedact', ['initial']);
|
|
});
|
|
|
|
expect(result.current.parameters.wordsToRedact).toEqual(['initial']);
|
|
|
|
act(() => {
|
|
result.current.updateParameter('wordsToRedact', ['updated', 'multiple']);
|
|
});
|
|
|
|
expect(result.current.parameters.wordsToRedact).toEqual(['updated', 'multiple']);
|
|
});
|
|
});
|