import type { SalesOrderLineInput } from "../command/createSalesOrder"; import { markInvariantsSatisfied as markSalesItemInvariantsSatisfied, type SalesItem as SalesItemAggregate, } from "../domain/salesItem"; import { markInvariantsSatisfied as markSalesOrderInvariantsSatisfied, type SalesOrder as SalesOrderAggregate, type SalesOrderLine as SalesOrderLineAggregate, } from "../domain/salesOrder"; import type { Company, Item, CustomerAccountReference } from "./moduleMocks"; const createdAt = new Date("2024-01-01T00:00:00.000Z"); export const baseCompany = { id: "company-1", status: "ACTIVE", legalName: "Test Corp", baseCurrencyId: "currency-1", taxId: null, registrationNumber: null, street: "123 Main St", city: "New York", state: "NY", postalCode: "10001", country: "US", createdAt, updatedAt: createdAt, } as const satisfies Company; export const baseCustomer = { id: "customer-account-1", companyId: baseCompany.id, accountStatus: "ACTIVE", partnerStatus: "ACTIVE", partnerId: "partner-1", code: "ACCOUNT-001", accountName: "Customer account", partnerName: "Customer One", preferredCurrencyId: null, } satisfies CustomerAccountReference; export const inactiveCustomer = { ...baseCustomer, id: "customer-account-2", accountStatus: "INACTIVE", partnerStatus: "ACTIVE", } satisfies CustomerAccountReference; export const baseUnit = { id: "unit-1", categoryId: "uom-category-1", symbol: "EA", status: "ACTIVE" as const, }; export const compatibleUnit = { ...baseUnit, id: "unit-2", symbol: "BOX", }; export const baseItem = { id: "item-1", sku: "ITEM-001", name: "Base Item", barcode: null, unitId: baseUnit.id, status: "ACTIVE", companyId: "company-1", createdAt, updatedAt: createdAt, } as const satisfies Item & { companyId: string }; export const inactiveItem = { ...baseItem, id: "item-2", status: "INACTIVE", } as const satisfies Item & { companyId: string }; export const otherCompanyItem = { ...baseItem, id: "item-3", companyId: "company-2", } as const satisfies Item & { companyId: string }; export const baseOrderLineInput = { itemId: baseItem.id, quantity: "10", unitPrice: "100", unitId: baseUnit.id, } satisfies SalesOrderLineInput; // --- Domain aggregates --- export const baseSalesItem: SalesItemAggregate = markSalesItemInvariantsSatisfied({ id: "sales-item-1", itemId: baseItem.id, requiresPhysicalFulfillment: true, customFields: {}, }); export const nonPhysicalSalesItem: SalesItemAggregate = { ...baseSalesItem, id: "sales-item-2", requiresPhysicalFulfillment: false, }; export const baseSalesOrderLine: SalesOrderLineAggregate = { id: "sales-order-line-1", itemId: baseItem.id, description: "Line 1", quantity: "10", unitPrice: "100", unitId: baseUnit.id, requiresPhysicalFulfillment: true, fulfilledQuantity: "0", billedQuantity: "0", customFields: {}, }; export const baseSalesOrder: SalesOrderAggregate = markSalesOrderInvariantsSatisfied({ id: "sales-order-1", header: { companyId: baseCompany.id, customerAccountId: baseCustomer.id, currencyId: baseCompany.baseCurrencyId, orderStatus: "DRAFT", fulfillmentStatus: null, billingStatus: null, orderDate: createdAt, shippingAddress: "1 Main St", billingAddress: "1 Main St", rejectionReason: null, closeReason: null, customFields: {}, }, lines: [baseSalesOrderLine], revisions: [], }); export const submittedSalesOrder: SalesOrderAggregate = { ...baseSalesOrder, id: "sales-order-2", header: { ...baseSalesOrder.header, orderStatus: "SUBMITTED" }, }; export const confirmedSalesOrder: SalesOrderAggregate = { ...baseSalesOrder, id: "sales-order-3", header: { ...baseSalesOrder.header, orderStatus: "CONFIRMED", fulfillmentStatus: "NOT_FULFILLED", billingStatus: "NOT_BILLED", }, };