123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144 |
- const sinon = require('sinon');
- describe('perpareCertificate', function () {
- let fakes, prepareCertificate;
- beforeEach(function () {
- fakes = {
- load: sinon.stub(),
- parse: sinon.stub(),
- validate: sinon.stub(),
- logger: sinon.stub(),
- };
- prepareCertificate = require('../../../lib/credentials/certificate/prepare')(fakes);
- });
- describe('with valid credentials', function () {
- let credentials;
- const testOptions = {
- pfx: 'myCredentials.pfx',
- cert: 'myCert.pem',
- key: 'myKey.pem',
- ca: 'myCa.pem',
- passphrase: 'apntest',
- production: true,
- };
- beforeEach(function () {
- fakes.load.withArgs(sinon.match(testOptions)).returns({
- pfx: 'myPfxData',
- cert: 'myCertData',
- key: 'myKeyData',
- ca: ['myCaData'],
- passphrase: 'apntest',
- });
- fakes.parse.returnsArg(0);
- credentials = prepareCertificate(testOptions);
- });
- describe('the validation stage', function () {
- it('is called once', function () {
- expect(fakes.validate).to.be.calledOnce;
- });
- it('is passed the production flag', function () {
- expect(fakes.validate.getCall(0).args[0]).to.have.property('production', true);
- });
- describe('passed credentials', function () {
- it('contains the PFX data', function () {
- expect(fakes.validate.getCall(0).args[0]).to.have.property('pfx', 'myPfxData');
- });
- it('contains the key data', function () {
- expect(fakes.validate.getCall(0).args[0]).to.have.property('key', 'myKeyData');
- });
- it('contains the certificate data', function () {
- expect(fakes.validate.getCall(0).args[0]).to.have.property('cert', 'myCertData');
- });
- it('includes passphrase', function () {
- expect(fakes.validate.getCall(0).args[0]).to.have.property('passphrase', 'apntest');
- });
- });
- });
- describe('resolution value', function () {
- it('contains the PFX data', function () {
- return expect(credentials).to.have.property('pfx', 'myPfxData');
- });
- it('contains the key data', function () {
- return expect(credentials).to.have.property('key', 'myKeyData');
- });
- it('contains the certificate data', function () {
- return expect(credentials).to.have.property('cert', 'myCertData');
- });
- it('contains the CA data', function () {
- return expect(credentials).to.have.nested.deep.property('ca[0]', 'myCaData');
- });
- it('includes passphrase', function () {
- return expect(credentials).to.have.property('passphrase', 'apntest');
- });
- });
- });
- describe('credential file cannot be parsed', function () {
- beforeEach(function () {
- fakes.load.returns({ cert: 'myCertData', key: 'myKeyData' });
- fakes.parse.throws(new Error('unable to parse key'));
- });
- it('should resolve with the credentials', function () {
- const credentials = prepareCertificate({
- cert: 'myUnparseableCert.pem',
- key: 'myUnparseableKey.pem',
- production: true,
- });
- return expect(credentials).to.deep.equal({ cert: 'myCertData', key: 'myKeyData' });
- });
- it('should log an error', function () {
- prepareCertificate({ cert: 'myUnparseableCert.pem', key: 'myUnparseableKey.pem' });
- expect(fakes.logger).to.be.calledWith(
- sinon.match(function (err) {
- return err.message ? err.message.match(/unable to parse key/) : false;
- }, '"unable to parse key"')
- );
- });
- it('should not attempt to validate', function () {
- prepareCertificate({ cert: 'myUnparseableCert.pem', key: 'myUnparseableKey.pem' });
- expect(fakes.validate).to.not.be.called;
- });
- });
- describe('credential validation fails', function () {
- it('should throw', function () {
- fakes.load.returns(Promise.resolve({ cert: 'myCertData', key: 'myMismatchedKeyData' }));
- fakes.parse.returnsArg(0);
- fakes.validate.throws(new Error('certificate and key do not match'));
- return expect(() =>
- prepareCertificate({ cert: 'myCert.pem', key: 'myMistmatchedKey.pem' })
- ).to.throw(/certificate and key do not match/);
- });
- });
- describe('credential file cannot be loaded', function () {
- it('should throw', function () {
- fakes.load.throws(new Error('ENOENT, no such file or directory'));
- return expect(() =>
- prepareCertificate({ cert: 'noSuchFile.pem', key: 'myKey.pem' })
- ).to.throw('ENOENT, no such file or directory');
- });
- });
- });
|