refactoring
This commit is contained in:
@@ -2,7 +2,6 @@ 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,
|
||||
|
||||
35
pact/pact-node-messages/src/common/hero-created-event.js
Normal file
35
pact/pact-node-messages/src/common/hero-created-event.js
Normal file
@@ -0,0 +1,35 @@
|
||||
class HeroCreatedEvent {
|
||||
|
||||
constructor(name, superpower, universe, id) {
|
||||
this.id = id;
|
||||
this.name = name;
|
||||
this.superpower = superpower;
|
||||
this.universe = universe;
|
||||
}
|
||||
|
||||
static validateUniverse(event) {
|
||||
if (typeof event.universe !== 'string') {
|
||||
throw new Error(`Hero universe must be a string! Invalid value: ${event.universe}`)
|
||||
}
|
||||
}
|
||||
|
||||
static validateSuperpower(event) {
|
||||
if (typeof event.superpower !== 'string') {
|
||||
throw new Error(`Hero superpower must be a string! Invalid value: ${event.superpower}`)
|
||||
}
|
||||
}
|
||||
|
||||
static validateName(event) {
|
||||
if (typeof event.name !== 'string') {
|
||||
throw new Error(`Hero name must be a string! Invalid value: ${event.name}`);
|
||||
}
|
||||
}
|
||||
|
||||
static validateId(event) {
|
||||
if (typeof event.id !== 'number') {
|
||||
throw new Error(`Hero id must be a number! Invalid value: ${event.id}`)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = HeroCreatedEvent;
|
||||
@@ -1,35 +0,0 @@
|
||||
class HeroCreatedMessage {
|
||||
|
||||
constructor(name, superpower, universe, id) {
|
||||
this.id = id;
|
||||
this.name = name;
|
||||
this.superpower = superpower;
|
||||
this.universe = universe;
|
||||
}
|
||||
|
||||
static validateUniverse(message) {
|
||||
if (typeof message.universe !== 'string') {
|
||||
throw new Error(`Hero universe must be a string! Invalid value: ${message.universe}`)
|
||||
}
|
||||
}
|
||||
|
||||
static validateSuperpower(message) {
|
||||
if (typeof message.superpower !== 'string') {
|
||||
throw new Error(`Hero superpower must be a string! Invalid value: ${message.superpower}`)
|
||||
}
|
||||
}
|
||||
|
||||
static validateName(message) {
|
||||
if (typeof message.name !== 'string') {
|
||||
throw new Error(`Hero name must be a string! Invalid value: ${message.name}`);
|
||||
}
|
||||
}
|
||||
|
||||
static validateId(message) {
|
||||
if (typeof message.id !== 'number') {
|
||||
throw new Error(`Hero id must be a number! Invalid value: ${message.id}`)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = HeroCreatedMessage;
|
||||
@@ -1,15 +1,15 @@
|
||||
const HeroCreatedMessage = require('../common/hero-created-message');
|
||||
const HeroCreatedEvent = require('../common/hero-created-event');
|
||||
|
||||
function handleHeroCreatedEvent(message) {
|
||||
exports.HeroEventHandler = {
|
||||
handleHeroCreatedEvent: (message) => {
|
||||
|
||||
HeroCreatedMessage.validateId(message);
|
||||
HeroCreatedMessage.validateName(message);
|
||||
HeroCreatedMessage.validateSuperpower(message);
|
||||
HeroCreatedMessage.validateUniverse(message);
|
||||
HeroCreatedEvent.validateId(message);
|
||||
HeroCreatedEvent.validateName(message);
|
||||
HeroCreatedEvent.validateSuperpower(message);
|
||||
HeroCreatedEvent.validateUniverse(message);
|
||||
|
||||
// pass message into business logic
|
||||
// note that the business logic should be mocked away for the contract test
|
||||
// pass message into business logic
|
||||
// note that the business logic should be mocked away for the contract test
|
||||
|
||||
}
|
||||
|
||||
module.exports = handleHeroCreatedEvent;
|
||||
}
|
||||
};
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
const {MessageConsumerPact, Matchers, synchronousBodyHandler} = require('@pact-foundation/pact');
|
||||
const handleHeroCreatedEvent = require('./hero-event-handler');
|
||||
const {HeroEventHandler} = require('./hero-event-handler');
|
||||
const path = require('path');
|
||||
|
||||
describe("message consumer", () => {
|
||||
@@ -26,7 +26,7 @@ describe("message consumer", () => {
|
||||
.withMetadata({
|
||||
"content-type": "application/json",
|
||||
})
|
||||
.verify(synchronousBodyHandler(handleHeroCreatedEvent))
|
||||
.verify(synchronousBodyHandler(HeroEventHandler.handleHeroCreatedEvent))
|
||||
.then(() => done(), (error) => done(error));
|
||||
}).timeout(5000);
|
||||
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
const HeroCreatedMessage = require('../common/hero-created-message');
|
||||
const HeroCreatedEvent = require('../common/hero-created-event');
|
||||
|
||||
function produceHeroCreatedEvent() {
|
||||
return new Promise((resolve, reject) => {
|
||||
resolve(new HeroCreatedMessage("Superman", "Flying", "DC", 42));
|
||||
});
|
||||
}
|
||||
|
||||
module.exports = produceHeroCreatedEvent;
|
||||
exports.CreateHeroEventProducer = {
|
||||
produceHeroCreatedEvent: () => {
|
||||
return new Promise((resolve, reject) => {
|
||||
resolve(new HeroCreatedEvent("Superman", "Flying", "DC", 42));
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
const {MessageProviderPact} = require('@pact-foundation/pact');
|
||||
const produceHeroCreatedEvent = require('./hero-event-producer');
|
||||
const {CreateHeroEventProducer} = require('./hero-event-producer');
|
||||
const path = require('path');
|
||||
|
||||
describe("message producer", () => {
|
||||
|
||||
const messagePact = new MessageProviderPact({
|
||||
messageProviders: {
|
||||
"a hero created message": () => produceHeroCreatedEvent(),
|
||||
"a hero created message": () => CreateHeroEventProducer.produceHeroCreatedEvent(),
|
||||
},
|
||||
log: path.resolve(process.cwd(), "logs", "pact.log"),
|
||||
logLevel: "info",
|
||||
@@ -24,7 +24,6 @@ describe("message producer", () => {
|
||||
tags: ['latest']
|
||||
});
|
||||
|
||||
|
||||
describe("'hero created' message producer", () => {
|
||||
|
||||
it("should create a valid hero created message", (done) => {
|
||||
|
||||
Reference in New Issue
Block a user