added example for a node message provider
This commit is contained in:
53
pact/pact-node-messages/package-lock.json
generated
53
pact/pact-node-messages/package-lock.json
generated
@@ -260,12 +260,6 @@
|
||||
"integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=",
|
||||
"dev": true
|
||||
},
|
||||
"assertion-error": {
|
||||
"version": "1.1.0",
|
||||
"resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz",
|
||||
"integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==",
|
||||
"dev": true
|
||||
},
|
||||
"async": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "http://registry.npmjs.org/async/-/async-1.0.0.tgz",
|
||||
@@ -487,20 +481,6 @@
|
||||
"integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=",
|
||||
"dev": true
|
||||
},
|
||||
"chai": {
|
||||
"version": "4.2.0",
|
||||
"resolved": "https://registry.npmjs.org/chai/-/chai-4.2.0.tgz",
|
||||
"integrity": "sha512-XQU3bhBukrOsQCuwZndwGcCVQHyZi53fQ6Ys1Fym7E4olpIqqZZhhoFJoaKVvV17lWQoXYwgWN2nF5crA8J2jw==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"assertion-error": "1.1.0",
|
||||
"check-error": "1.0.2",
|
||||
"deep-eql": "3.0.1",
|
||||
"get-func-name": "2.0.0",
|
||||
"pathval": "1.1.0",
|
||||
"type-detect": "4.0.8"
|
||||
}
|
||||
},
|
||||
"chalk": {
|
||||
"version": "2.3.1",
|
||||
"resolved": "http://registry.npmjs.org/chalk/-/chalk-2.3.1.tgz",
|
||||
@@ -523,12 +503,6 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"check-error": {
|
||||
"version": "1.0.2",
|
||||
"resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz",
|
||||
"integrity": "sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=",
|
||||
"dev": true
|
||||
},
|
||||
"check-types": {
|
||||
"version": "7.3.0",
|
||||
"resolved": "https://registry.npmjs.org/check-types/-/check-types-7.3.0.tgz",
|
||||
@@ -797,15 +771,6 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"deep-eql": {
|
||||
"version": "3.0.1",
|
||||
"resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz",
|
||||
"integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"type-detect": "4.0.8"
|
||||
}
|
||||
},
|
||||
"delayed-stream": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
|
||||
@@ -1189,12 +1154,6 @@
|
||||
"lodash.padstart": "4.6.1"
|
||||
}
|
||||
},
|
||||
"get-func-name": {
|
||||
"version": "2.0.0",
|
||||
"resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz",
|
||||
"integrity": "sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=",
|
||||
"dev": true
|
||||
},
|
||||
"get-stream": {
|
||||
"version": "2.3.1",
|
||||
"resolved": "http://registry.npmjs.org/get-stream/-/get-stream-2.3.1.tgz",
|
||||
@@ -1920,12 +1879,6 @@
|
||||
"integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=",
|
||||
"dev": true
|
||||
},
|
||||
"pathval": {
|
||||
"version": "1.1.0",
|
||||
"resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.0.tgz",
|
||||
"integrity": "sha1-uULm1L3mUwBe9rcTYd74cn0GReA=",
|
||||
"dev": true
|
||||
},
|
||||
"pend": {
|
||||
"version": "1.2.0",
|
||||
"resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz",
|
||||
@@ -2448,12 +2401,6 @@
|
||||
"integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=",
|
||||
"dev": true
|
||||
},
|
||||
"type-detect": {
|
||||
"version": "4.0.8",
|
||||
"resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz",
|
||||
"integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==",
|
||||
"dev": true
|
||||
},
|
||||
"type-is": {
|
||||
"version": "1.6.16",
|
||||
"resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.16.tgz",
|
||||
|
||||
@@ -4,13 +4,14 @@
|
||||
"description": "",
|
||||
"main": "index.js",
|
||||
"scripts": {
|
||||
"test:consumer": "mocha consumer/*.spec.js"
|
||||
"test:consumer": "mocha src/consumer/*.spec.js",
|
||||
"test:provider": "mocha src/provider/*.spec.js",
|
||||
"publish:pact": "node pact/publish.js"
|
||||
},
|
||||
"author": "Tom Hombergs",
|
||||
"license": "MIT",
|
||||
"devDependencies": {
|
||||
"@pact-foundation/pact": "^7.0.3",
|
||||
"chai": "^4.2.0",
|
||||
"mocha": "^5.2.0"
|
||||
}
|
||||
}
|
||||
|
||||
13
pact/pact-node-messages/pact/publish.js
Normal file
13
pact/pact-node-messages/pact/publish.js
Normal file
@@ -0,0 +1,13 @@
|
||||
let publisher = require('@pact-foundation/pact-node');
|
||||
let path = require('path');
|
||||
|
||||
let opts = {
|
||||
providerBaseUrl: 'http://localhost:8080',
|
||||
pactFilesOrDirs: [path.resolve(process.cwd(), 'pacts')],
|
||||
pactBroker: 'https://adesso.pact.dius.com.au/',
|
||||
pactBrokerUsername: process.env.PACT_USERNAME,
|
||||
pactBrokerPassword: process.env.PACT_PASSWORD,
|
||||
consumerVersion: '2.0.0'
|
||||
};
|
||||
|
||||
publisher.publishPacts(opts).then(() => console.log("Pacts successfully published"));
|
||||
@@ -0,0 +1,63 @@
|
||||
{
|
||||
"consumer": {
|
||||
"name": "node-message-consumer"
|
||||
},
|
||||
"provider": {
|
||||
"name": "node-message-provider"
|
||||
},
|
||||
"messages": [
|
||||
{
|
||||
"description": "a hero created message",
|
||||
"providerStates": [
|
||||
|
||||
],
|
||||
"contents": {
|
||||
"id": 42,
|
||||
"name": "Superman",
|
||||
"superpower": "flying",
|
||||
"universe": "DC"
|
||||
},
|
||||
"matchingRules": {
|
||||
"body": {
|
||||
"$.id": {
|
||||
"matchers": [
|
||||
{
|
||||
"match": "type"
|
||||
}
|
||||
]
|
||||
},
|
||||
"$.name": {
|
||||
"matchers": [
|
||||
{
|
||||
"match": "type"
|
||||
}
|
||||
]
|
||||
},
|
||||
"$.superpower": {
|
||||
"matchers": [
|
||||
{
|
||||
"match": "type"
|
||||
}
|
||||
]
|
||||
},
|
||||
"$.universe": {
|
||||
"matchers": [
|
||||
{
|
||||
"match": "regex",
|
||||
"regex": "^(DC|Marvel)$"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
"metaData": {
|
||||
"content-type": "application/json"
|
||||
}
|
||||
}
|
||||
],
|
||||
"metadata": {
|
||||
"pactSpecification": {
|
||||
"version": "3.0.0"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -14,9 +14,9 @@ describe("message consumer", () => {
|
||||
|
||||
describe("'hero created' message Handler", () => {
|
||||
|
||||
it("should accept a valid 'hero created' message", (done) => {
|
||||
return messagePact
|
||||
.expectsToReceive("a 'hero created' message")
|
||||
it("should accept a valid hero created message", (done) => {
|
||||
messagePact
|
||||
.expectsToReceive("a hero created message")
|
||||
.withContent({
|
||||
id: Matchers.like(42),
|
||||
name: Matchers.like("Superman"),
|
||||
@@ -27,7 +27,7 @@ describe("message consumer", () => {
|
||||
"content-type": "application/json",
|
||||
})
|
||||
.verify(synchronousBodyHandler(handleHeroCreatedEvent))
|
||||
.then(done());
|
||||
.then(done, (error) => done(error));
|
||||
});
|
||||
|
||||
});
|
||||
@@ -0,0 +1,9 @@
|
||||
const HeroCreatedMessage = require('../common/hero-created-message');
|
||||
|
||||
function produceHeroCreatedEvent(id) {
|
||||
return new Promise((resolve, reject) => {
|
||||
resolve({foo: "this is an invalid message that does not match the contract!"});
|
||||
});
|
||||
}
|
||||
|
||||
module.exports = produceHeroCreatedEvent;
|
||||
@@ -0,0 +1,33 @@
|
||||
const {MessageProviderPact} = require('@pact-foundation/pact');
|
||||
const produceHeroCreatedEvent = require('./hero-event-producer');
|
||||
const path = require('path');
|
||||
|
||||
describe("message producer", () => {
|
||||
|
||||
const messagePact = new MessageProviderPact({
|
||||
messageProviders: {
|
||||
"a hero created message": () => produceHeroCreatedEvent(42),
|
||||
},
|
||||
log: path.resolve(process.cwd(), "logs"),
|
||||
logLevel: "debug",
|
||||
provider: "node-message-provider",
|
||||
pactBrokerUrl: "https://adesso.pact.dius.com.au",
|
||||
pactBrokerUsername: process.env.PACT_USERNAME,
|
||||
pactBrokerPassword: process.env.PACT_PASSWORD,
|
||||
publishVerificationResult: true,
|
||||
providerVersion: '1.0.0',
|
||||
tags: ['latest']
|
||||
});
|
||||
|
||||
|
||||
describe("'hero created' message producer", () => {
|
||||
|
||||
it("should create a valid hero created message", (done) => {
|
||||
messagePact
|
||||
.verify()
|
||||
.then(done, (error) => done(error));
|
||||
}).timeout(5000);
|
||||
|
||||
});
|
||||
|
||||
});
|
||||
Reference in New Issue
Block a user