Skip to main content
Glama
validators.test.ts4.52 kB
/** * Unit Tests for Domain Validators. */ import { validateDomainName, validateTld, validateTlds, parseDomain, isFullDomain, buildDomain, } from '../../src/utils/validators'; import { InvalidDomainError, UnsupportedTldError } from '../../src/utils/errors'; describe('validateDomainName', () => { it('should accept valid domain names', () => { expect(validateDomainName('vibecoding')).toBe('vibecoding'); expect(validateDomainName('my-app')).toBe('my-app'); expect(validateDomainName('test123')).toBe('test123'); expect(validateDomainName('a')).toBe('a'); }); it('should normalize to lowercase', () => { expect(validateDomainName('VibeCoding')).toBe('vibecoding'); expect(validateDomainName('MyApp')).toBe('myapp'); }); it('should trim whitespace', () => { expect(validateDomainName(' vibecoding ')).toBe('vibecoding'); }); it('should reject empty names', () => { expect(() => validateDomainName('')).toThrow(InvalidDomainError); expect(() => validateDomainName(' ')).toThrow(InvalidDomainError); }); it('should reject names starting with hyphen', () => { expect(() => validateDomainName('-invalid')).toThrow(InvalidDomainError); }); it('should reject names ending with hyphen', () => { expect(() => validateDomainName('invalid-')).toThrow(InvalidDomainError); }); it('should reject names with invalid characters', () => { expect(() => validateDomainName('my_app')).toThrow(InvalidDomainError); expect(() => validateDomainName('my.app')).toThrow(InvalidDomainError); expect(() => validateDomainName('my app')).toThrow(InvalidDomainError); expect(() => validateDomainName('my@app')).toThrow(InvalidDomainError); }); it('should reject names that are too long', () => { const longName = 'a'.repeat(64); expect(() => validateDomainName(longName)).toThrow(InvalidDomainError); }); it('should accept maximum length names', () => { const maxName = 'a'.repeat(63); expect(validateDomainName(maxName)).toBe(maxName); }); }); describe('validateTld', () => { it('should accept valid TLDs', () => { expect(validateTld('com')).toBe('com'); expect(validateTld('io')).toBe('io'); expect(validateTld('dev')).toBe('dev'); }); it('should normalize to lowercase', () => { expect(validateTld('COM')).toBe('com'); expect(validateTld('IO')).toBe('io'); }); it('should remove leading dot', () => { expect(validateTld('.com')).toBe('com'); expect(validateTld('.io')).toBe('io'); }); it('should reject empty TLDs', () => { expect(() => validateTld('')).toThrow(UnsupportedTldError); }); it('should reject denied TLDs', () => { expect(() => validateTld('localhost')).toThrow(UnsupportedTldError); expect(() => validateTld('internal')).toThrow(UnsupportedTldError); }); }); describe('validateTlds', () => { it('should return defaults for empty array', () => { expect(validateTlds([])).toEqual(['com', 'io', 'dev']); }); it('should validate and normalize array of TLDs', () => { expect(validateTlds(['com', 'IO', '.dev'])).toEqual(['com', 'io', 'dev']); }); }); describe('parseDomain', () => { it('should parse full domain names', () => { expect(parseDomain('vibecoding.com')).toEqual({ name: 'vibecoding', tld: 'com', }); expect(parseDomain('my-app.io')).toEqual({ name: 'my-app', tld: 'io', }); }); it('should normalize the parsed result', () => { expect(parseDomain('VibeCoding.COM')).toEqual({ name: 'vibecoding', tld: 'com', }); }); it('should reject domains without TLD', () => { expect(() => parseDomain('vibecoding')).toThrow(InvalidDomainError); }); }); describe('isFullDomain', () => { it('should detect full domains', () => { expect(isFullDomain('vibecoding.com')).toBe(true); expect(isFullDomain('my-app.io')).toBe(true); }); it('should detect partial domains', () => { expect(isFullDomain('vibecoding')).toBe(false); expect(isFullDomain('myapp')).toBe(false); }); }); describe('buildDomain', () => { it('should build full domain from parts', () => { expect(buildDomain('vibecoding', 'com')).toBe('vibecoding.com'); expect(buildDomain('my-app', 'io')).toBe('my-app.io'); }); it('should validate parts during build', () => { expect(() => buildDomain('-invalid', 'com')).toThrow(InvalidDomainError); expect(() => buildDomain('valid', 'localhost')).toThrow(UnsupportedTldError); }); });

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/dorukardahan/domain-search-mcp'

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