@pact-foundation/pact
Version:
Pact for all things Javascript
117 lines • 4.6 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const pact_core_1 = __importDefault(require("@pact-foundation/pact-core"));
const vitest_1 = require("vitest");
const logger_1 = __importDefault(require("../../common/logger"));
const verifier_1 = require("./verifier");
const mockState = vitest_1.vi.hoisted(() => ({ executed: false }));
vitest_1.vi.mock('./proxy', () => ({
createHooksState: () => ({ insideInteraction: false, errors: [] }),
createProxy: () => ({
close: () => {
mockState.executed = true;
},
address: () => ({
port: 1234,
family: 'https',
address: 'mock.server.example.com',
}),
}),
waitForServerReady: () => Promise.resolve(),
}));
describe('Verifier', () => {
afterEach(() => {
vitest_1.vi.restoreAllMocks();
mockState.executed = false;
});
const state = 'thing exists';
const providerBaseUrl = 'http://not.exists';
const opts = {
providerBaseUrl,
requestFilter: (_req, _res, next) => {
next();
},
stateHandlers: {
[state]: () => {
return Promise.resolve();
},
},
};
let v;
describe('#constructor', () => {
describe('when given configuration', () => {
it('sets the configuration on the object', () => {
v = new verifier_1.Verifier(opts);
expect(v).toHaveProperty('config.providerBaseUrl', providerBaseUrl);
expect(v).toHaveProperty('config.stateHandlers');
expect(v).toHaveProperty('config.requestFilter');
});
});
});
describe('options handling', () => {
// biome-ignore lint/suspicious/noExplicitAny: spy type varies by method signature
let spy;
beforeEach(() => {
spy = vitest_1.vi.spyOn(pact_core_1.default, 'logLevel');
});
describe('when logLevel is provided', () => {
it('sets the log level on pact node', () => {
v = new verifier_1.Verifier({
...opts,
logLevel: 'debug',
});
expect(spy).toHaveBeenCalledTimes(1);
});
});
describe('when logLevel is not provided', () => {
it('does not modify the log setting', () => {
const { ...rest } = opts;
v = new verifier_1.Verifier({
...rest,
});
expect(spy).toHaveBeenCalledTimes(0);
});
});
describe('when a deprecated field is provided', () => {
it('logs a warning', () => {
spy = vitest_1.vi.spyOn(logger_1.default, 'warn');
v = new verifier_1.Verifier({
...opts,
providerStatesSetupUrl: 'http://foo.com',
});
expect(spy).toHaveBeenCalledTimes(1);
});
});
});
describe('#verifyProvider', () => {
beforeEach(() => { });
describe('when no configuration has been given', () => {
it('fails with an error', () => expect(() => new verifier_1.Verifier(undefined)).toThrow());
});
describe('when the verifier has been configured', () => {
beforeEach(() => {
v = new verifier_1.Verifier({ ...opts, logLevel: 'trace' });
});
describe('and the verification runs successfully', () => {
it('closes the server and returns the result', async () => {
vitest_1.vi.spyOn(v, 'runProviderVerification').mockReturnValue(Promise.resolve('done'));
const res = v.verifyProvider();
await res;
expect(mockState.executed).toBe(true);
});
});
describe('and the verification fails', () => {
it('closes the server and returns the result', async () => {
vitest_1.vi.spyOn(v, 'runProviderVerification').mockReturnValue(() => Promise.reject(new Error('error')));
const res = v.verifyProvider();
await expect(res).rejects.toThrow();
expect(mockState.executed).toBe(true);
});
});
});
});
});
//# sourceMappingURL=verifier.spec.js.map