import { describe, it, expect, beforeAll, beforeEach } from 'vitest';
import {
getApiBaseUrl, getIdentity, getApiKey, buildHeaders, baseCtx,
} from '../src/index.js';
import { saveEnv, resetEnv, stubEnv } from './helpers.js';
beforeAll(() => saveEnv());
describe('TestPluginApiKey', () => {
beforeEach(() => resetEnv());
it('returns OG_AUTH_API_KEY when set', () => {
stubEnv({ OG_AUTH_API_KEY: 'secret-root' });
expect(getApiKey()).toBe('secret-root');
});
it('returns null when no key set', () => {
expect(getApiKey()).toBeNull();
});
it('strips whitespace', () => {
stubEnv({ OG_AUTH_API_KEY: ' trimmed ' });
expect(getApiKey()).toBe('trimmed');
});
});
describe('TestHttpPluginHeaders', () => {
beforeEach(() => resetEnv());
it('returns content-type only when no key', () => {
expect(buildHeaders()).toEqual({ 'Content-Type': 'application/json' });
});
it('adds auth headers when key is set', () => {
stubEnv({
OG_AUTH_API_KEY: 'my-key',
OG_ACCOUNT_ID: 'acct-test',
OG_USER_ID: 'u-test',
});
const headers = buildHeaders();
expect(headers['X-API-Key']).toBe('my-key');
expect(headers['X-Account-ID']).toBe('acct-test');
expect(headers['X-User-ID']).toBe('u-test');
expect(headers['Content-Type']).toBe('application/json');
});
it('does not include X-Agent-ID in headers', () => {
stubEnv({ OG_AUTH_API_KEY: 'k' });
expect('X-Agent-ID' in buildHeaders()).toBe(false);
});
});
describe('TestBaseCtx', () => {
beforeEach(() => resetEnv());
it('returns all required keys', () => {
stubEnv({
OG_ACCOUNT_ID: 'acct-demo',
OG_USER_ID: 'u-alice',
OG_AGENT_ID: 'opencode',
});
const ctx = baseCtx('sess-123');
expect(ctx).toEqual({
accountId: 'acct-demo',
userId: 'u-alice',
agentId: 'opencode',
sessionId: 'sess-123',
});
});
it('passes sessionId through', () => {
const ctx = baseCtx('my-session');
expect(ctx.sessionId).toBe('my-session');
});
it('uses defaults when env vars are absent', () => {
const ctx = baseCtx('sess-1');
expect(ctx.accountId).toBe('acct-demo');
expect(ctx.userId).toBe('u-opencode');
expect(ctx.agentId).toBe('opencode');
});
it('prefers OG_MEMORY_* over OG_* variants', () => {
stubEnv({
OG_MEMORY_ACCOUNT_ID: 'mem-acct',
OG_ACCOUNT_ID: 'fallback-acct',
OG_MEMORY_USER_ID: 'mem-user',
OG_USER_ID: 'fallback-user',
OG_MEMORY_AGENT_ID: 'mem-agent',
OG_AGENT_ID: 'fallback-agent',
});
const ctx = baseCtx('s1');
expect(ctx.accountId).toBe('mem-acct');
expect(ctx.userId).toBe('mem-user');
expect(ctx.agentId).toBe('mem-agent');
});
});
describe('TestBaseApiUrl', () => {
beforeEach(() => resetEnv());
it('uses OG_MEMORY_URL env', () => {
stubEnv({ OG_MEMORY_URL: 'http://remote:9000' });
expect(getApiBaseUrl()).toBe('http://remote:9000');
});
it('strips trailing slashes', () => {
stubEnv({ OG_MEMORY_URL: 'http://remote:9000/' });
expect(getApiBaseUrl()).toBe('http://remote:9000');
});
it('defaults to localhost:8090 when no env', () => {
expect(getApiBaseUrl()).toBe('http://localhost:8090');
});
it('strips multiple trailing slashes', () => {
stubEnv({ OG_MEMORY_URL: 'http://remote:9000///' });
expect(getApiBaseUrl()).toBe('http://remote:9000');
});
});