UNPKG

review-copilot

Version:

ReviewCopilot - AI-powered code review assistant with customizable prompts

114 lines (113 loc) 4.53 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const selective_review_1 = require("../selective-review"); const config_manager_1 = require("../../../config/config-manager"); const selective_review_service_1 = require("../../../services/selective-review-service"); const git_platform_factory_1 = require("../../../services/git-platform-factory"); const file_content_provider_1 = require("../../../services/file-content-provider"); const ora_1 = __importDefault(require("ora")); const review_utils_1 = require("./review.utils"); jest.useFakeTimers(); describe('selectiveReviewCommand', () => { let configManagerMock; let gitServiceMock; let fileContentProviderMock; let reviewServiceMock; const mockSpinner = ora_1.default.mockSpinnerInstance; beforeAll(() => { jest.useFakeTimers(); }); beforeEach(() => { configManagerMock = { loadConfig: jest.fn() }; gitServiceMock = { getPRDetails: jest.fn() }; fileContentProviderMock = { getFileContent: jest.fn() }; reviewServiceMock = { processSelectiveReview: jest.fn() }; jest.spyOn(config_manager_1.ConfigManager, 'getInstance').mockReturnValue(configManagerMock); jest .spyOn(git_platform_factory_1.GitPlatformFactory, 'createService') .mockReturnValue(gitServiceMock); jest .spyOn(file_content_provider_1.FileContentProviderFactory, 'createProvider') .mockReturnValue(fileContentProviderMock); jest .spyOn(selective_review_service_1.SelectiveReviewService, 'getInstance') .mockReturnValue(reviewServiceMock); jest.clearAllMocks(); // Reset spinner mock state Object.values(mockSpinner).forEach((mock) => { if (typeof mock === 'function' && 'mockClear' in mock) { mock.mockClear(); } }); }); afterEach(async () => { // Run any pending timers first jest.runAllTimers(); // Cleanup spinner mockSpinner._cleanup(); mockSpinner.stop(); // Clear all mocks and timers jest.clearAllTimers(); jest.clearAllMocks(); jest.resetModules(); // Cleanup any other mocks (0, review_utils_1.cleanupMocks)(); }); afterAll(() => { jest.useRealTimers(); }); const baseOptions = { config: 'config.yaml', file: 'file.ts', startLine: 1, endLine: 2, comment: 'review this', }; it('should fail if PR details are missing', async () => { gitServiceMock.getPRDetails.mockResolvedValue(null); const promise = (0, selective_review_1.selectiveReviewCommand)(baseOptions); jest.runAllTimers(); const result = await promise; expect(result).toBe(false); expect(mockSpinner.start).toHaveBeenCalled(); expect(mockSpinner.fail).toHaveBeenCalled(); expect(mockSpinner.stop).toHaveBeenCalled(); }); it('should fail if file content is missing', async () => { gitServiceMock.getPRDetails.mockResolvedValue({ owner: 'alex', repo: 'repo', pullNumber: 1, }); fileContentProviderMock.getFileContent.mockResolvedValue(null); const promise = (0, selective_review_1.selectiveReviewCommand)(baseOptions); jest.runAllTimers(); const result = await promise; expect(result).toBe(false); expect(mockSpinner.start).toHaveBeenCalled(); expect(mockSpinner.fail).toHaveBeenCalled(); expect(mockSpinner.stop).toHaveBeenCalled(); }); it('should fail if line range is invalid', async () => { gitServiceMock.getPRDetails.mockResolvedValue({ owner: 'alex', repo: 'repo', pullNumber: 1, }); fileContentProviderMock.getFileContent.mockResolvedValue('line1\nline2'); const promise = (0, selective_review_1.selectiveReviewCommand)({ ...baseOptions, startLine: 1, endLine: 10, }); jest.runAllTimers(); const result = await promise; expect(result).toBe(false); expect(mockSpinner.start).toHaveBeenCalled(); expect(mockSpinner.fail).toHaveBeenCalled(); expect(mockSpinner.stop).toHaveBeenCalled(); }); });