revised fastly tests, added more

This commit is contained in:
Ben Wheeler 2019-09-26 10:49:12 -04:00
parent de5e712305
commit 88abed34e9
2 changed files with 134 additions and 21 deletions

View file

@ -37,18 +37,15 @@ module.exports = function (apiKey, serviceId) {
if (err) { if (err) {
return cb('Failed to fetch versions: ' + err); return cb('Failed to fetch versions: ' + err);
} }
var latestVersion = versions.reduce(function (lateVersion, version) { var latestVersion = versions.reduce((latestActiveSoFar, cur) => {
if (!lateVersion) return version; // if one of [latestActiveSoFar, cur] is active and the other isn't,
// if versions we're comparing are both active, or both inactive, prefer // return whichever is active. If both are not active, return
// whichever has a higher version number // latestActiveSoFar.
if (lateVersion.active === version.active) { if (!cur || !cur.active) return latestActiveSoFar;
if (version.number > lateVersion.number) return version; if (!latestActiveSoFar || !latestActiveSoFar.active) return cur;
return lateVersion; // when both are active, prefer whichever has a higher version number.
} return (cur.number > latestActiveSoFar.number) ? cur : latestActiveSoFar;
// if only one of the versions is active, prefer that one }, null);
if (version.active === true) return version;
return lateVersion;
});
return cb(null, latestVersion); return cb(null, latestVersion);
}); });
}; };

View file

@ -1,7 +1,50 @@
describe('fastly library', () => { describe('fastly library', () => {
test('getLatestActiveVersion returns largest active VCL number', done => { let mockedFastlyRequest = {};
const mockedFastlyRequest = jest.fn((method, url, cb) => { jest.mock('fastly', () => (() => ({
request: mockedFastlyRequest
})));
const fastlyExtended = require('../../../bin/lib/fastly-extended'); // eslint-disable-line global-require
test('getLatestActiveVersion returns largest active VCL number, ' +
'when called with VCLs in sequential order', done => {
mockedFastlyRequest = jest.fn((method, url, cb) => {
cb(null, [
{
number: 1,
active: false
},
{
number: 2,
active: false
},
{
number: 3,
active: true
},
{
number: 4,
active: false
}
]);
});
const fastlyInstance = fastlyExtended('api_key', 'service_id');
fastlyInstance.getLatestActiveVersion((err, response) => {
expect(err).toBe(null);
expect(response).toEqual({
number: 3,
active: true
});
expect(mockedFastlyRequest).toHaveBeenCalledWith(
'GET', '/service/service_id/version', expect.any(Function)
);
done();
});
});
test('getLatestActiveVersion returns largest active VCL number, when called with VCLs in mixed up order', done => {
mockedFastlyRequest = jest.fn((method, url, cb) => {
cb(null, [ cb(null, [
{ {
number: 4, number: 4,
@ -9,7 +52,7 @@ describe('fastly library', () => {
}, },
{ {
number: 1, number: 1,
active: true active: false
}, },
{ {
number: 2, number: 2,
@ -21,12 +64,6 @@ describe('fastly library', () => {
} }
]); ]);
}); });
jest.mock('fastly', () => (() => ({
request: mockedFastlyRequest
})));
const fastlyExtended = require('../../../bin/lib/fastly-extended'); // eslint-disable-line global-require
const fastlyInstance = fastlyExtended('api_key', 'service_id'); const fastlyInstance = fastlyExtended('api_key', 'service_id');
fastlyInstance.getLatestActiveVersion((err, response) => { fastlyInstance.getLatestActiveVersion((err, response) => {
@ -41,4 +78,83 @@ describe('fastly library', () => {
done(); done();
}); });
}); });
test('getLatestActiveVersion returns null, when none of the VCL versions are active', done => {
mockedFastlyRequest = jest.fn((method, url, cb) => {
cb(null, [
{
number: 4,
active: false
},
{
number: 1,
active: false
},
{
number: 2,
active: false
},
{
number: 3,
active: false
}
]);
});
const fastlyInstance = fastlyExtended('api_key', 'service_id');
fastlyInstance.getLatestActiveVersion((err, response) => {
expect(err).toBe(null);
expect(response).toEqual(null);
expect(mockedFastlyRequest).toHaveBeenCalledWith(
'GET', '/service/service_id/version', expect.any(Function)
);
done();
});
});
test('getLatestActiveVersion returns largest active VCL number, ' +
'when called with a single active VCL', done => {
mockedFastlyRequest = jest.fn((method, url, cb) => {
cb(null, [
{
number: 1,
active: true
}
]);
});
const fastlyInstance = fastlyExtended('api_key', 'service_id');
fastlyInstance.getLatestActiveVersion((err, response) => {
expect(err).toBe(null);
expect(response).toEqual({
number: 1,
active: true
});
expect(mockedFastlyRequest).toHaveBeenCalledWith(
'GET', '/service/service_id/version', expect.any(Function)
);
done();
});
});
test('getLatestActiveVersion returns null, when called with a single inactive VCL', done => {
mockedFastlyRequest = jest.fn((method, url, cb) => {
cb(null, [
{
number: 1,
active: false
}
]);
});
const fastlyInstance = fastlyExtended('api_key', 'service_id');
fastlyInstance.getLatestActiveVersion((err, response) => {
expect(err).toBe(null);
expect(response).toEqual(null);
expect(mockedFastlyRequest).toHaveBeenCalledWith(
'GET', '/service/service_id/version', expect.any(Function)
);
done();
});
});
}); });