26 lines
1.2 KiB
TypeScript
26 lines
1.2 KiB
TypeScript
import { describe, expect, it } from 'vitest'
|
|
|
|
import { turkservisComboDetailsUrl } from './turkservis-combo-details'
|
|
|
|
describe('TurkServis read-only details link', () => {
|
|
it('preserves the exact model and drops API query parameters', () => {
|
|
const result = turkservisComboDetailsUrl('https://ai.turkservis.online/v1?key=private', '9router-Team & A')!
|
|
|
|
expect(new URL(result).searchParams.get('model')).toBe('9router-Team & A')
|
|
expect(new URL(result).origin).toBe('https://turkservis.online')
|
|
expect(result).not.toContain('private')
|
|
})
|
|
|
|
it.each([undefined, '', 'invalid', 'http://ai.turkservis.online/v1',
|
|
'https://ai.turkservis.online.evil.test/v1', 'https://other.test/v1',
|
|
'https://user:secret@ai.turkservis.online/v1', 'https://ai.turkservis.online:9090/v1'
|
|
])('does not offer details for an unrelated or unsafe endpoint: %s', apiUrl => {
|
|
expect(turkservisComboDetailsUrl(apiUrl, 'Team')).toBeNull()
|
|
})
|
|
|
|
it('rejects missing and oversized model identities', () => {
|
|
expect(turkservisComboDetailsUrl('https://turkservis.online/v1', '')).toBeNull()
|
|
expect(turkservisComboDetailsUrl('https://turkservis.online/v1', 'x'.repeat(129))).toBeNull()
|
|
})
|
|
})
|