import sinon from 'sinon'; import type { IRestApiAdapter } from '../rest/rest-api-adapter.js'; /** * Named sinon stubs for a stub-backed IRestApiAdapter. * * Use the individual stubs to configure call behaviour directly with sinon's * `.resolves()`, `.rejects()`, `.onFirstCall()`, etc. — no `as unknown as` * cast is required because the `adapter` property satisfies IRestApiAdapter. * * @example * ```typescript * const stubRest = createStubRestAdapter(); * stubRest.describeObjectStub.resolves(createSuccessResult(mockDescribe)); * const service = new ContactPointService(stubRest.adapter); * ``` */ export type StubRestAdapter = { /** The fully-typed IRestApiAdapter backed by sinon stubs */ adapter: IRestApiAdapter; /** Stub for adapter.describeObject */ describeObjectStub: sinon.SinonStub; /** Stub for adapter.describeGlobal */ describeGlobalStub: sinon.SinonStub; /** Stub for adapter.getRecordCount */ getRecordCountStub: sinon.SinonStub; /** Stub for adapter.getRecordCounts */ getRecordCountsStub: sinon.SinonStub; /** Stub for adapter.describeObjects */ describeObjectsStub: sinon.SinonStub; /** Stub for adapter.insertRecord */ insertRecordStub: sinon.SinonStub; /** Stub for adapter.updateRecord */ updateRecordStub: sinon.SinonStub; /** Stub for adapter.deleteRecord */ deleteRecordStub: sinon.SinonStub; /** Stub for adapter.invalidateCache */ invalidateCacheStub: sinon.SinonStub; /** Stub for adapter.request */ requestStub: sinon.SinonStub; }; /** * Creates a fully-typed IRestApiAdapter backed by sinon stubs. * * All methods required by IRestApiAdapter are provided as sinon stubs, * so TypeScript accepts the return value without any type cast. * * Prefer this factory over `sinon.createStubInstance(RestApiAdapter)` or * hand-rolling partial objects with `as sinon.SinonStubbedInstance`. * * @returns StubRestAdapter containing the adapter and all underlying stubs */ export declare function createStubRestAdapter(): StubRestAdapter;