mirror of
https://github.com/TryGhost/Ghost.git
synced 2024-12-12 16:14:25 +03:00
9eadeb9fbb
refs #5942, #6150 There were a few key problems I was looking to solve with this: - Introduce a single point of truth for what the URL for accessing the API should be - Provide a simple way to configure the utility (much like a true SDK) As of this commit, this utility is still automatically available in a Ghost theme. To use it on an external site, the code would look like: ``` <script type="text/javascript" src="http://my-ghost-blog.com/shared/ghost-url.min.js"></script> <script type="text/javascript"> ghost.init({ clientId: "<your-client-id>", clientSecret: "<your-client-secret>" }); </script> ``` To achieve this, there have been a number of changes: - A new `apiUrl` function has been added to config, which calculates the correct URL. This needs to be unified with the other url generation functions as a separate piece of work. - The serveSharedFile middleware has been updated, so that it can serve files from / or /shared and to substitute `{{api-url}}` as it does `{{blog-url}}`. - ghost-url.js and ghost-url.min.js have been updated to be served via the serveSharedFile middleware - ghost-url.js has been changed slightly, to take the url from an inline variable which is substituted the first time it is served - `{{ghost_head}}` has been updated, removing the api url handling which is now in config/url.js and removing the configuration of the utility in favour of calling `init()` after the script is required - `{{ghost_head}}` has also had the meta tags for client id and secret removed - tests have been updated
122 lines
4.1 KiB
JavaScript
122 lines
4.1 KiB
JavaScript
/* globals describe, beforeEach, afterEach, it */
|
|
/*jshint expr:true*/
|
|
var should = require('should'),
|
|
ghostUrl = require('../../shared/ghost-url'),
|
|
|
|
configUtils = require('../utils/configUtils');
|
|
|
|
should.equal(true, true);
|
|
|
|
describe('Ghost Ajax Helper', function () {
|
|
beforeEach(function () {
|
|
configUtils.set({
|
|
url: 'http://testblog.com/'
|
|
});
|
|
});
|
|
|
|
afterEach(function () {
|
|
configUtils.restore();
|
|
});
|
|
|
|
it('renders basic url correctly when no arguments are presented', function () {
|
|
ghostUrl.init({
|
|
clientId: '',
|
|
clientSecret: '',
|
|
url: configUtils.config.apiUrl()
|
|
});
|
|
|
|
ghostUrl.url.api().should.equal('//testblog.com/ghost/api/v0.1/');
|
|
});
|
|
|
|
it('strips arguments of forward and trailing slashes correctly', function () {
|
|
ghostUrl.init({
|
|
clientId: '',
|
|
clientSecret: '',
|
|
url: configUtils.config.apiUrl()
|
|
});
|
|
|
|
ghostUrl.url.api('a/', '/b', '/c/').should.equal('//testblog.com/ghost/api/v0.1/a/b/c/');
|
|
});
|
|
|
|
it('appends client_id & client_secret to query string automatically', function () {
|
|
ghostUrl.init({
|
|
clientId: 'ghost-frontend',
|
|
clientSecret: 'notasecret',
|
|
url: configUtils.config.apiUrl()
|
|
});
|
|
|
|
ghostUrl.url.api().should.equal('//testblog.com/ghost/api/v0.1/?client_id=ghost-frontend&client_secret=notasecret');
|
|
});
|
|
|
|
it('generates query parameters correctly', function () {
|
|
ghostUrl.init({
|
|
clientId: 'ghost-frontend',
|
|
clientSecret: 'notasecret',
|
|
url: configUtils.config.apiUrl()
|
|
});
|
|
|
|
var rendered = ghostUrl.url.api({a: 'string', b: 5, c: 'en coded'});
|
|
|
|
rendered.should.match(/\/\/testblog\.com\/ghost\/api\/v0\.1\/\?/);
|
|
rendered.should.match(/client_id=ghost-frontend/);
|
|
rendered.should.match(/client_secret=notasecret/);
|
|
rendered.should.match(/a/);
|
|
rendered.should.match(/b=5/);
|
|
rendered.should.match(/c=en\%20coded/);
|
|
});
|
|
|
|
it('generates complex query correctly', function () {
|
|
ghostUrl.init({
|
|
clientId: 'ghost-frontend',
|
|
clientSecret: 'notasecret',
|
|
url: configUtils.config.apiUrl()
|
|
});
|
|
|
|
var rendered = ghostUrl.url.api('posts/', '/tags/', '/count', {include: 'tags,tests', page: 2});
|
|
|
|
rendered.should.match(/\/\/testblog\.com\/ghost\/api\/v0\.1\/posts\/tags\/count\/\?/);
|
|
rendered.should.match(/client_id=ghost-frontend/);
|
|
rendered.should.match(/client_secret=notasecret/);
|
|
rendered.should.match(/include=tags%2Ctests/);
|
|
rendered.should.match(/page=2/);
|
|
});
|
|
|
|
it('works with an https config', function () {
|
|
configUtils.set({
|
|
url: 'https://testblog.com/'
|
|
});
|
|
ghostUrl.init({
|
|
clientId: 'ghost-frontend',
|
|
clientSecret: 'notasecret',
|
|
url: configUtils.config.apiUrl()
|
|
});
|
|
|
|
var rendered = ghostUrl.url.api('posts/', '/tags/', '/count', {include: 'tags,tests', page: 2});
|
|
|
|
rendered.should.match(/https:\/\/testblog\.com\/ghost\/api\/v0\.1\/posts\/tags\/count\/\?/);
|
|
rendered.should.match(/client_id=ghost-frontend/);
|
|
rendered.should.match(/client_secret=notasecret/);
|
|
rendered.should.match(/include=tags%2Ctests/);
|
|
rendered.should.match(/page=2/);
|
|
});
|
|
|
|
it('works with an https config and subdirectory', function () {
|
|
configUtils.set({
|
|
url: 'https://testblog.com/blog/'
|
|
});
|
|
ghostUrl.init({
|
|
clientId: 'ghost-frontend',
|
|
clientSecret: 'notasecret',
|
|
url: configUtils.config.apiUrl()
|
|
});
|
|
|
|
var rendered = ghostUrl.url.api('posts/', '/tags/', '/count', {include: 'tags,tests', page: 2});
|
|
|
|
rendered.should.match(/https:\/\/testblog\.com\/blog\/ghost\/api\/v0\.1\/posts\/tags\/count\/\?/);
|
|
rendered.should.match(/client_id=ghost-frontend/);
|
|
rendered.should.match(/client_secret=notasecret/);
|
|
rendered.should.match(/include=tags%2Ctests/);
|
|
rendered.should.match(/page=2/);
|
|
});
|
|
});
|