66 lines
2.0 KiB
TypeScript
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');
|
|
});
|
|
});
|
|
}); |