51 lines
1.5 KiB
TypeScript
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()
|
|
})
|
|
})
|
|
})
|