diff --git a/pact/pact-node-messages/package-lock.json b/pact/pact-node-messages/package-lock.json index 4297cb9..7eb8186 100644 --- a/pact/pact-node-messages/package-lock.json +++ b/pact/pact-node-messages/package-lock.json @@ -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", diff --git a/pact/pact-node-messages/package.json b/pact/pact-node-messages/package.json index bca5aa3..dbba77a 100644 --- a/pact/pact-node-messages/package.json +++ b/pact/pact-node-messages/package.json @@ -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" } } diff --git a/pact/pact-node-messages/pact/publish.js b/pact/pact-node-messages/pact/publish.js new file mode 100644 index 0000000..54d6172 --- /dev/null +++ b/pact/pact-node-messages/pact/publish.js @@ -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")); \ No newline at end of file diff --git a/pact/pact-node-messages/pacts/node-message-consumer-node-message-provider.json b/pact/pact-node-messages/pacts/node-message-consumer-node-message-provider.json new file mode 100644 index 0000000..4c63830 --- /dev/null +++ b/pact/pact-node-messages/pacts/node-message-consumer-node-message-provider.json @@ -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" + } + } +} \ No newline at end of file diff --git a/pact/pact-node-messages/common/hero-created-message.js b/pact/pact-node-messages/src/common/hero-created-message.js similarity index 100% rename from pact/pact-node-messages/common/hero-created-message.js rename to pact/pact-node-messages/src/common/hero-created-message.js diff --git a/pact/pact-node-messages/consumer/hero-event-handler.js b/pact/pact-node-messages/src/consumer/hero-event-handler.js similarity index 100% rename from pact/pact-node-messages/consumer/hero-event-handler.js rename to pact/pact-node-messages/src/consumer/hero-event-handler.js diff --git a/pact/pact-node-messages/consumer/hero-event-handler.spec.js b/pact/pact-node-messages/src/consumer/hero-event-handler.spec.js similarity index 83% rename from pact/pact-node-messages/consumer/hero-event-handler.spec.js rename to pact/pact-node-messages/src/consumer/hero-event-handler.spec.js index 7f69de8..580fe35 100644 --- a/pact/pact-node-messages/consumer/hero-event-handler.spec.js +++ b/pact/pact-node-messages/src/consumer/hero-event-handler.spec.js @@ -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)); }); }); diff --git a/pact/pact-node-messages/src/provider/hero-event-producer.js b/pact/pact-node-messages/src/provider/hero-event-producer.js new file mode 100644 index 0000000..af9541f --- /dev/null +++ b/pact/pact-node-messages/src/provider/hero-event-producer.js @@ -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; \ No newline at end of file diff --git a/pact/pact-node-messages/src/provider/hero-event-producer.spec.js b/pact/pact-node-messages/src/provider/hero-event-producer.spec.js new file mode 100644 index 0000000..a5ce718 --- /dev/null +++ b/pact/pact-node-messages/src/provider/hero-event-producer.spec.js @@ -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); + + }); + +}); \ No newline at end of file