@accounter/server
Version:
Accounter GraphQL server
136 lines (117 loc) • 4.98 kB
text/typescript
import { describe, expect, it } from 'vitest';
import { UUID_REGEX } from '../../shared/constants.js';
import { createBusiness } from './business.js';
import { makeUUID } from '../../demo-fixtures/helpers/deterministic-uuid.js';
import { CountryCode } from '../../shared/enums.js';
describe('Factory: Business', () => {
describe('createBusiness', () => {
it('should create business with default values', () => {
const business = createBusiness();
// Required field with default
expect(business.id).toBeDefined();
expect(business.id).toMatch(UUID_REGEX);
// Boolean defaults
expect(business.exemptDealer).toBe(false);
expect(business.isReceiptEnough).toBe(false);
expect(business.isDocumentsOptional).toBe(false);
// Null/void defaults
expect(business.hebrewName).toBeNull();
expect(business.address).toBeNull();
expect(business.city).toBeNull();
expect(business.zipCode).toBeNull();
expect(business.email).toBeNull();
expect(business.website).toBeNull();
expect(business.phoneNumber).toBeNull();
expect(business.governmentId).toBeNull();
expect(business.suggestions).toBeNull();
expect(business.optionalVat).toBe(false); // NOT NULL constraint
expect(business.country).toBe('ISR'); // NOT NULL constraint, default to Israel
expect(business.pcn874RecordTypeOverride).toBeNull();
});
it('should generate unique IDs by default', () => {
const business1 = createBusiness();
const business2 = createBusiness();
expect(business1.id).not.toBe(business2.id);
});
it('should apply overrides correctly', () => {
const customId = makeUUID('business', 'custom-business');
const business = createBusiness({
id: customId,
name: 'עסק ישראלי',
country: CountryCode.Israel,
exemptDealer: true,
isReceiptEnough: true,
isDocumentsOptional: true,
});
expect(business.id).toBe(customId);
expect(business.name).toBe('עסק ישראלי');
expect(business.country).toBe(CountryCode.Israel);
expect(business.exemptDealer).toBe(true);
expect(business.isReceiptEnough).toBe(true);
expect(business.isDocumentsOptional).toBe(true);
});
it('should allow partial overrides', () => {
const business = createBusiness({
name: 'ספק מקומי',
});
expect(business.name).toBe('ספק מקומי');
expect(business.id).toBeDefined();
expect(business.exemptDealer).toBe(false);
expect(business.country).toBe(CountryCode.Israel); // Default value, not null
});
it('should preserve all required fields', () => {
const business = createBusiness();
// Verify structure matches expected pgtyped interface
expect(business).toHaveProperty('id');
expect(business).toHaveProperty('hebrewName');
expect(business).toHaveProperty('address');
expect(business).toHaveProperty('city');
expect(business).toHaveProperty('zipCode');
expect(business).toHaveProperty('email');
expect(business).toHaveProperty('website');
expect(business).toHaveProperty('phoneNumber');
expect(business).toHaveProperty('governmentId');
expect(business).toHaveProperty('exemptDealer');
expect(business).toHaveProperty('suggestions');
expect(business).toHaveProperty('optionalVat');
expect(business).toHaveProperty('country');
expect(business).toHaveProperty('pcn874RecordTypeOverride');
expect(business).toHaveProperty('isReceiptEnough');
expect(business).toHaveProperty('isDocumentsOptional');
});
it('should handle contact information overrides', () => {
const business = createBusiness({
email: 'supplier@example.com',
phoneNumber: '+972-50-1234567',
website: 'https://example.com',
address: '123 Main St',
city: 'Tel Aviv',
zipCode: '61000',
});
expect(business.email).toBe('supplier@example.com');
expect(business.phoneNumber).toBe('+972-50-1234567');
expect(business.website).toBe('https://example.com');
expect(business.address).toBe('123 Main St');
expect(business.city).toBe('Tel Aviv');
expect(business.zipCode).toBe('61000');
});
it('should handle government ID and exempt dealer scenario', () => {
const business = createBusiness({
governmentId: '123456789',
exemptDealer: true,
optionalVat: true,
});
expect(business.governmentId).toBe('123456789');
expect(business.exemptDealer).toBe(true);
expect(business.optionalVat).toBe(true);
});
it('should allow explicit null overrides', () => {
const business = createBusiness({
hebrewName: null,
country: null,
});
expect(business.hebrewName).toBeNull();
expect(business.country).toBeNull();
});
});
});