Files
novalon-website/src/lib/csrf.test.ts
T

66 lines
2.0 KiB
TypeScript

import {
generateCSRFToken,
validateCSRFToken,
getCSRFTokenFromStorage,
setCSRFTokenToStorage,
} from './csrf';
describe('csrf', () => {
describe('generateCSRFToken', () => {
it('should generate a token of correct length', () => {
const token = generateCSRFToken();
expect(token).toHaveLength(64);
});
it('should generate unique tokens', () => {
const token1 = generateCSRFToken();
const token2 = generateCSRFToken();
expect(token1).not.toBe(token2);
});
it('should only contain hexadecimal characters', () => {
const token = generateCSRFToken();
expect(token).toMatch(/^[0-9a-f]{64}$/);
});
});
describe('validateCSRFToken', () => {
it('should return true for matching tokens', () => {
const token = generateCSRFToken();
expect(validateCSRFToken(token, token)).toBe(true);
});
it('should return false for mismatched tokens', () => {
const token1 = generateCSRFToken();
const token2 = generateCSRFToken();
expect(validateCSRFToken(token1, token2)).toBe(false);
});
it('should return false for empty tokens', () => {
expect(validateCSRFToken('', '')).toBe(false);
expect(validateCSRFToken('token', '')).toBe(false);
expect(validateCSRFToken('', 'token')).toBe(false);
});
});
describe('getCSRFTokenFromStorage', () => {
it('should return token from sessionStorage', () => {
sessionStorage.setItem('csrf_token', 'test-token');
const token = getCSRFTokenFromStorage();
expect(token).toBe('test-token');
});
it('should return null when token not found', () => {
sessionStorage.removeItem('csrf_token');
const token = getCSRFTokenFromStorage();
expect(token).toBeNull();
});
});
describe('setCSRFTokenToStorage', () => {
it('should set token in sessionStorage', () => {
setCSRFTokenToStorage('test-token');
expect(sessionStorage.getItem('csrf_token')).toBe('test-token');
});
});
});