UNPKG

@aaronshaf/ger

Version:

Gerrit CLI and SDK - A modern CLI tool and TypeScript SDK for Gerrit Code Review, built with Effect-TS

155 lines (132 loc) 4.44 kB
import { describe, expect, test } from 'bun:test' import { generateMockAccount, generateMockChange, generateMockFileDiff, generateMockFiles, } from '@/test-utils/mock-generator' describe('Mock Generator', () => { describe('generateMockChange', () => { test('should generate a complete mock change object', () => { const change = generateMockChange() expect(change).toMatchObject({ id: 'myProject~master~I8473b95934b5732ac55d26311a706c9c2bde9940', project: 'myProject', branch: 'master', change_id: 'I8473b95934b5732ac55d26311a706c9c2bde9940', subject: 'Implementing new feature', status: 'NEW', created: '2023-12-01 10:00:00.000000000', updated: '2023-12-01 15:30:00.000000000', insertions: 25, deletions: 3, _number: 12345, owner: { _account_id: 1000096, name: 'John Developer', email: 'john@example.com', username: 'jdeveloper', }, }) }) test('should apply overrides to mock change', () => { const overrides = { subject: 'Custom subject', status: 'MERGED' as const, insertions: 100, } const change = generateMockChange(overrides) expect(change.subject).toBe('Custom subject') expect(change.status).toBe('MERGED') expect(change.insertions).toBe(100) // Original values should remain for non-overridden fields expect(change.project).toBe('myProject') expect(change.deletions).toBe(3) }) test('should handle partial owner overrides', () => { const overrides = { owner: { _account_id: 999, name: 'Custom Developer', email: 'custom@example.com', username: 'customdev', }, } const change = generateMockChange(overrides) expect(change.owner).toEqual(overrides.owner) }) }) describe('generateMockFiles', () => { test('should generate mock file info objects', () => { const files = generateMockFiles() expect(Object.keys(files)).toContain('src/main.ts') expect(Object.keys(files)).toContain('tests/main.test.ts') expect(files['src/main.ts']).toMatchObject({ status: 'M', lines_inserted: 15, lines_deleted: 3, size_delta: 120, size: 1200, }) expect(files['tests/main.test.ts']).toMatchObject({ status: 'A', lines_inserted: 45, lines_deleted: 0, size_delta: 450, size: 450, }) }) test('should return consistent file structure', () => { const files1 = generateMockFiles() const files2 = generateMockFiles() expect(Object.keys(files1)).toEqual(Object.keys(files2)) expect(files1['src/main.ts']).toEqual(files2['src/main.ts']) }) }) describe('generateMockFileDiff', () => { test('should generate mock file diff content', () => { const diff = generateMockFileDiff() expect(diff).toMatchObject({ content: [ { ab: ['function main() {', ' console.log("Hello, world!")'], }, { a: [' return 0'], b: [' return process.exit(0)'], }, { ab: ['}'], }, ], change_type: 'MODIFIED', diff_header: ['--- a/src/main.ts', '+++ b/src/main.ts'], }) }) test('should have consistent structure', () => { const diff1 = generateMockFileDiff() const diff2 = generateMockFileDiff() expect(diff1.change_type).toBe('MODIFIED') expect(diff2.change_type).toBe('MODIFIED') expect(diff1.content.length).toBe(diff2.content.length) expect(diff1.diff_header).toEqual(['--- a/src/main.ts', '+++ b/src/main.ts']) expect(diff2.diff_header).toEqual(['--- a/src/main.ts', '+++ b/src/main.ts']) }) }) describe('generateMockAccount', () => { test('should generate mock account object', () => { const account = generateMockAccount() expect(account).toMatchObject({ _account_id: 1000096, name: 'Test User', email: 'test@example.com', username: 'testuser', }) }) test('should return consistent account data', () => { const account1 = generateMockAccount() const account2 = generateMockAccount() expect(account1).toEqual(account2) }) }) })