@pact-foundation/pact
Version:
Pact for all things Javascript
94 lines • 5.35 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const vitest_1 = require("vitest");
const pact_1 = require("./pact");
describe('PactV3', () => {
afterEach(() => {
vitest_1.vi.restoreAllMocks();
});
describe('#executeTest', () => {
const buildPactMock = (port) => {
return {
addMetadata: vitest_1.vi.fn().mockReturnValue(true),
newInteraction: vitest_1.vi.fn(),
pactffiCreateMockServerForTransport: vitest_1.vi.fn().mockReturnValue(port),
mockServerMatchedSuccessfully: vitest_1.vi.fn().mockReturnValue(true),
mockServerMismatches: vitest_1.vi.fn().mockReturnValue([]),
cleanupMockServer: vitest_1.vi.fn().mockReturnValue(true),
writePactFile: vitest_1.vi.fn(),
cleanupPlugins: vitest_1.vi.fn(),
addPlugin: vitest_1.vi.fn(),
};
};
describe('CORS option', () => {
it('passes corsPreflight: true by default when cors is not specified', async () => {
const pactMock = buildPactMock(1234);
const p = new pact_1.PactV3({ consumer: 'A', provider: 'B' });
// @ts-expect-error: accessing private field for testing
p.pact = pactMock;
await p.executeTest(async () => Promise.resolve());
// biome-ignore lint/suspicious/noExplicitAny: accessing vitest mock internals after ConsumerPact cast
const stub = pactMock.pactffiCreateMockServerForTransport;
expect(stub).toHaveBeenCalledOnce();
const [, , config] = stub.mock.calls[0];
expect(JSON.parse(config)).toEqual({ corsPreflight: true });
});
it('passes corsPreflight: true when cors is explicitly true', async () => {
const pactMock = buildPactMock(1234);
const p = new pact_1.PactV3({ consumer: 'A', provider: 'B', cors: true });
// @ts-expect-error: accessing private field for testing
p.pact = pactMock;
await p.executeTest(async () => Promise.resolve());
// biome-ignore lint/suspicious/noExplicitAny: accessing vitest mock internals after ConsumerPact cast
const stub = pactMock.pactffiCreateMockServerForTransport;
const [, , config] = stub.mock.calls[0];
expect(JSON.parse(config)).toEqual({ corsPreflight: true });
});
it('passes corsPreflight: false when cors is explicitly false', async () => {
const pactMock = buildPactMock(1234);
const p = new pact_1.PactV3({ consumer: 'A', provider: 'B', cors: false });
// @ts-expect-error: accessing private field for testing
p.pact = pactMock;
await p.executeTest(async () => Promise.resolve());
// biome-ignore lint/suspicious/noExplicitAny: accessing vitest mock internals after ConsumerPact cast
const stub = pactMock.pactffiCreateMockServerForTransport;
const [, , config] = stub.mock.calls[0];
expect(JSON.parse(config)).toEqual({ corsPreflight: false });
});
});
describe('transport scheme', () => {
it('uses http scheme by default', async () => {
const pactMock = buildPactMock(1234);
const p = new pact_1.PactV3({ consumer: 'A', provider: 'B' });
// @ts-expect-error: accessing private field for testing
p.pact = pactMock;
await p.executeTest(async () => Promise.resolve());
// biome-ignore lint/suspicious/noExplicitAny: accessing vitest mock internals after ConsumerPact cast
const stub = pactMock.pactffiCreateMockServerForTransport;
const [, transport] = stub.mock.calls[0];
expect(transport).toBe('http');
});
it('uses https scheme when tls is true', async () => {
const pactMock = buildPactMock(1234);
const p = new pact_1.PactV3({ consumer: 'A', provider: 'B', tls: true });
// @ts-expect-error: accessing private field for testing
p.pact = pactMock;
await p.executeTest(async () => Promise.resolve());
// biome-ignore lint/suspicious/noExplicitAny: accessing vitest mock internals after ConsumerPact cast
const stub = pactMock.pactffiCreateMockServerForTransport;
const [, transport] = stub.mock.calls[0];
expect(transport).toBe('https');
});
});
describe('when the mock server fails to start', () => {
it('throws an error when port is 0 or negative', async () => {
const pactMock = buildPactMock(-3);
const p = new pact_1.PactV3({ consumer: 'A', provider: 'B' });
// @ts-expect-error: accessing private field for testing
p.pact = pactMock;
await expect(p.executeTest(async () => Promise.resolve())).rejects.toThrow('Failed to start mock server');
});
});
});
});
//# sourceMappingURL=pact.spec.js.map