Skip to main content
Glama
domain-utils.test.ts5.62 kB
/** * Unit tests for domain utility functions */ import { describe, it, test, expect } from 'vitest'; import { extractDomain, isValidDomain, normalizeDomain, hasDomainIndicators, extractAllDomains, } from '../../../src/utils/domain-utils.js'; describe('Domain Utilities', () => { describe('extractDomain', () => { test('should extract domain from simple domain', () => { expect(extractDomain('example.com')).toBe('example.com'); expect(extractDomain('subdomain.example.com')).toBe( 'subdomain.example.com' ); }); test('should extract domain from URLs', () => { expect(extractDomain('https://example.com')).toBe('example.com'); expect(extractDomain('http://example.com/path')).toBe('example.com'); expect(extractDomain('https://www.example.com/path?query=1')).toBe( 'example.com' ); }); test('should extract domain from email addresses', () => { expect(extractDomain('user@example.com')).toBe('example.com'); expect(extractDomain('john.doe@subdomain.example.org')).toBe( 'subdomain.example.org' ); }); test('should handle invalid inputs', () => { expect(extractDomain('')).toBeNull(); expect(extractDomain('not-a-domain')).toBeNull(); expect(extractDomain('company name only')).toBeNull(); expect(extractDomain('123')).toBeNull(); }); test('should extract domain from text containing domains', () => { expect(extractDomain('Visit https://example.com for more')).toBe( 'example.com' ); expect(extractDomain('www.example.com')).toBe('example.com'); }); }); describe('isValidDomain', () => { test('should validate correct domains', () => { expect(isValidDomain('example.com')).toBe(true); expect(isValidDomain('subdomain.example.com')).toBe(true); expect(isValidDomain('test-site.co.uk')).toBe(true); expect(isValidDomain('api.v2.example.io')).toBe(true); }); test('should reject invalid domains', () => { expect(isValidDomain('')).toBe(false); expect(isValidDomain('example')).toBe(false); expect(isValidDomain('.com')).toBe(false); expect(isValidDomain('example.')).toBe(false); expect(isValidDomain('ex..ample.com')).toBe(false); }); test('should handle edge cases', () => { expect(isValidDomain('a.co')).toBe(true); expect(isValidDomain('test.museum')).toBe(true); expect(isValidDomain('123.com')).toBe(true); }); }); describe('normalizeDomain', () => { test('should normalize domains correctly', () => { expect(normalizeDomain('Example.Com')).toBe('example.com'); expect(normalizeDomain('WWW.Example.COM')).toBe('example.com'); expect(normalizeDomain('www.subdomain.example.com')).toBe( 'subdomain.example.com' ); }); test('should handle empty input', () => { expect(normalizeDomain('')).toBe(''); expect(normalizeDomain(' ')).toBe(''); }); test('should preserve subdomain structure', () => { expect(normalizeDomain('api.example.com')).toBe('api.example.com'); expect(normalizeDomain('www.api.example.com')).toBe('api.example.com'); }); }); describe('hasDomainIndicators', () => { test('should detect domain indicators in text', () => { expect(hasDomainIndicators('Visit example.com')).toBe(true); expect(hasDomainIndicators('Email user@company.org')).toBe(true); expect(hasDomainIndicators('Check https://site.io')).toBe(true); expect(hasDomainIndicators('www.example.net')).toBe(true); }); test('should not detect domains in plain text', () => { expect(hasDomainIndicators('company name only')).toBe(false); expect(hasDomainIndicators('search for tech solutions')).toBe(false); expect(hasDomainIndicators('123 456 789')).toBe(false); }); test('should handle edge cases', () => { expect(hasDomainIndicators('')).toBe(false); expect(hasDomainIndicators(' ')).toBe(false); expect(hasDomainIndicators('example')).toBe(false); }); }); describe('extractAllDomains', () => { test('should extract single domain', () => { expect(extractAllDomains('example.com')).toEqual(['example.com']); expect(extractAllDomains('user@example.com')).toEqual(['example.com']); }); test('should extract multiple domains', () => { const result = extractAllDomains( 'Contact user@example.com or visit https://another.org' ); expect(result).toContain('example.com'); expect(result).toContain('another.org'); expect(result).toHaveLength(2); }); test('should remove duplicates', () => { const result = extractAllDomains( 'user@example.com and https://example.com' ); expect(result).toEqual(['example.com']); }); test('should handle complex text', () => { const text = 'Email support@company.com, visit https://www.company.com or try api.company.com'; const result = extractAllDomains(text); expect(result).toContain('company.com'); expect(result).toContain('api.company.com'); }); test('should handle empty input', () => { expect(extractAllDomains('')).toEqual([]); expect(extractAllDomains('no domains here')).toEqual([]); }); test('should normalize extracted domains', () => { const result = extractAllDomains( 'Visit WWW.Example.COM and API.Example.COM' ); expect(result).toContain('example.com'); expect(result).toContain('api.example.com'); }); }); });

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/kesslerio/attio-mcp-server'

If you have feedback or need assistance with the MCP directory API, please join our Discord server