@accounter/server
Version:
Accounter GraphQL server
124 lines • 6 kB
JavaScript
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