/** * Regression test: CapabilityMatrix nested supports structure * * Verifies that ProviderCapability uses a nested `supports` object * with all 17 fields, plus optional conversion, quality_tier, cost_tier. */ import { describe, test, expect } from 'bun:test' import { readFileSync } from 'fs' import { join } from 'path' const SOURCE_PATH = join( import.meta.dir, '..', 'src', 'CapabilityMatrix.ts' ) const source = readFileSync(SOURCE_PATH, 'utf-8') describe('CapabilityMatrix nested supports structure', () => { test('ProviderCapability has nested supports object', () => { // The interface should declare a `supports: SupportsMap` field expect(source).toContain('supports: SupportsMap') // The SupportsMap interface should exist expect(source).toContain('export interface SupportsMap') }) test('supports object includes 17 fields', () => { // Extract SupportsMap interface body const match = source.match(/export interface SupportsMap\s*\{([^}]+)\}/s) expect(match).not.toBeNull() const body = match![1] // Count field declarations (lines with a colon) const fields = body .split('\n') .map(line => line.trim()) .filter(line => line.includes(':') && !line.startsWith('//')) expect(fields.length).toBe(17) }) test('supports includes thinking, streaming, tool_use, prompt_cache', () => { expect(source).toContain('thinking: boolean') expect(source).toContain('streaming: boolean') expect(source).toContain('tool_use: boolean') expect(source).toContain('prompt_cache: boolean') }) test('ProviderCapability has quality_tier and cost_tier', () => { expect(source).toContain('quality_tier') expect(source).toContain('cost_tier') }) test('supports() method queries nested supports', () => { // The supports() method should access caps.supports[capability] expect(source).toContain('caps.supports[capability]') }) })