buroventures-harald-code-core
Version:
Harald Code Core - Core functionality for AI-powered coding assistant
65 lines • 2.37 kB
JavaScript
/**
* @license
* Copyright 2025 Google LLC
* SPDX-License-Identifier: Apache-2.0
*/
import { describe, it, expect, vi, beforeEach } from 'vitest';
import { setupUser, ProjectIdRequiredError } from './setup.js';
import { CodeAssistServer } from '../code_assist/server.js';
import { UserTierId } from './types.js';
vi.mock('../code_assist/server.js');
const mockPaidTier = {
id: UserTierId.STANDARD,
name: 'paid',
description: 'Paid tier',
};
describe('setupUser', () => {
let mockLoad;
let mockOnboardUser;
beforeEach(() => {
vi.resetAllMocks();
mockLoad = vi.fn();
mockOnboardUser = vi.fn().mockResolvedValue({
done: true,
response: {
cloudaicompanionProject: {
id: 'server-project',
},
},
});
vi.mocked(CodeAssistServer).mockImplementation(() => ({
loadCodeAssist: mockLoad,
onboardUser: mockOnboardUser,
}));
});
it('should use GOOGLE_CLOUD_PROJECT when set', async () => {
process.env.GOOGLE_CLOUD_PROJECT = 'test-project';
mockLoad.mockResolvedValue({
currentTier: mockPaidTier,
});
await setupUser({});
expect(CodeAssistServer).toHaveBeenCalledWith({}, 'test-project', {}, '', undefined);
});
it('should treat empty GOOGLE_CLOUD_PROJECT as undefined and use project from server', async () => {
process.env.GOOGLE_CLOUD_PROJECT = '';
mockLoad.mockResolvedValue({
cloudaicompanionProject: 'server-project',
currentTier: mockPaidTier,
});
const projectId = await setupUser({});
expect(CodeAssistServer).toHaveBeenCalledWith({}, undefined, {}, '', undefined);
expect(projectId).toEqual({
projectId: 'server-project',
userTier: 'standard-tier',
});
});
it('should throw ProjectIdRequiredError when no project ID is available', async () => {
delete process.env.GOOGLE_CLOUD_PROJECT;
// And the server itself requires a project ID internally
vi.mocked(CodeAssistServer).mockImplementation(() => {
throw new ProjectIdRequiredError();
});
await expect(setupUser({})).rejects.toThrow(ProjectIdRequiredError);
});
});
//# sourceMappingURL=setup.test.js.map