mirror of
https://github.com/mediacms-io/mediacms.git
synced 2026-01-20 15:22:58 -05:00
57 lines
1.9 KiB
TypeScript
57 lines
1.9 KiB
TypeScript
import { csrfToken } from '../../../src/static/js/utils/helpers/csrfToken';
|
|
|
|
const setupDocumentCookie = () => {
|
|
if (typeof document === 'undefined') {
|
|
globalThis.document = { cookie: '' } as unknown as Document;
|
|
}
|
|
};
|
|
|
|
const setDocumentCookie = (value: string) => {
|
|
if (typeof document !== 'undefined') {
|
|
Object.defineProperty(document, 'cookie', { value, writable: true, configurable: true });
|
|
}
|
|
};
|
|
|
|
describe('js/utils/helpers', () => {
|
|
describe('csrfToken', () => {
|
|
const originalCookie = document.cookie;
|
|
|
|
beforeAll(() => {
|
|
// Initialize document environment
|
|
setupDocumentCookie();
|
|
});
|
|
|
|
afterEach(() => {
|
|
// Restore original cookie string
|
|
setDocumentCookie(originalCookie);
|
|
});
|
|
|
|
test('Returns null when document.cookie is empty', () => {
|
|
setDocumentCookie('');
|
|
expect(csrfToken()).toBeNull();
|
|
});
|
|
|
|
test('Returns null when csrftoken is not present', () => {
|
|
setDocumentCookie('sessionid=abc; theme=dark');
|
|
expect(csrfToken()).toBeNull();
|
|
});
|
|
|
|
test('Finds and decodes the csrftoken cookie value', () => {
|
|
const token = encodeURIComponent('a b+c%20');
|
|
setDocumentCookie(`sessionid=abc; csrftoken=${token}; theme=dark`);
|
|
expect(csrfToken()).toBe('a b+c%20');
|
|
});
|
|
|
|
test('Ignores leading spaces and matches exact prefix csrftoken=', () => {
|
|
setDocumentCookie(' sessionid=xyz; csrftoken=secure123; other=value');
|
|
expect(csrfToken()).toBe('secure123');
|
|
});
|
|
|
|
test('Stops scanning once csrftoken is found', () => {
|
|
// Ensure csrftoken occurs before other long tail cookies
|
|
setDocumentCookie('csrftoken=first; a=1; b=2; c=3; d=4; e=5');
|
|
expect(csrfToken()).toBe('first');
|
|
});
|
|
});
|
|
});
|