Renan Santos
11/05/2023, 6:30 PMimport { PactProviderModule, PactProviderOptions } from 'nestjs-pact';
import * as dotenv from 'dotenv';
import {
generateRandomValue,
getCurrentBranch,
getGitDirectoryName
} from '../helper/utils';
export enum ConsumerName {
KK_SHOPPINGCART_SERVICE = 'KK-SHOPPINGCART-SERVICE',
KK_PURCHASE_SERVICE = 'KK-PURCHASE-SERVICE'
}
const DEFAULT_BRANCH = 'master';
const MASTER_WEBHOOK = 'master-webhook';
export const configurePactProvider = (consumer: ConsumerName) => {
dotenv.config({ path: './.env.test' });
const GET_PROVIDER_NAME = getGitDirectoryName();
const GET_RANDOM_VALUE = generateRandomValue();
const consumerWebhookBranch = process.env.CONSUMER_VERSION_TAGS;
const [GET_CURRENT_BRANCH, GET_PROVIDER_BRANCH] = consumerWebhookBranch
? [consumerWebhookBranch, MASTER_WEBHOOK]
: [getCurrentBranch(), getCurrentBranch()];
if (!consumer?.length) {
throw new Error(
'Error: PACT_BROKER_BASE_URL environment variable is not set.'
);
}
const options: PactProviderOptions = {
pactBrokerUrl: String(process.env.PACT_BROKER_BASE_URL),
provider: GET_PROVIDER_NAME,
providerVersion: GET_RANDOM_VALUE,
providerVersionBranch: GET_PROVIDER_BRANCH,
providerVersionTags: [GET_PROVIDER_BRANCH],
logLevel: 'error',
consumerVersionSelectors: [
{
fallbackTag: DEFAULT_BRANCH,
tag: GET_CURRENT_BRANCH,
latest: true,
consumer: consumer
}
],
publishVerificationResult: true
};
return PactProviderModule.register(options);
};
I'm currently using the following versions and dependencies:
• Node: 16.14.0
• pact-foundation/pact: 12.1.0
• nestjs-pact: 2.3.1
• jest: 28.1.3
• @types/jest: 29.0.0
• ts-jest: 28.0.8
Any guidance or suggestions would be greatly appreciated!Renan Santos
11/05/2023, 7:49 PMdescribe('Verification', () => {
let verifierService: PactVerifierService;
let app: INestApplication;
beforeEach(async () => {
const module: TestingModule = await Test.createTestingModule({
imports: [
CacheModule.register(),
configurePactProvider(ConsumerName.KK_PURCHASE_SERVICE)
],
controllers: [OfferController],
providers: [
{
provide: OfferService,
useValue: {
readManyOffers: jest
.fn()
.mockResolvedValue([cartOfferDtoMock]),
lockStock: jest
.fn()
.mockResolvedValue([offerLockStockMock]),
unlockStock: jest.fn()
}
}
]
}).compile();
verifierService = module.get(PactVerifierService);
app = module.createNestApplication<NestFastifyApplication>(
new FastifyAdapter()
);
app.useGlobalPipes(new BodyValidationPipe());
await app.init();
});
afterEach(async () => {
await app.close();
});
it('Shall validate the expectations', async () => {
await verifierService.verify(app);
});
});
Yousaf Nabi (pactflow.io)
Yousaf Nabi (pactflow.io)
Renan Santos
11/06/2023, 10:40 AMRenan Santos
11/06/2023, 10:56 AMYousaf Nabi (pactflow.io)
Renan Santos
11/06/2023, 2:11 PMgetGitCommitSha()
function, and I passed this function's result to the "providerVersion" property, and everything started working properly. Now, the provider's branch is showing up. 🙌
@Yousaf Nabi (pactflow.io) Thank you so much for your help and quick response!!Yousaf Nabi (pactflow.io)
Renan Santos
11/06/2023, 2:49 PM"publish:contract": "pact-broker publish $(sed -n 's/^PACTS_PATH=//p' .env.test) --consumer-app-version=$(uuidgen) --tag-with-git-branch --broker-base-url=$(sed -n 's/^PACT_BROKER_BASE_URL=//p' .env.test)"
Yousaf Nabi (pactflow.io)
Yousaf Nabi (pactflow.io)
Renan Santos
11/06/2023, 3:47 PM