import { TestAPI } from 'vitest';
import { T as TestClientHandle } from '../client-Dh-KIIX8.js';
import { C as CreateAppOptions } from '../server-wAB-qfyZ.js';
export { S as SeedName } from '../server-wAB-qfyZ.js';
import '../client-xc2aQSB4.js';
import '../product-DXhjLQ_w.js';
import '../payment-nH9OCUg2.js';
import 'hono';

/**
 * Pre-baked test suites for scaffolded storefronts.
 *
 * Templates' `__tests__/*.test.ts` files are now ~5 lines each — they
 * import their `brand` and call `createBrandSuite` / `createCartFlowSuite`
 * / `createContractSuite`. One bug fix in this file → every template
 * picks it up on `bun update @cimplify/sdk`.
 *
 *   // __tests__/brand.test.ts in any template:
 *   import { createBrandSuite } from "@cimplify/sdk/testing/suite";
 *   import { brand } from "../lib/brand";
 *   createBrandSuite({ brand });
 *
 *   // __tests__/cart-flow.test.ts:
 *   import { createCartFlowSuite } from "@cimplify/sdk/testing/suite";
 *   import { brand } from "../lib/brand";
 *   createCartFlowSuite({ seed: brand.mock.seed, businessId: brand.mock.businessId });
 *
 *   // __tests__/contract.test.ts:
 *   import { createContractSuite } from "@cimplify/sdk/testing/suite";
 *   import { brand } from "../lib/brand";
 *   createContractSuite({ seed: brand.mock.seed });
 */

/**
 * Brand sanity suite. Catches: missing required fields, placeholder
 * strings shipped to prod, invalid email/url/locale/currency formats,
 * mismatched seed/businessId pairing.
 *
 * Pass `extend` to append custom cases inside the same describe block:
 *
 *   createBrandSuite({
 *     brand,
 *     extend: (it) => {
 *       it("uses our merchant's currency", () => {
 *         expect(brand.currency).toBe("GHS");
 *       });
 *     },
 *   });
 */
declare function createBrandSuite(opts: {
    brand: unknown;
    label?: string;
    extend?: (it: TestAPI) => void;
}): void;
interface CartFlowOptions extends CreateAppOptions {
    /** Expected business ID — asserts cart responses match the merchant. */
    businessId?: string;
    /** Override the describe() label. */
    label?: string;
    /** Append custom cases inside the same describe block. Receives a `TestClientHandle` getter. */
    extend?: (ctx: {
        getHandle: () => TestClientHandle;
        it: TestAPI;
    }) => void;
}
/**
 * Cart flow suite. Boots the in-process mock, exercises add/dedupe/remove
 * with shape assertions on every response. Catches: SDK ↔ mock contract
 * drift, missing fields on cart items, add-to-cart not persisting,
 * variant/payload silently dropped.
 */
declare function createCartFlowSuite(opts?: CartFlowOptions): void;
interface ContractOptions extends CreateAppOptions {
    label?: string;
    extend?: (ctx: {
        getHandle: () => TestClientHandle;
        it: TestAPI;
    }) => void;
}
/**
 * Shape contract suite. Exercises the schemas against actual mock
 * traffic. Catches: outbound payloads dropping required fields,
 * inbound responses missing fields the storefront depends on.
 */
declare function createContractSuite(opts?: ContractOptions): void;

export { createBrandSuite, createCartFlowSuite, createContractSuite };
