btrz-pact-s3
Advanced tools
Comparing version 0.2.0 to 0.3.0
97
index.js
@@ -5,3 +5,4 @@ "use strict"; | ||
fs = require("fs"), | ||
path = require('path'); | ||
path = require('path'), | ||
url = require('url'); | ||
@@ -138,3 +139,3 @@ class BtrzPactS3 { | ||
//pacts.forEach(function(pact) { | ||
return this.getFilesFromPath(pacts[0]) | ||
return this.getFilesFromPath(pacts[0]) | ||
.then((files) => { | ||
@@ -146,30 +147,84 @@ return Promise.all(files.map(function (file) { | ||
.catch((err) => { | ||
if (this.logger) { | ||
this.logger.error(`Error on BtrzPactS3::publishPacts()`, err); | ||
} | ||
throw err; | ||
}); | ||
} | ||
} | ||
getFileKey(filePath) { | ||
verifyPacts(providerBaseUrl, providerName, _s3Client_) { | ||
let self = this; | ||
const pact = require('@pact-foundation/pact-node'); | ||
function resolver(resolve, reject) { | ||
return fs.readFile(filePath, "utf8", function (err, data) { | ||
if (err) { | ||
let s3Client = _s3Client_ || new AWS.S3({ | ||
accessKeyId: this.accessKeyId, | ||
secretAccessKey: this.secretAccessKey | ||
}); | ||
function resolver(resolve, reject) { | ||
s3Client.listObjects({Bucket: self.bucket}, (err, data) => { | ||
let keysFromProvider = data.Contents.filter((content) => { | ||
return (content.Key.indexOf(`${providerName}/`) === 0); | ||
}).map((content) => {return content.Key}); | ||
if (!keysFromProvider) { | ||
return reject(new Error(`There are no pacts for the provider ${providerName}`)); | ||
} | ||
for (var i=0; i < keysFromProvider.length; i++) { | ||
let file = fs.createWriteStream(`./pacts-to-verify/${path.basename(keysFromProvider[i])}`); | ||
s3Client.getObject({Bucket: self.bucket, Key: keysFromProvider[i]}).createReadStream().pipe(file); | ||
} | ||
console.log(keysFromProvider); | ||
var opts = { | ||
providerBaseUrl: providerBaseUrl, | ||
pactUrls: [`${__dirname}/pacts-to-verify`] | ||
//pactUrls: [`${__dirname}/pacts-to-verify/sales-inventory.json`] // Array of local Pact file paths or Pact Broker URLs (http based). Required. | ||
}; | ||
// let access = fs.createWriteStream(`./results.${providerName}.log`, { flags: 'a' }), | ||
// error = fs.createWriteStream(`./error.${providerName}.log`, { flags: 'a' }); | ||
pact.verifyPacts(opts) | ||
.then((result) => { | ||
return resolve(result); | ||
}) | ||
.catch((err) => { | ||
return reject(err); | ||
} | ||
let fileName = path.basename(filePath); | ||
let pact = JSON.parse(data); | ||
}); | ||
}); | ||
} | ||
return new Promise(resolver); | ||
} | ||
if (!pact.consumer.name) { | ||
return reject(new Error(`The consumer name was not especified in the ${fileName} pact file`)); | ||
} | ||
if (!pact.provider.name) { | ||
return reject(new Error(`The provider name was not especified in the ${fileName} pact file`)); | ||
} | ||
checkDifferences(differences) { | ||
return differences.filter((dif) => { | ||
return (dif.rhs && dif.kind === "N") | ||
}); | ||
} | ||
return resolve(`${pact.consumer.name}/${pact.provider.name}/${fileName}`); | ||
}); | ||
} | ||
return new Promise(resolver); | ||
getFileKey(filePath) { | ||
function resolver(resolve, reject) { | ||
return fs.readFile(filePath, "utf8", function (err, data) { | ||
if (err) { | ||
return reject(err); | ||
} | ||
let fileName = path.basename(filePath); | ||
let pact = JSON.parse(data); | ||
if (!pact.consumer.name) { | ||
return reject(new Error(`The consumer name was not especified in the ${fileName} pact file`)); | ||
} | ||
if (!pact.provider.name) { | ||
return reject(new Error(`The provider name was not especified in the ${fileName} pact file`)); | ||
} | ||
return resolve(`${pact.provider.name}/${pact.consumer.name}/${fileName}`); | ||
}); | ||
} | ||
return new Promise(resolver); | ||
} | ||
} | ||
exports.BtrzPactS3 = BtrzPactS3; | ||
exports.BtrzPactS3 = BtrzPactS3; |
{ | ||
"name": "btrz-pact-s3", | ||
"version": "0.2.0", | ||
"version": "0.3.0", | ||
"description": "The S3 pact lib for Betterez", | ||
@@ -25,4 +25,6 @@ "main": "index.js", | ||
"dependencies": { | ||
"@pact-foundation/pact-node": "^4.5.4", | ||
"aws-sdk": "^2.6.11", | ||
"btrz-logger": "^1.2.0" | ||
"btrz-logger": "^1.2.0", | ||
"request-promise": "^4.1.1" | ||
}, | ||
@@ -29,0 +31,0 @@ "devDependencies": { |
# btrz-pact-s3 | ||
Pact publish and verify, serving files in AWS S3 and based in the Pact Foundation https://docs.pact.io | ||
# Publish pacts | ||
# Install | ||
run `npm install btrz-pact-s3 --save` | ||
# Using btrz-pact-s3 | ||
let options = { | ||
accessKeyId: "your_s3_key", | ||
secretAccessKey: "your_s3_secret_key", | ||
bucket: "your_s3_bucket" | ||
} | ||
const BtrzPactS3 = require("btrz-pact-s3").BtrzPactS3, | ||
btrzPactS3 = new BtrzPactS3(options, logger); | ||
The `logger` is optional, if you need to log errors and information. We recommend to use a logger service. | ||
# Publishing pacts | ||
btrzPactS3.publishPacts([`${__dirname}/pacts`]) | ||
.then(() => { | ||
console.log("Pacts published with success!"); | ||
}) | ||
.catch((err) => { | ||
console.log("Error publishing pacts", err); | ||
}); | ||
You can use individual pact files in the array or just a path where they are. | ||
# Test | ||
`npm test` |
@@ -12,2 +12,3 @@ "use strict"; | ||
AWS = require("aws-sdk"), | ||
request = require("request-promise"), | ||
sinon = require("sinon"); | ||
@@ -98,3 +99,3 @@ let logger = new Logger(), | ||
expect(opts.Bucket).to.be.eql(options.bucket); | ||
expect(opts.Key).to.be.eql("baby/soup/baby-soup.json"); | ||
expect(opts.Key).to.be.eql("soup/baby/baby-soup.json"); | ||
expect(opts.ACL).to.be.eql("public-read"); | ||
@@ -119,5 +120,4 @@ expect(opts.Body).to.respondTo("read"); | ||
putObjectStub.onCall(0).returns(function (opts, cb) { | ||
console.log("wdsdddddddddddddddddddddddddddd"); | ||
expect(opts.Bucket).to.be.eql(options.bucket); | ||
expect(opts.Key).to.be.eql("baby/song/baby-song.json"); | ||
expect(opts.Key).to.be.eql("song/baby/baby-song.json"); | ||
expect(opts.ACL).to.be.eql("public-read"); | ||
@@ -130,3 +130,3 @@ expect(opts.Body).to.respondTo("read"); | ||
expect(opts.Bucket).to.be.eql(options.bucket); | ||
expect(opts.Key).to.be.eql("bird/fruit/bird-fruit.json"); | ||
expect(opts.Key).to.be.eql("fruit/bird/bird-fruit.json"); | ||
expect(opts.ACL).to.be.eql("public-read"); | ||
@@ -138,5 +138,4 @@ expect(opts.Body).to.respondTo("read"); | ||
putObjectStub.returns(function (opts, cb) { | ||
console.log("wdsdddddddddddddddddddddddddddd"); | ||
expect(opts.Bucket).to.be.eql(options.bucket); | ||
expect(opts.Key).to.be.eql("bird/seed/bird-seed.json"); | ||
expect(opts.Key).to.be.eql("seed/bird/bird-seed.json"); | ||
expect(opts.ACL).to.be.eql("public-read"); | ||
@@ -159,2 +158,28 @@ expect(opts.Body).to.respondTo("read"); | ||
describe.skip("verifyPacts", function () { | ||
it("should verify the pacts", function (done) { | ||
options = { | ||
accessKeyId: "AKIAIEMO3QJHYL45MHGQ", | ||
secretAccessKey: "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", | ||
bucket: "btrz-pact" | ||
}; | ||
s3Client = new AWS.S3({ | ||
accessKeyId: options.accessKeyId, | ||
secretAccessKey: options.secretAccessKey | ||
}); | ||
btrzPactS3 = new BtrzPactS3(options, logger); | ||
btrzPactS3.verifyPacts("http://localhost:3010", "inventory") | ||
.then((result) => { | ||
done(); | ||
}) | ||
.catch((err) => { | ||
done(err); | ||
}); | ||
}); | ||
}); | ||
describe("getFileKey", function () { | ||
@@ -165,3 +190,3 @@ | ||
.then((key) => { | ||
expect(key).to.be.eql("baby/soup/baby-soup.json"); | ||
expect(key).to.be.eql("soup/baby/baby-soup.json"); | ||
done(); | ||
@@ -168,0 +193,0 @@ }) |
24411
13
780
31
4
+ Addedrequest-promise@^4.1.1
+ Added@pact-foundation/pact-mock-service@2.1.0(transitive)
+ Added@pact-foundation/pact-mock-service-darwin@2.1.0(transitive)
+ Added@pact-foundation/pact-mock-service-linux-ia32@2.1.0(transitive)
+ Added@pact-foundation/pact-mock-service-linux-x64@2.1.0(transitive)
+ Added@pact-foundation/pact-mock-service-win32@2.1.0(transitive)
+ Added@pact-foundation/pact-node@4.12.0(transitive)
+ Added@pact-foundation/pact-provider-verifier@1.4.3(transitive)
+ Added@pact-foundation/pact-provider-verifier-darwin@1.4.3(transitive)
+ Added@pact-foundation/pact-provider-verifier-linux-ia32@1.4.3(transitive)
+ Added@pact-foundation/pact-provider-verifier-linux-x64@1.4.3(transitive)
+ Added@pact-foundation/pact-provider-verifier-win32@1.4.3(transitive)
+ Addedajv@6.12.6(transitive)
+ Addedasn1@0.2.6(transitive)
+ Addedassert-plus@1.0.0(transitive)
+ Addedasync@1.5.2(transitive)
+ Addedasynckit@0.4.0(transitive)
+ Addedaws-sign2@0.7.0(transitive)
+ Addedaws4@1.13.0(transitive)
+ Addedbalanced-match@1.0.2(transitive)
+ Addedbcrypt-pbkdf@1.0.2(transitive)
+ Addedbluebird@3.7.2(transitive)
+ Addedbrace-expansion@1.1.11(transitive)
+ Addedbunyan@1.8.15(transitive)
+ Addedbunyan-prettystream@0.1.3(transitive)
+ Addedcaseless@0.12.0(transitive)
+ Addedcheck-types@7.1.5(transitive)
+ Addedcombined-stream@1.0.8(transitive)
+ Addedcommander@2.20.3(transitive)
+ Addedcomponent-emitter@1.3.1(transitive)
+ Addedconcat-map@0.0.1(transitive)
+ Addedcookiejar@2.1.4(transitive)
+ Addedcore-util-is@1.0.21.0.3(transitive)
+ Addeddashdash@1.14.1(transitive)
+ Addeddebug@2.6.93.2.7(transitive)
+ Addeddelayed-stream@1.0.0(transitive)
+ Addeddtrace-provider@0.8.8(transitive)
+ Addedecc-jsbn@0.1.2(transitive)
+ Addedextend@3.0.2(transitive)
+ Addedextsprintf@1.3.0(transitive)
+ Addedfast-deep-equal@3.1.3(transitive)
+ Addedfast-json-stable-stringify@2.1.0(transitive)
+ Addedforever-agent@0.6.1(transitive)
+ Addedform-data@1.0.0-rc42.3.3(transitive)
+ Addedformidable@1.2.6(transitive)
+ Addedgetpass@0.1.7(transitive)
+ Addedglob@6.0.4(transitive)
+ Addedhalfred@1.1.0(transitive)
+ Addedhar-schema@2.0.0(transitive)
+ Addedhar-validator@5.1.5(transitive)
+ Addedhttp-signature@1.2.0(transitive)
+ Addedinflight@1.0.6(transitive)
+ Addedis-typedarray@1.0.0(transitive)
+ Addedisstream@0.1.2(transitive)
+ Addedjsbn@0.1.1(transitive)
+ Addedjson-schema@0.4.0(transitive)
+ Addedjson-schema-traverse@0.4.1(transitive)
+ Addedjson-stringify-safe@5.0.1(transitive)
+ Addedjsonpath-plus@0.15.00.16.0(transitive)
+ Addedjsprim@1.4.2(transitive)
+ Addedlodash@4.17.21(transitive)
+ Addedmethods@1.1.2(transitive)
+ Addedmicroee@0.0.6(transitive)
+ Addedmime@1.6.0(transitive)
+ Addedmime-db@1.52.0(transitive)
+ Addedmime-types@2.1.35(transitive)
+ Addedminilog@3.1.0(transitive)
+ Addedminimatch@3.1.2(transitive)
+ Addedminimist@1.2.8(transitive)
+ Addedmkdirp@0.5.6(transitive)
+ Addedmoment@2.30.1(transitive)
+ Addedms@2.0.02.1.3(transitive)
+ Addedmv@2.1.1(transitive)
+ Addednan@2.19.0(transitive)
+ Addedncp@2.0.0(transitive)
+ Addednormalize-path@2.1.1(transitive)
+ Addedoauth-sign@0.9.0(transitive)
+ Addedonce@1.4.0(transitive)
+ Addedpath-is-absolute@1.0.1(transitive)
+ Addedperformance-now@2.1.0(transitive)
+ Addedprocess-nextick-args@2.0.1(transitive)
+ Addedpsl@1.9.0(transitive)
+ Addedpunycode@2.3.1(transitive)
+ Addedq@1.5.1(transitive)
+ Addedqs@6.5.3(transitive)
+ Addedreadable-stream@2.3.8(transitive)
+ Addedremove-trailing-separator@1.1.0(transitive)
+ Addedrequest@2.88.2(transitive)
+ Addedrequest-promise@4.2.6(transitive)
+ Addedrequest-promise-core@1.1.4(transitive)
+ Addedresolve-url@0.2.1(transitive)
+ Addedrimraf@2.4.5(transitive)
+ Addedsafe-buffer@5.1.25.2.1(transitive)
+ Addedsafe-json-stringify@1.2.0(transitive)
+ Addedsafer-buffer@2.1.2(transitive)
+ Addedsprintf-js@1.1.3(transitive)
+ Addedsshpk@1.18.0(transitive)
+ Addedstealthy-require@1.1.1(transitive)
+ Addedstring_decoder@1.1.1(transitive)
+ Addedsuperagent@2.3.03.8.3(transitive)
+ Addedtough-cookie@2.5.0(transitive)
+ Addedtraverson@5.0.06.1.1(transitive)
+ Addedtraverson-hal@6.1.0(transitive)
+ Addedtraverson-promise@0.0.8(transitive)
+ Addedtunnel-agent@0.6.0(transitive)
+ Addedtweetnacl@0.14.5(transitive)
+ Addedunderscore@1.13.6(transitive)
+ Addedunderscore.string@3.3.6(transitive)
+ Addedunixify@1.0.0(transitive)
+ Addeduri-js@4.4.1(transitive)
+ Addedurl-join@2.0.5(transitive)
+ Addedurl-template@2.0.8(transitive)
+ Addedutil-deprecate@1.0.2(transitive)
+ Addeduuid@3.4.0(transitive)
+ Addedverror@1.10.0(transitive)
+ Addedwrappy@1.0.2(transitive)