88 lines
2.4 KiB
TypeScript
88 lines
2.4 KiB
TypeScript
import { describe, it, expect, vi, beforeEach } from 'vitest';
|
|
|
|
// Mock auth module
|
|
vi.mock('../../auth.js', () => ({
|
|
signIn: vi.fn(),
|
|
saveSession: vi.fn(),
|
|
}));
|
|
|
|
// Mock daemon to avoid file-system reads
|
|
vi.mock('./daemon.js', () => ({
|
|
readMeta: vi.fn().mockReturnValue({
|
|
host: 'localhost',
|
|
port: 14242,
|
|
version: '1.0.0',
|
|
installedAt: '',
|
|
entryPoint: '',
|
|
}),
|
|
}));
|
|
|
|
import { runLogin, getGatewayUrl } from './login.js';
|
|
import { signIn, saveSession } from '../../auth.js';
|
|
import { readMeta } from './daemon.js';
|
|
|
|
const mockSignIn = vi.mocked(signIn);
|
|
const mockSaveSession = vi.mocked(saveSession);
|
|
const mockReadMeta = vi.mocked(readMeta);
|
|
|
|
describe('getGatewayUrl', () => {
|
|
it('returns override URL when provided', () => {
|
|
expect(getGatewayUrl('http://my-gateway:9999')).toBe('http://my-gateway:9999');
|
|
});
|
|
|
|
it('builds URL from meta.json when no override given', () => {
|
|
mockReadMeta.mockReturnValueOnce({
|
|
host: 'myhost',
|
|
port: 8080,
|
|
version: '1.0.0',
|
|
installedAt: '',
|
|
entryPoint: '',
|
|
});
|
|
expect(getGatewayUrl()).toBe('http://myhost:8080');
|
|
});
|
|
|
|
it('falls back to default when meta is null', () => {
|
|
mockReadMeta.mockReturnValueOnce(null);
|
|
expect(getGatewayUrl()).toBe('http://localhost:14242');
|
|
});
|
|
});
|
|
|
|
describe('runLogin', () => {
|
|
const consoleLogSpy = vi.spyOn(console, 'log').mockImplementation(() => {});
|
|
|
|
beforeEach(() => {
|
|
vi.clearAllMocks();
|
|
});
|
|
|
|
it('calls signIn and saveSession on success', async () => {
|
|
const fakeAuth = {
|
|
cookie: 'better-auth.session_token=abc',
|
|
userId: 'u1',
|
|
email: 'admin@test.com',
|
|
};
|
|
mockSignIn.mockResolvedValueOnce(fakeAuth);
|
|
|
|
await runLogin({
|
|
gatewayUrl: 'http://localhost:14242',
|
|
email: 'admin@test.com',
|
|
password: 'password123',
|
|
});
|
|
|
|
expect(mockSignIn).toHaveBeenCalledWith(
|
|
'http://localhost:14242',
|
|
'admin@test.com',
|
|
'password123',
|
|
);
|
|
expect(mockSaveSession).toHaveBeenCalledWith('http://localhost:14242', fakeAuth);
|
|
expect(consoleLogSpy).toHaveBeenCalledWith(expect.stringContaining('admin@test.com'));
|
|
});
|
|
|
|
it('propagates signIn errors', async () => {
|
|
mockSignIn.mockRejectedValueOnce(new Error('Sign-in failed (401): invalid credentials'));
|
|
|
|
await expect(
|
|
runLogin({ gatewayUrl: 'http://localhost:14242', email: 'bad@test.com', password: 'wrong' }),
|
|
).rejects.toThrow('Sign-in failed (401)');
|
|
});
|
|
});
|