UNPKG

@aaronshaf/ger

Version:

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

137 lines (115 loc) 4.07 kB
import { describe, expect, test } from 'bun:test' import { Schema } from '@effect/schema' import { CommentInput, FileDiffContent, GerritCredentials } from '@/schemas/gerrit' describe('Gerrit Schemas', () => { describe('GerritCredentials', () => { test('should validate valid credentials', () => { const validCredentials = { host: 'https://gerrit.example.com', username: 'testuser', password: 'testpass123', } const result = Schema.decodeUnknownSync(GerritCredentials)(validCredentials) expect(result).toEqual(validCredentials) }) test('should reject invalid URL', () => { const invalidCredentials = { host: 'not-a-url', username: 'testuser', password: 'testpass123', } expect(() => { Schema.decodeUnknownSync(GerritCredentials)(invalidCredentials) }).toThrow() }) test('should reject empty username', () => { const invalidCredentials = { host: 'https://gerrit.example.com', username: '', password: 'testpass123', } expect(() => { Schema.decodeUnknownSync(GerritCredentials)(invalidCredentials) }).toThrow() }) test('should reject empty password', () => { const invalidCredentials = { host: 'https://gerrit.example.com', username: 'testuser', password: '', } expect(() => { Schema.decodeUnknownSync(GerritCredentials)(invalidCredentials) }).toThrow() }) }) describe('CommentInput', () => { test('should validate valid comment input', () => { const validComment = { message: 'This is a test comment', unresolved: true, } const result = Schema.decodeUnknownSync(CommentInput)(validComment) expect(result).toEqual(validComment) }) test('should validate comment without unresolved flag', () => { const validComment = { message: 'This is a test comment', } const result = Schema.decodeUnknownSync(CommentInput)(validComment) expect(result).toEqual(validComment) }) test('should reject empty message', () => { const invalidComment = { message: '', } expect(() => { Schema.decodeUnknownSync(CommentInput)(invalidComment) }).toThrow() }) }) describe('FileDiffContent', () => { const baseContent = { content: [] } test('should accept change_type REWRITE', () => { const result = Schema.decodeUnknownSync(FileDiffContent)({ ...baseContent, change_type: 'REWRITE', }) expect(result.change_type).toBe('REWRITE') }) test('should accept intraline_status ERROR', () => { const result = Schema.decodeUnknownSync(FileDiffContent)({ ...baseContent, intraline_status: 'ERROR', }) expect(result.intraline_status).toBe('ERROR') }) test('should accept all valid change_type values', () => { const values = ['ADDED', 'MODIFIED', 'DELETED', 'RENAMED', 'COPIED', 'REWRITE'] as const for (const change_type of values) { const result = Schema.decodeUnknownSync(FileDiffContent)({ ...baseContent, change_type }) expect(result.change_type).toBe(change_type) } }) test('should accept all valid intraline_status values', () => { const values = ['OK', 'TIMEOUT', 'ERROR'] as const for (const intraline_status of values) { const result = Schema.decodeUnknownSync(FileDiffContent)({ ...baseContent, intraline_status, }) expect(result.intraline_status).toBe(intraline_status) } }) test('should reject invalid change_type', () => { expect(() => { Schema.decodeUnknownSync(FileDiffContent)({ ...baseContent, change_type: 'FAILURE' }) }).toThrow() }) test('should reject invalid intraline_status', () => { expect(() => { Schema.decodeUnknownSync(FileDiffContent)({ ...baseContent, intraline_status: 'FAILURE' }) }).toThrow() }) }) })