import { ModelName } from './ModelName.js';
describe('ModelName', () => {
describe('Should_CreateValidModel_When_AllowedName', () => {
it('creates model with default name', () => {
const model = ModelName.create();
expect(model.toString()).toBe('gemini-2.0-flash-exp');
});
it('creates model with gemini-2.0-flash-exp', () => {
const model = ModelName.create('gemini-2.0-flash-exp');
expect(model.toString()).toBe('gemini-2.0-flash-exp');
});
it('creates model with gemini-1.5-flash', () => {
const model = ModelName.create('gemini-1.5-flash');
expect(model.toString()).toBe('gemini-1.5-flash');
});
it('creates model with gemini-1.5-pro', () => {
const model = ModelName.create('gemini-1.5-pro');
expect(model.toString()).toBe('gemini-1.5-pro');
});
});
describe('Should_ThrowError_When_InvalidModelName', () => {
it('throws error for unknown model', () => {
expect(() => ModelName.create('gpt-4')).toThrow('Unsupported model name: gpt-4');
});
it('throws error for empty string', () => {
expect(() => ModelName.create('')).toThrow('Unsupported model name: ');
});
it('throws error for invalid gemini model', () => {
expect(() => ModelName.create('gemini-invalid')).toThrow('Unsupported model name: gemini-invalid');
});
});
describe('Should_HandleEquality_When_ComparingModels', () => {
it('returns true for same model names', () => {
const model1 = ModelName.create('gemini-2.0-flash-exp');
const model2 = ModelName.create('gemini-2.0-flash-exp');
expect(model1.equals(model2)).toBe(true);
});
it('returns false for different model names', () => {
const model1 = ModelName.create('gemini-2.0-flash-exp');
const model2 = ModelName.create('gemini-1.5-flash');
expect(model1.equals(model2)).toBe(false);
});
});
describe('Should_ListAllowedModels_When_Requested', () => {
it('returns list of allowed model names', () => {
const allowedModels = ModelName.getAllowedModels();
expect(allowedModels).toContain('gemini-2.0-flash-exp');
expect(allowedModels).toContain('gemini-1.5-flash');
expect(allowedModels).toContain('gemini-1.5-pro');
expect(allowedModels.length).toBeGreaterThan(0);
});
});
});