// SPDX-License-Identifier: LicenseRef-ConusAI-Template-1.0 // Actual generated SDK over synthetic HTTP; this is not live fiscal/provider acceptance. import { requestBusinessBinding } from "@conusai-kit/business" import { businessServiceHooks } from "@conusai-kit/business/server" import { Container, type ServiceAdmissionContext } from "@conusai-kit/core" import { afterEach, describe, expect, it, vi } from "vitest" import { sdkInvoicingService } from "../adapters/service.js" import { invoicingModule } from "../module.js" import { id, invoiceId, raw, terms } from "./fixture.js" const bindingId = id function json(value: unknown) { return new Response(JSON.stringify(value).replaceAll('"RAW_REVISION"', "9007199254740993"), { headers: { "content-type": "application/json" }, }) } async function fixture(reply: (request: Request) => Response | Promise) { const requests: Request[] = [] vi.stubGlobal("fetch", async (input: Request | string | URL) => { const request = new Request(input) requests.push(request.clone()) return reply(request) }) const container = new Container() const hooks = businessServiceHooks({ env: { apiUrl: "https://platform.example.test/api", token: "synthetic-token", orgSlug: "fixture" }, platformOrganizationId: 7, platformProjectId: 9, platformEnvironmentId: 11, profile: "postgres", controlPlane: { lookup: async (appTenantId) => ({ partition_major: 1, binding_id: bindingId, organization_id: 7, project_id: 9, environment_id: 11, environment_uuid: id, app_tenant_id: appTenantId, }), observe: async () => { throw new Error("This fixture does not certify readiness") }, }, }) const context: ServiceAdmissionContext = { container, module: "invoicing", procedure: "invoicing.invoice.list", kind: "read", scope: { level: "org", orgId: id, actor: { userId: id } }, } await hooks.prepareServices?.(container, context, invoicingModule.serviceRequirements ?? []) return { service: sdkInvoicingService(requestBusinessBinding(container)), requests } } afterEach(() => vi.unstubAllGlobals()) describe("Invoicing generated wire adapter", () => { it("preserves decimal and int64 digits through a real generated client", async () => { const { service, requests } = await fixture(() => json(raw())) const result = await service.get(invoiceId) expect(result.revision).toBe("9007199254740993") expect(result.data.lines[0]?.net_price.amount).toBe(terms.lines[0]?.net_price.amount) await service.transition("issue", { invoiceId, expectedVersion: result.revision, key: `fixture:${id}` }) const body = await requests[1]?.text() expect(body).toContain('"revision":9007199254740993') expect(body).toContain(`fixture:${id}`) }) it("denies a foreign app subject before issuing any network request", async () => { const { service, requests } = await fixture(() => json(raw())) await expect( service.draft( { ...terms, buyer: { ...terms.buyer, reference: "conusai://app-partitions/01900000-0000-7000-8000-000000000099/members/01900000-0000-7000-8000-000000000001", }, }, `fixture:${id}`, ), ).rejects.toMatchObject({ code: "bad_request" }) expect(requests).toHaveLength(0) }) it("returns bounded XML for explicit download instead of parsing it as JSON", async () => { const { service } = await fixture( () => new Response("synthetic", { headers: { "content-type": "application/xml" } }), ) expect(await service.ubl(invoiceId)).toEqual({ filename: `invoice-${invoiceId}.xml`, xml: "synthetic", }) }) it("maps service failures without returning arbitrary private remote details", async () => { const { service } = await fixture( () => new Response( JSON.stringify({ type: "https://conusai.com/problems/conflict", title: "Conflict", status: 409, detail: "private fixture value", }), { status: 409, headers: { "content-type": "application/problem+json" } }, ), ) const refused = await service.get(invoiceId).then( () => undefined, (error: unknown) => error, ) expect(refused).toMatchObject({ code: "business_conflict", status: 409 }) expect(JSON.stringify((refused as { problem: unknown }).problem)).not.toContain("private fixture value") }) })