@accounter/server
Version:
Accounter GraphQL server
63 lines (61 loc) • 2.17 kB
text/typescript
import { makeUUIDLegacy } from '../../demo-fixtures/helpers/deterministic-uuid.js';
import { CountryCode } from '../../shared/enums.js';
import { FixtureBusinesses } from '../helpers/fixture-types.js';
/**
* Business factory for test fixtures
*
* Creates a minimal business object ready for insertion via pgtyped.
*
* @param overrides - Optional overrides for any business field
* @returns Business object matching FixtureBusinesses['businesses'][0] shape
*
* @remarks
* - id defaults to deterministic UUID if not provided
* - name defaults to overrides.id ?? defaultId (intelligent fallback for display)
* - All other fields default to null/void (database will use defaults or accept nulls)
* - exemptDealer defaults to false for typical scenarios
* - isReceiptEnough defaults to false (invoices required by default)
* - isDocumentsOptional defaults to false (documents required by default)
*
* @example
* ```typescript
* // Minimal business (uses defaults)
* const business = createBusiness({ id: makeUUID('business', 'supplier-1') });
*
* // Business with custom fields
* const supplier = createBusiness({
* id: makeUUID('business', 'supplier-usd'),
* name: 'American Supplier',
* country: 'USA',
* isReceiptEnough: true,
* });
* ```
*/
export function createBusiness(
overrides?: Partial<FixtureBusinesses['businesses'][number]>,
): FixtureBusinesses['businesses'][number] {
const defaultId = makeUUIDLegacy();
return {
id: defaultId,
// Intelligent name defaulting: use provided id, or use generated UUID
// This ensures display name is always meaningful even when only id is specified
name: overrides?.id ?? defaultId,
hebrewName: null,
address: null,
city: null,
zipCode: null,
email: null,
website: null,
phoneNumber: null,
governmentId: null,
exemptDealer: false,
suggestions: null,
optionalVat: false, // Database requires NOT NULL
country: CountryCode.Israel, // Database requires NOT NULL, default to Israel
pcn874RecordTypeOverride: null,
isReceiptEnough: false,
isDocumentsOptional: false,
ownerId: defaultId,
...overrides,
};
}