mirror of
https://github.com/Stirling-Tools/Stirling-PDF.git
synced 2025-09-24 04:26:14 +00:00
Add tests
This commit is contained in:
parent
4cfde9e852
commit
697cb6a179
@ -0,0 +1,64 @@
|
|||||||
|
import { describe, expect, test, vi, beforeEach } from 'vitest';
|
||||||
|
import { render, screen } from '@testing-library/react';
|
||||||
|
import { MantineProvider } from '@mantine/core';
|
||||||
|
import AdjustPageScaleSettings from './AdjustPageScaleSettings';
|
||||||
|
import { AdjustPageScaleParameters, PageSize } from '../../../hooks/tools/adjustPageScale/useAdjustPageScaleParameters';
|
||||||
|
|
||||||
|
// Mock useTranslation with predictable return values
|
||||||
|
const mockT = vi.fn((key: string, fallback?: string) => fallback || `mock-${key}`);
|
||||||
|
vi.mock('react-i18next', () => ({
|
||||||
|
useTranslation: () => ({ t: mockT })
|
||||||
|
}));
|
||||||
|
|
||||||
|
// Wrapper component to provide Mantine context
|
||||||
|
const TestWrapper = ({ children }: { children: React.ReactNode }) => (
|
||||||
|
<MantineProvider>{children}</MantineProvider>
|
||||||
|
);
|
||||||
|
|
||||||
|
describe('AdjustPageScaleSettings', () => {
|
||||||
|
const defaultParameters: AdjustPageScaleParameters = {
|
||||||
|
scaleFactor: 1.0,
|
||||||
|
pageSize: PageSize.KEEP,
|
||||||
|
};
|
||||||
|
|
||||||
|
const mockOnParameterChange = vi.fn();
|
||||||
|
|
||||||
|
beforeEach(() => {
|
||||||
|
vi.clearAllMocks();
|
||||||
|
});
|
||||||
|
|
||||||
|
test('should render without crashing', () => {
|
||||||
|
render(
|
||||||
|
<TestWrapper>
|
||||||
|
<AdjustPageScaleSettings
|
||||||
|
parameters={defaultParameters}
|
||||||
|
onParameterChange={mockOnParameterChange}
|
||||||
|
/>
|
||||||
|
</TestWrapper>
|
||||||
|
);
|
||||||
|
|
||||||
|
// Basic render test - component renders without throwing
|
||||||
|
expect(screen.getByText('Scale Factor')).toBeInTheDocument();
|
||||||
|
expect(screen.getByText('Target Page Size')).toBeInTheDocument();
|
||||||
|
});
|
||||||
|
|
||||||
|
test('should render with custom parameters', () => {
|
||||||
|
const customParameters: AdjustPageScaleParameters = {
|
||||||
|
scaleFactor: 2.5,
|
||||||
|
pageSize: PageSize.A4,
|
||||||
|
};
|
||||||
|
|
||||||
|
render(
|
||||||
|
<TestWrapper>
|
||||||
|
<AdjustPageScaleSettings
|
||||||
|
parameters={customParameters}
|
||||||
|
onParameterChange={mockOnParameterChange}
|
||||||
|
/>
|
||||||
|
</TestWrapper>
|
||||||
|
);
|
||||||
|
|
||||||
|
// Component renders successfully with custom parameters
|
||||||
|
expect(screen.getByText('Scale Factor')).toBeInTheDocument();
|
||||||
|
expect(screen.getByText('Target Page Size')).toBeInTheDocument();
|
||||||
|
});
|
||||||
|
});
|
@ -0,0 +1,142 @@
|
|||||||
|
import { describe, expect, test } from 'vitest';
|
||||||
|
import { renderHook, act } from '@testing-library/react';
|
||||||
|
import { useAdjustPageScaleParameters, defaultParameters, PageSize, AdjustPageScaleParametersHook } from './useAdjustPageScaleParameters';
|
||||||
|
|
||||||
|
describe('useAdjustPageScaleParameters', () => {
|
||||||
|
test('should initialize with default parameters', () => {
|
||||||
|
const { result } = renderHook(() => useAdjustPageScaleParameters());
|
||||||
|
|
||||||
|
expect(result.current.parameters).toStrictEqual(defaultParameters);
|
||||||
|
expect(result.current.parameters.scaleFactor).toBe(1.0);
|
||||||
|
expect(result.current.parameters.pageSize).toBe(PageSize.KEEP);
|
||||||
|
});
|
||||||
|
|
||||||
|
test.each([
|
||||||
|
{ paramName: 'scaleFactor' as const, value: 0.5 },
|
||||||
|
{ paramName: 'scaleFactor' as const, value: 2.0 },
|
||||||
|
{ paramName: 'scaleFactor' as const, value: 10.0 },
|
||||||
|
{ paramName: 'pageSize' as const, value: PageSize.A4 },
|
||||||
|
{ paramName: 'pageSize' as const, value: PageSize.LETTER },
|
||||||
|
{ paramName: 'pageSize' as const, value: PageSize.LEGAL },
|
||||||
|
])('should update parameter $paramName to $value', ({ paramName, value }) => {
|
||||||
|
const { result } = renderHook(() => useAdjustPageScaleParameters());
|
||||||
|
|
||||||
|
act(() => {
|
||||||
|
result.current.updateParameter(paramName, value);
|
||||||
|
});
|
||||||
|
|
||||||
|
expect(result.current.parameters[paramName]).toBe(value);
|
||||||
|
});
|
||||||
|
|
||||||
|
test('should reset parameters to defaults', () => {
|
||||||
|
const { result } = renderHook(() => useAdjustPageScaleParameters());
|
||||||
|
|
||||||
|
// First, change some parameters
|
||||||
|
act(() => {
|
||||||
|
result.current.updateParameter('scaleFactor', 2.5);
|
||||||
|
result.current.updateParameter('pageSize', PageSize.A3);
|
||||||
|
});
|
||||||
|
|
||||||
|
expect(result.current.parameters.scaleFactor).toBe(2.5);
|
||||||
|
expect(result.current.parameters.pageSize).toBe(PageSize.A3);
|
||||||
|
|
||||||
|
// Then reset
|
||||||
|
act(() => {
|
||||||
|
result.current.resetParameters();
|
||||||
|
});
|
||||||
|
|
||||||
|
expect(result.current.parameters).toStrictEqual(defaultParameters);
|
||||||
|
});
|
||||||
|
|
||||||
|
test('should return correct endpoint name', () => {
|
||||||
|
const { result } = renderHook(() => useAdjustPageScaleParameters());
|
||||||
|
|
||||||
|
expect(result.current.getEndpointName()).toBe('scale-pages');
|
||||||
|
});
|
||||||
|
|
||||||
|
test.each([
|
||||||
|
{
|
||||||
|
description: 'with default parameters',
|
||||||
|
setup: () => {},
|
||||||
|
expected: true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
description: 'with valid scale factor 0.1',
|
||||||
|
setup: (hook: AdjustPageScaleParametersHook) => {
|
||||||
|
hook.updateParameter('scaleFactor', 0.1);
|
||||||
|
},
|
||||||
|
expected: true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
description: 'with valid scale factor 10.0',
|
||||||
|
setup: (hook: AdjustPageScaleParametersHook) => {
|
||||||
|
hook.updateParameter('scaleFactor', 10.0);
|
||||||
|
},
|
||||||
|
expected: true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
description: 'with A4 page size',
|
||||||
|
setup: (hook: AdjustPageScaleParametersHook) => {
|
||||||
|
hook.updateParameter('pageSize', PageSize.A4);
|
||||||
|
},
|
||||||
|
expected: true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
description: 'with invalid scale factor 0',
|
||||||
|
setup: (hook: AdjustPageScaleParametersHook) => {
|
||||||
|
hook.updateParameter('scaleFactor', 0);
|
||||||
|
},
|
||||||
|
expected: false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
description: 'with negative scale factor',
|
||||||
|
setup: (hook: AdjustPageScaleParametersHook) => {
|
||||||
|
hook.updateParameter('scaleFactor', -0.5);
|
||||||
|
},
|
||||||
|
expected: false
|
||||||
|
}
|
||||||
|
])('should validate parameters correctly $description', ({ setup, expected }) => {
|
||||||
|
const { result } = renderHook(() => useAdjustPageScaleParameters());
|
||||||
|
|
||||||
|
act(() => {
|
||||||
|
setup(result.current);
|
||||||
|
});
|
||||||
|
|
||||||
|
expect(result.current.validateParameters()).toBe(expected);
|
||||||
|
});
|
||||||
|
|
||||||
|
test('should handle all PageSize enum values', () => {
|
||||||
|
const { result } = renderHook(() => useAdjustPageScaleParameters());
|
||||||
|
|
||||||
|
Object.values(PageSize).forEach(pageSize => {
|
||||||
|
act(() => {
|
||||||
|
result.current.updateParameter('pageSize', pageSize);
|
||||||
|
});
|
||||||
|
|
||||||
|
expect(result.current.parameters.pageSize).toBe(pageSize);
|
||||||
|
expect(result.current.validateParameters()).toBe(true);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
test('should handle scale factor edge cases', () => {
|
||||||
|
const { result } = renderHook(() => useAdjustPageScaleParameters());
|
||||||
|
|
||||||
|
// Test very small valid scale factor
|
||||||
|
act(() => {
|
||||||
|
result.current.updateParameter('scaleFactor', 0.01);
|
||||||
|
});
|
||||||
|
expect(result.current.validateParameters()).toBe(true);
|
||||||
|
|
||||||
|
// Test scale factor just above zero
|
||||||
|
act(() => {
|
||||||
|
result.current.updateParameter('scaleFactor', 0.001);
|
||||||
|
});
|
||||||
|
expect(result.current.validateParameters()).toBe(true);
|
||||||
|
|
||||||
|
// Test exactly zero (invalid)
|
||||||
|
act(() => {
|
||||||
|
result.current.updateParameter('scaleFactor', 0);
|
||||||
|
});
|
||||||
|
expect(result.current.validateParameters()).toBe(false);
|
||||||
|
});
|
||||||
|
});
|
Loading…
x
Reference in New Issue
Block a user