openreader/tests/unit/layout-metadata.vitest.spec.ts
Richard R 3c08b9e406 feat(shared): centralize origin validation logic and update metadata usage
Move origin extraction to shared utility for consistent validation across
server and client modules. Update layout metadata to use the shared origin
helper, improving maintainability and deployment flexibility. Add unit tests
for layout metadata to ensure correct origin handling.
2026-05-31 16:41:47 -06:00

27 lines
1.3 KiB
TypeScript

import { describe, expect, test } from 'vitest';
import { tryGetOrigin } from '../../src/lib/shared/urls';
describe('tryGetOrigin utility function', () => {
test('returns null for undefined, null, or empty string', () => {
expect(tryGetOrigin(undefined)).toBeNull();
expect(tryGetOrigin('')).toBeNull();
});
test('extracts origin from valid HTTP/HTTPS URLs', () => {
expect(tryGetOrigin('http://localhost:3000')).toBe('http://localhost:3000');
expect(tryGetOrigin('https://openreader.richardr.dev')).toBe('https://openreader.richardr.dev');
expect(tryGetOrigin('https://my-custom-domain.com/some/path?query=1')).toBe('https://my-custom-domain.com');
});
test('returns null for malformed URLs/strings without protocols', () => {
expect(tryGetOrigin('malformed-url')).toBeNull();
expect(tryGetOrigin('localhost:3000')).toBeNull();
expect(tryGetOrigin('my-custom-domain.com')).toBeNull();
});
test('returns null for invalid protocols/schemes', () => {
expect(tryGetOrigin('ftp://some-server.com')).toBe('ftp://some-server.com'); // standard URL supports ftp
expect(tryGetOrigin('invalid://foo')).toBeNull(); // non-standard/unsupported origins return null
expect(tryGetOrigin('http://[invalid-ipv6]')).toBeNull();
});
});