Ghost/core/test/unit/ghost_sdk_spec.js
Hannah Wolfe 301696632f 🛠 🙈 Rename ghost-url.js to ghost-sdk.js (#8767)
closes #8605

- This file has already been moved, might as well get the rename out of the way
- Especially as we don't migrate clients - everyone will now need to make just one change
2017-07-28 18:23:32 +04:00

166 lines
5.6 KiB
JavaScript

var should = require('should'), // jshint ignore:line
ghostSdk = require('../../server/public/ghost-sdk'),
configUtils = require('../utils/configUtils'),
utils = require('../../server/utils');
describe('Ghost Ajax Helper', function () {
beforeEach(function () {
configUtils.set({
url: 'http://testblog.com/'
});
});
afterEach(function () {
configUtils.restore();
});
it('sets url empty if it is not set on init', function () {
ghostSdk.init({
clientId: '',
clientSecret: ''
});
ghostSdk.url.api().should.equal('');
});
it('renders basic url correctly when no arguments are presented', function () {
ghostSdk.init({
clientId: '',
clientSecret: '',
url: utils.url.urlFor('api', {cors: true}, true)
});
ghostSdk.url.api().should.equal('//testblog.com/ghost/api/v0.1/');
});
it('strips arguments of forward and trailing slashes correctly', function () {
ghostSdk.init({
clientId: '',
clientSecret: '',
url: utils.url.urlFor('api', {cors: true}, true)
});
ghostSdk.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 () {
ghostSdk.init({
clientId: 'ghost-frontend',
clientSecret: 'notasecret',
url: utils.url.urlFor('api', {cors: true}, true)
});
ghostSdk.url.api().should.equal('//testblog.com/ghost/api/v0.1/?client_id=ghost-frontend&client_secret=notasecret');
});
it('generates query parameters correctly', function () {
ghostSdk.init({
clientId: 'ghost-frontend',
clientSecret: 'notasecret',
url: utils.url.urlFor('api', {cors: true}, true)
});
var rendered = ghostSdk.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('handles null/undefined queryOptions correctly', function () {
ghostSdk.init({
clientId: 'ghost-frontend',
clientSecret: 'notasecret',
url: 'test'
});
var test = {
a: null
},
rendered = ghostSdk.url.api(test.a), // null value
rendered2 = ghostSdk.url.api(test.b); // undefined value
rendered.should.match(/test/);
rendered.should.match(/client_id=ghost-frontend/);
rendered.should.match(/client_secret=notasecret/);
rendered2.should.match(/test/);
rendered2.should.match(/client_id=ghost-frontend/);
rendered2.should.match(/client_secret=notasecret/);
});
it('generates complex query correctly', function () {
ghostSdk.init({
clientId: 'ghost-frontend',
clientSecret: 'notasecret',
url: utils.url.urlFor('api', {cors: true}, true)
});
var rendered = ghostSdk.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/'
});
ghostSdk.init({
clientId: 'ghost-frontend',
clientSecret: 'notasecret',
url: utils.url.urlFor('api', true)
});
var rendered = ghostSdk.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/'
});
ghostSdk.init({
clientId: 'ghost-frontend',
clientSecret: 'notasecret',
url: utils.url.urlFor('api', true)
});
var rendered = ghostSdk.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/);
});
it('should be idempotent', function () {
configUtils.set({
url: 'https://testblog.com/blog/'
});
ghostSdk.init({
clientId: 'ghost-frontend',
clientSecret: 'notasecret',
url: utils.url.urlFor('api', {cors: true}, true)
});
var rendered = ghostSdk.url.api('posts', {limit: 3}),
rendered2 = ghostSdk.url.api('posts', {limit: 3});
rendered.should.equal(rendered2);
});
});