Skip to content

Commit 0e23e85

Browse files
committed
✨ Added v6 support to Admin-API library
no issue - adds `v6` to supported versions list - updates URL prefixing function to ensure `v6` doesn't result in a versioned URL
1 parent db0c2c6 commit 0e23e85

File tree

3 files changed

+46
-13
lines changed

3 files changed

+46
-13
lines changed

packages/admin-api/lib/admin-api.js

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,9 @@ const token = require('./token');
77
const packageInfo = require('../package.json');
88
const packageVersion = packageInfo.version;
99

10-
// NOTE: bump this default when Ghost v5 is released
11-
const defaultAcceptVersionHeader = 'v5.0';
12-
const supportedVersions = ['v2', 'v3', 'v4', 'v5', 'canary'];
10+
// NOTE: bump this default when major versions are released
11+
const defaultAcceptVersionHeader = 'v6.0';
12+
const supportedVersions = ['v2', 'v3', 'v4', 'v5', 'v6', 'canary'];
1313
const packageName = '@tryghost/admin-api';
1414

1515
/**
@@ -22,14 +22,15 @@ const packageName = '@tryghost/admin-api';
2222
const resolveAPIPrefix = (version) => {
2323
let prefix;
2424

25-
// NOTE: the "version.match(/^v5\.\d+/)" expression should be changed to "version.match(/^v\d+\.\d+/)" once Ghost v5 is out
26-
if (version === 'v5' || version === undefined || version.match(/^v5\.\d+/)) {
27-
prefix = `/admin/`;
28-
} else if (version.match(/^v\d+\.\d+/)) {
29-
const versionPrefix = /^(v\d+)\.\d+/.exec(version)[1];
25+
// Only v2, v3, v4, and canary need version prefixes in the URL
26+
if (version === 'v2' || version === 'v3' || version === 'v4' || version === 'canary') {
27+
prefix = `/${version}/admin/`;
28+
} else if (version && version.match(/^v[2-4]\.\d+/)) {
29+
const versionPrefix = /^(v[2-4])\.\d+/.exec(version)[1];
3030
prefix = `/${versionPrefix}/admin/`;
3131
} else {
32-
prefix = `/${version}/admin/`;
32+
// Default for v5+, v6, undefined, etc. - no version prefix
33+
prefix = `/admin/`;
3334
}
3435

3536
return prefix;
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
// Switch these lines once there are useful utils
2+
// const testUtils = require('./utils');
3+
require('../utils');
4+
const should = require('should');
5+
const sinon = require('sinon');
6+
7+
const GhostAdminAPI = require('../../lib/admin-api');
8+
9+
describe('GhostAdminAPI v6', function () {
10+
it('uses unversioned URL path and correct Accept-Version header', async function () {
11+
const makeRequestStub = sinon.stub().returns(Promise.resolve({
12+
posts: []
13+
}));
14+
15+
const api = new GhostAdminAPI({
16+
version: 'v6.0',
17+
url: 'http://ghost.local',
18+
key: '5c73def7a21ad85eda5d4faa:d9a3e5b2d6c2a4afb094655c4dc543220be60b3561fa9622e3891213cb4357d0',
19+
makeRequest: makeRequestStub
20+
});
21+
22+
await api.posts.browse();
23+
24+
makeRequestStub.calledOnce.should.be.true();
25+
26+
// v6 should use unversioned URL path (no /v6/ prefix)
27+
should.equal(makeRequestStub.args[0][0].url, 'http://ghost.local/ghost/api/admin/posts/');
28+
29+
// v6 should send Accept-Version header as v6.0
30+
should.equal(makeRequestStub.args[0][0].headers['Accept-Version'], 'v6.0');
31+
});
32+
});

packages/admin-api/test/lib/admin-api.test.js

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -239,7 +239,7 @@ describe('GhostAdminAPI general', function () {
239239
await api.config.read();
240240

241241
makeRequestStub.calledOnce.should.be.true();
242-
should.equal(makeRequestStub.args[0][0].headers['Accept-Version'], 'v5.0');
242+
should.equal(makeRequestStub.args[0][0].headers['Accept-Version'], 'v6.0');
243243
should.equal(makeRequestStub.args[0][0].headers['User-Agent'], `GhostAdminSDK/${packageVersion}`);
244244
should.equal(generateTokenSpy.args[0][0], '5c73def7a21ad85eda5d4faa:d9a3e5b2d6c2a4afb094655c4dc543220be60b3561fa9622e3891213cb4357d0');
245245
should.equal(generateTokenSpy.args[0][1], '/canary/admin/');
@@ -285,7 +285,7 @@ describe('GhostAdminAPI general', function () {
285285
await api.config.read();
286286

287287
makeRequestStub.calledOnce.should.be.true();
288-
should.equal(makeRequestStub.args[0][0].headers['Accept-Version'], 'v5.0');
288+
should.equal(makeRequestStub.args[0][0].headers['Accept-Version'], 'v6.0');
289289
should.equal(makeRequestStub.args[0][0].headers['User-Agent'], `GhostAdminSDK/${packageVersion}`);
290290
should.equal(generateTokenSpy.args[0][0], '5c73def7a21ad85eda5d4faa:d9a3e5b2d6c2a4afb094655c4dc543220be60b3561fa9622e3891213cb4357d0');
291291
should.equal(generateTokenSpy.args[0][1], '/admin/');
@@ -309,7 +309,7 @@ describe('GhostAdminAPI general', function () {
309309
await api.config.read();
310310

311311
makeRequestStub.calledOnce.should.be.true();
312-
should.equal(makeRequestStub.args[0][0].headers['Accept-Version'], 'v5.0');
312+
should.equal(makeRequestStub.args[0][0].headers['Accept-Version'], 'v6.0');
313313
should.equal(makeRequestStub.args[0][0].headers['User-Agent'], undefined);
314314
should.equal(generateTokenSpy.args[0][0], '5c73def7a21ad85eda5d4faa:d9a3e5b2d6c2a4afb094655c4dc543220be60b3561fa9622e3891213cb4357d0');
315315
should.equal(generateTokenSpy.args[0][1], '/admin/');
@@ -333,7 +333,7 @@ describe('GhostAdminAPI general', function () {
333333
await api.config.read();
334334

335335
makeRequestStub.calledOnce.should.be.true();
336-
should.equal(makeRequestStub.args[0][0].headers['Accept-Version'], 'v5.0');
336+
should.equal(makeRequestStub.args[0][0].headers['Accept-Version'], 'v6.0');
337337
should.equal(makeRequestStub.args[0][0].headers['User-Agent'], 'Custom Value');
338338
should.equal(generateTokenSpy.args[0][0], '5c73def7a21ad85eda5d4faa:d9a3e5b2d6c2a4afb094655c4dc543220be60b3561fa9622e3891213cb4357d0');
339339
should.equal(generateTokenSpy.args[0][1], '/admin/');

0 commit comments

Comments
 (0)