mirror of
https://github.com/google-gemini/gemini-cli.git
synced 2026-04-02 17:31:05 -07:00
156 lines
4.2 KiB
TypeScript
156 lines
4.2 KiB
TypeScript
/**
|
|
* @license
|
|
* Copyright 2025 Google LLC
|
|
* SPDX-License-Identifier: Apache-2.0
|
|
*/
|
|
|
|
import { describe, it, expect, beforeEach, afterEach } from 'vitest';
|
|
import { ApiKeyAuthProvider } from './api-key-provider.js';
|
|
|
|
describe('ApiKeyAuthProvider', () => {
|
|
const originalEnv = process.env;
|
|
|
|
beforeEach(() => {
|
|
process.env = { ...originalEnv };
|
|
});
|
|
|
|
afterEach(() => {
|
|
process.env = originalEnv;
|
|
});
|
|
|
|
describe('initialization', () => {
|
|
it('should initialize with literal API key', async () => {
|
|
const provider = new ApiKeyAuthProvider({
|
|
type: 'apiKey',
|
|
key: 'my-api-key',
|
|
});
|
|
await provider.initialize();
|
|
|
|
const headers = await provider.headers();
|
|
expect(headers).toEqual({ 'X-API-Key': 'my-api-key' });
|
|
});
|
|
|
|
it('should resolve API key from environment variable', async () => {
|
|
process.env['TEST_API_KEY'] = 'env-api-key';
|
|
|
|
const provider = new ApiKeyAuthProvider({
|
|
type: 'apiKey',
|
|
key: '$TEST_API_KEY',
|
|
});
|
|
await provider.initialize();
|
|
|
|
const headers = await provider.headers();
|
|
expect(headers).toEqual({ 'X-API-Key': 'env-api-key' });
|
|
});
|
|
|
|
it('should throw if environment variable is not set', async () => {
|
|
delete process.env['MISSING_KEY'];
|
|
|
|
const provider = new ApiKeyAuthProvider({
|
|
type: 'apiKey',
|
|
key: '$MISSING_KEY',
|
|
});
|
|
|
|
await expect(provider.initialize()).rejects.toThrow(
|
|
"Environment variable 'MISSING_KEY' is not set",
|
|
);
|
|
});
|
|
});
|
|
|
|
describe('headers', () => {
|
|
it('should throw if not initialized', async () => {
|
|
const provider = new ApiKeyAuthProvider({
|
|
type: 'apiKey',
|
|
key: 'test-key',
|
|
});
|
|
|
|
await expect(provider.headers()).rejects.toThrow('not initialized');
|
|
});
|
|
|
|
it('should use custom header name', async () => {
|
|
const provider = new ApiKeyAuthProvider({
|
|
type: 'apiKey',
|
|
key: 'my-key',
|
|
name: 'X-Custom-Auth',
|
|
});
|
|
await provider.initialize();
|
|
|
|
const headers = await provider.headers();
|
|
expect(headers).toEqual({ 'X-Custom-Auth': 'my-key' });
|
|
});
|
|
|
|
it('should use default header name X-API-Key for header location', async () => {
|
|
const provider = new ApiKeyAuthProvider({
|
|
type: 'apiKey',
|
|
key: 'my-key',
|
|
in: 'header',
|
|
});
|
|
await provider.initialize();
|
|
|
|
const headers = await provider.headers();
|
|
expect(headers).toEqual({ 'X-API-Key': 'my-key' });
|
|
});
|
|
});
|
|
|
|
describe('query and cookie locations', () => {
|
|
it('should return empty headers for query location', async () => {
|
|
const provider = new ApiKeyAuthProvider({
|
|
type: 'apiKey',
|
|
key: 'my-key',
|
|
in: 'query',
|
|
});
|
|
await provider.initialize();
|
|
|
|
const headers = await provider.headers();
|
|
expect(headers).toEqual({});
|
|
});
|
|
|
|
it('should expose key for query via getKeyForQuery', async () => {
|
|
const provider = new ApiKeyAuthProvider({
|
|
type: 'apiKey',
|
|
key: 'my-key',
|
|
in: 'query',
|
|
name: 'apikey',
|
|
});
|
|
await provider.initialize();
|
|
|
|
const queryKey = provider.getKeyForQuery();
|
|
expect(queryKey).toEqual({ name: 'apikey', value: 'my-key' });
|
|
});
|
|
|
|
it('should return undefined from getKeyForQuery when location is header', async () => {
|
|
const provider = new ApiKeyAuthProvider({
|
|
type: 'apiKey',
|
|
key: 'my-key',
|
|
in: 'header',
|
|
});
|
|
await provider.initialize();
|
|
|
|
expect(provider.getKeyForQuery()).toBeUndefined();
|
|
});
|
|
|
|
it('should expose key for cookie via getKeyForCookie', async () => {
|
|
const provider = new ApiKeyAuthProvider({
|
|
type: 'apiKey',
|
|
key: 'my-key',
|
|
in: 'cookie',
|
|
name: 'auth_cookie',
|
|
});
|
|
await provider.initialize();
|
|
|
|
const cookieKey = provider.getKeyForCookie();
|
|
expect(cookieKey).toEqual({ name: 'auth_cookie', value: 'my-key' });
|
|
});
|
|
});
|
|
|
|
describe('type property', () => {
|
|
it('should have type apiKey', () => {
|
|
const provider = new ApiKeyAuthProvider({
|
|
type: 'apiKey',
|
|
key: 'test',
|
|
});
|
|
expect(provider.type).toBe('apiKey');
|
|
});
|
|
});
|
|
});
|