toes/src/server/proxy.test.ts
2026-02-15 17:30:41 -08:00

51 lines
1.5 KiB
TypeScript

import { describe, expect, test } from 'bun:test'
import { extractSubdomain } from './proxy'
describe('extractSubdomain', () => {
describe('*.localhost (dev)', () => {
test('should extract subdomain from clock.localhost:3000', () => {
expect(extractSubdomain('clock.localhost:3000')).toBe('clock')
})
test('should extract subdomain from clock.localhost', () => {
expect(extractSubdomain('clock.localhost')).toBe('clock')
})
test('should return null for bare localhost:3000', () => {
expect(extractSubdomain('localhost:3000')).toBeNull()
})
test('should return null for bare localhost', () => {
expect(extractSubdomain('localhost')).toBeNull()
})
test('should handle hyphenated app names', () => {
expect(extractSubdomain('my-app.localhost:3000')).toBe('my-app')
})
})
describe('*.toes.local (production)', () => {
test('should extract subdomain from clock.toes.local', () => {
expect(extractSubdomain('clock.toes.local')).toBe('clock')
})
test('should return null for bare toes.local', () => {
expect(extractSubdomain('toes.local')).toBeNull()
})
test('should handle hyphenated app names', () => {
expect(extractSubdomain('my-app.toes.local')).toBe('my-app')
})
})
describe('other hosts', () => {
test('should return null for plain IP', () => {
expect(extractSubdomain('192.168.1.50:3000')).toBeNull()
})
test('should return null for empty string', () => {
expect(extractSubdomain('')).toBeNull()
})
})
})