UNPKG

sourcesailor

Version:

A CLI tool for analyzing and documenting codebases

55 lines (54 loc) 2.31 kB
import { describe, it, expect, vi, beforeEach } from 'vitest'; import { handler } from '../commands/setExpertise.mjs'; import * as utils from '../utils.mjs'; import * as inquirer from '@inquirer/prompts'; import chalk from 'chalk'; vi.mock('../utils.mjs'); vi.mock('@inquirer/prompts'); vi.mock('chalk', () => ({ default: { blue: vi.fn((str) => str), yellow: vi.fn((str) => str), green: vi.fn((str) => str), red: vi.fn((str) => str), }, })); describe('setExpertise command', () => { beforeEach(() => { vi.resetAllMocks(); vi.mocked(utils.readConfig).mockReturnValue({}); vi.mocked(utils.writeConfig).mockResolvedValue(undefined); }); it('should set expertise levels for languages and frameworks', async () => { vi.mocked(inquirer.confirm) .mockResolvedValueOnce(true) // JavaScript .mockResolvedValueOnce(true) // React .mockResolvedValueOnce(false) // Angular .mockResolvedValueOnce(false) // Vue.js .mockResolvedValueOnce(false) // Express .mockResolvedValueOnce(false) // Node.js .mockResolvedValueOnce(false); // Python vi.mocked(inquirer.select) .mockResolvedValueOnce('intermediate') // JavaScript .mockResolvedValueOnce('expert'); // React await handler(); expect(utils.writeConfig).toHaveBeenCalledWith({ userExpertise: { JavaScript: 'intermediate', React: 'expert', }, }); expect(chalk.green).toHaveBeenCalledWith('Expertise levels have been successfully set and saved!'); }); it('should handle when user has no experience in any language', async () => { vi.mocked(inquirer.confirm).mockResolvedValue(false); await handler(); expect(utils.writeConfig).toHaveBeenCalledWith({ userExpertise: {} }); expect(chalk.green).toHaveBeenCalledWith('Expertise levels have been successfully set and saved!'); }); it('should handle errors during the process', async () => { const mockError = new Error('Test error'); vi.mocked(utils.readConfig).mockImplementation(() => { throw mockError; }); await expect(handler()).resolves.not.toThrow(); }); });