mirror of
https://github.com/Stirling-Tools/Stirling-PDF.git
synced 2025-08-28 07:09:23 +00:00

# Description of Changes Implement Add Password and Change Permissions tools in V2 (both in one because Change Permissions is a fake endpoint which just calls Add Password behind the scenes). --------- Co-authored-by: James <james@crosscourtanalytics.com>
111 lines
3.6 KiB
TypeScript
111 lines
3.6 KiB
TypeScript
import { describe, expect, test } from 'vitest';
|
|
import { renderHook, act } from '@testing-library/react';
|
|
import { useChangePermissionsParameters, defaultParameters, ChangePermissionsParameters } from './useChangePermissionsParameters';
|
|
|
|
describe('useChangePermissionsParameters', () => {
|
|
test('should initialize with default parameters', () => {
|
|
const { result } = renderHook(() => useChangePermissionsParameters());
|
|
|
|
expect(result.current.parameters).toStrictEqual(defaultParameters);
|
|
});
|
|
|
|
test('should update individual boolean parameters', () => {
|
|
const { result } = renderHook(() => useChangePermissionsParameters());
|
|
|
|
act(() => {
|
|
result.current.updateParameter('preventAssembly', true);
|
|
});
|
|
|
|
expect(result.current.parameters.preventAssembly).toBe(true);
|
|
expect(result.current.parameters.preventPrinting).toBe(false); // Other parameters should remain unchanged
|
|
|
|
act(() => {
|
|
result.current.updateParameter('preventPrinting', true);
|
|
});
|
|
|
|
expect(result.current.parameters.preventPrinting).toBe(true);
|
|
expect(result.current.parameters.preventAssembly).toBe(true);
|
|
});
|
|
|
|
test('should update all permission parameters', () => {
|
|
const { result } = renderHook(() => useChangePermissionsParameters());
|
|
|
|
const permissionKeys = Object.keys(defaultParameters) as Array<keyof ChangePermissionsParameters>;
|
|
|
|
// Set all to true
|
|
act(() => {
|
|
permissionKeys.forEach(key => {
|
|
result.current.updateParameter(key, true);
|
|
});
|
|
});
|
|
|
|
permissionKeys.forEach(key => {
|
|
expect(result.current.parameters[key]).toBe(true);
|
|
});
|
|
|
|
// Set all to false
|
|
act(() => {
|
|
permissionKeys.forEach(key => {
|
|
result.current.updateParameter(key, false);
|
|
});
|
|
});
|
|
|
|
permissionKeys.forEach(key => {
|
|
expect(result.current.parameters[key]).toBe(false);
|
|
});
|
|
});
|
|
|
|
test('should reset parameters to defaults', () => {
|
|
const { result } = renderHook(() => useChangePermissionsParameters());
|
|
|
|
// First, change some parameters
|
|
act(() => {
|
|
result.current.updateParameter('preventAssembly', true);
|
|
result.current.updateParameter('preventPrinting', true);
|
|
result.current.updateParameter('preventModify', true);
|
|
});
|
|
|
|
expect(result.current.parameters.preventAssembly).toBe(true);
|
|
expect(result.current.parameters.preventPrinting).toBe(true);
|
|
expect(result.current.parameters.preventModify).toBe(true);
|
|
|
|
// Then reset
|
|
act(() => {
|
|
result.current.resetParameters();
|
|
});
|
|
|
|
expect(result.current.parameters).toStrictEqual(defaultParameters);
|
|
});
|
|
|
|
test('should return correct endpoint name', () => {
|
|
const { result } = renderHook(() => useChangePermissionsParameters());
|
|
|
|
expect(result.current.getEndpointName()).toBe('add-password');
|
|
});
|
|
|
|
test('should always validate as true', () => {
|
|
const { result } = renderHook(() => useChangePermissionsParameters());
|
|
|
|
// Default state should be valid
|
|
expect(result.current.validateParameters()).toBe(true);
|
|
|
|
// Set some restrictions - should still be valid
|
|
act(() => {
|
|
result.current.updateParameter('preventAssembly', true);
|
|
result.current.updateParameter('preventPrinting', true);
|
|
});
|
|
|
|
expect(result.current.validateParameters()).toBe(true);
|
|
|
|
// Set all restrictions - should still be valid
|
|
act(() => {
|
|
const permissionKeys = Object.keys(defaultParameters) as Array<keyof ChangePermissionsParameters>;
|
|
permissionKeys.forEach(key => {
|
|
result.current.updateParameter(key, true);
|
|
});
|
|
});
|
|
|
|
expect(result.current.validateParameters()).toBe(true);
|
|
});
|
|
});
|