import { randomUUID } from "node:crypto"; import { type createGraphQLClient, graphql } from "./graphql-client"; const createPartner = graphql(` mutation CreateTestPartner($name: String!, $type: String!) { createBusinessPartner(name: $name, type: $type) { id } } `); const createSupplier = graphql(` mutation CreateTestSupplier( $partnerId: String! $companyId: String! $code: String! $name: String! ) { createSupplierAccount(partnerId: $partnerId, companyId: $companyId, code: $code, name: $name) { id } } `); const createCustomer = graphql(` mutation CreateTestCustomer( $partnerId: String! $companyId: String! $code: String! $name: String! ) { createCustomerAccount(partnerId: $partnerId, companyId: $companyId, code: $code, name: $name) { id } } `); /** Creates an isolated account; the returned ID is never a BusinessPartner ID. */ export async function createTestPartnerAccount( client: ReturnType, input: { name: string; type: string; companyId: string; role: "SUPPLIER" | "CUSTOMER" }, ): Promise<{ id: string; partnerId: string }> { const partner = await client .mutation(createPartner, { name: input.name, type: input.type }) .toPromise(); if (!partner.data) throw new Error("Test partner creation returned no data"); const accountInput = { partnerId: partner.data.createBusinessPartner.id, companyId: input.companyId, code: randomUUID(), name: input.name, }; if (input.role === "SUPPLIER") { const result = await client.mutation(createSupplier, accountInput).toPromise(); if (!result.data) throw new Error("Test supplier account creation returned no data"); return { ...result.data.createSupplierAccount, partnerId: accountInput.partnerId }; } const result = await client.mutation(createCustomer, accountInput).toPromise(); if (!result.data) throw new Error("Test customer account creation returned no data"); return { ...result.data.createCustomerAccount, partnerId: accountInput.partnerId }; }