UNPKG

@accounter/server

Version:
124 lines 6 kB
import { describe, expect, it } from 'vitest'; import { UUID_REGEX } from '../../shared/constants.js'; import { createCharge } from './charge.js'; import { makeUUID } from '../../demo-fixtures/helpers/deterministic-uuid.js'; describe('Factory: Charge', () => { describe('createCharge', () => { it('should create charge with required fields', () => { const ownerId = makeUUID('business', 'test-owner'); const charge = createCharge({ owner_id: ownerId }); // Required field expect(charge.owner_id).toBe(ownerId); // Auto-generated fields expect(charge.id).toBeDefined(); expect(charge.id).toMatch(UUID_REGEX); expect(charge.tax_category_id).toBeDefined(); expect(charge.tax_category_id).toMatch(UUID_REGEX); // Default values (some fields have NOT NULL constraints) expect(charge.type).toBeNull(); expect(charge.accountant_status).toBe('PENDING'); // NOT NULL constraint expect(charge.user_description).toBeNull(); expect(charge.optional_vat).toBe(false); // NOT NULL constraint expect(charge.documents_optional_flag).toBe(false); // NOT NULL constraint }); it('should generate unique IDs by default', () => { const ownerId = makeUUID('business', 'test-owner'); const charge1 = createCharge({ owner_id: ownerId }); const charge2 = createCharge({ owner_id: ownerId }); expect(charge1.id).not.toBe(charge2.id); }); it('should accept tax_category_id in params', () => { const ownerId = makeUUID('business', 'test-owner'); const taxCategoryId = makeUUID('tax-category', 'tax-cat-1'); const charge = createCharge({ owner_id: ownerId, tax_category_id: taxCategoryId, }); expect(charge.tax_category_id).toBe(taxCategoryId); }); it('should accept user_description in params', () => { const ownerId = makeUUID('business', 'test-owner'); const charge = createCharge({ owner_id: ownerId, user_description: 'Office supplies', }); expect(charge.user_description).toBe('Office supplies'); }); it('should apply overrides correctly', () => { const ownerId = makeUUID('business', 'test-owner'); const customId = makeUUID('charge', 'custom-charge'); const charge = createCharge({ owner_id: ownerId }, { id: customId, type: 'PAYROLL', accountant_status: 'REVIEWED', optional_vat: true, documents_optional_flag: true, }); expect(charge.id).toBe(customId); expect(charge.type).toBe('PAYROLL'); expect(charge.accountant_status).toBe('REVIEWED'); expect(charge.optional_vat).toBe(true); expect(charge.documents_optional_flag).toBe(true); }); it('should allow partial overrides', () => { const ownerId = makeUUID('business', 'test-owner'); const charge = createCharge({ owner_id: ownerId, user_description: 'Consulting fee', }, { type: 'INCOME', }); expect(charge.user_description).toBe('Consulting fee'); expect(charge.type).toBe('INCOME'); expect(charge.id).toBeDefined(); expect(charge.accountant_status).toBe('PENDING'); // Default value }); it('should preserve all required fields', () => { const ownerId = makeUUID('business', 'test-owner'); const charge = createCharge({ owner_id: ownerId }); // Verify structure matches expected interface expect(charge).toHaveProperty('id'); expect(charge).toHaveProperty('owner_id'); expect(charge).toHaveProperty('type'); expect(charge).toHaveProperty('accountant_status'); expect(charge).toHaveProperty('user_description'); expect(charge).toHaveProperty('tax_category_id'); expect(charge).toHaveProperty('optional_vat'); expect(charge).toHaveProperty('documents_optional_flag'); }); it('should handle all params and overrides together', () => { const ownerId = makeUUID('business', 'test-owner'); const taxCategoryId = makeUUID('tax-category', 'tax-cat-2'); const customId = makeUUID('charge', 'custom-charge-2'); const charge = createCharge({ owner_id: ownerId, tax_category_id: taxCategoryId, user_description: 'Travel expenses', }, { id: customId, type: 'BUSINESS_TRIP', accountant_status: 'PENDING', optional_vat: false, documents_optional_flag: false, }); expect(charge.id).toBe(customId); expect(charge.owner_id).toBe(ownerId); expect(charge.tax_category_id).toBe(taxCategoryId); expect(charge.user_description).toBe('Travel expenses'); expect(charge.type).toBe('BUSINESS_TRIP'); expect(charge.accountant_status).toBe('PENDING'); expect(charge.optional_vat).toBe(false); expect(charge.documents_optional_flag).toBe(false); }); it('should allow explicit null overrides', () => { const ownerId = makeUUID('business', 'test-owner'); const charge = createCharge({ owner_id: ownerId }, { user_description: null, optional_vat: null, }); expect(charge.user_description).toBeNull(); expect(charge.optional_vat).toBeNull(); }); }); }); //# sourceMappingURL=charge.test.js.map