Nick: added canonical tests

This commit is contained in:
Nicolas 2025-01-03 23:16:33 -03:00
parent aef040b41e
commit f25c0c6d21
2 changed files with 44 additions and 4 deletions

View File

@ -0,0 +1,39 @@
import { normalizeUrl } from './canonical-url';
describe('normalizeUrl', () => {
it('should remove protocol and www from URL', () => {
const url = 'https://www.example.com';
const expected = 'example.com';
expect(normalizeUrl(url)).toBe(expected);
});
it('should remove only protocol if www is not present', () => {
const url = 'https://example.com';
const expected = 'example.com';
expect(normalizeUrl(url)).toBe(expected);
});
it('should handle URLs without protocol', () => {
const url = 'www.example.com';
const expected = 'example.com';
expect(normalizeUrl(url)).toBe(expected);
});
it('should handle URLs without protocol and www', () => {
const url = 'example.com';
const expected = 'example.com';
expect(normalizeUrl(url)).toBe(expected);
});
it('should handle URLs with paths', () => {
const url = 'https://www.example.com/path/to/resource';
const expected = 'example.com';
expect(normalizeUrl(url)).toBe(expected);
});
it('should handle invalid URLs gracefully', () => {
const url = 'not a valid url';
const expected = 'not a valid url';
expect(normalizeUrl(url)).toBe(expected);
});
});

View File

@ -1,7 +1,8 @@
export function normalizeUrl(url: string) { export function normalizeUrl(url: string) {
url = url.replace(/^https?:\/\//, "").replace(/^www\./, ""); try {
if (url.endsWith("/")) { const hostname = new URL(url).hostname;
url = url.slice(0, -1); return hostname.replace(/^www\./, "");
} catch (error) {
return url.replace(/^https?:\/\//, "").replace(/^www\./, "").split('/')[0];
} }
return url;
} }