0
Fork 0
mirror of https://github.com/TryGhost/Ghost.git synced 2025-03-11 02:12:21 -05:00

Moved labs usage into cancel_link helper file

- this removes the need to require the proxy inside the helpers/index.js file
- have the helper file define and return it's own labs-enabled-ness
- update the tests to test for the labs flag being unset
This commit is contained in:
Hannah Wolfe 2020-04-08 19:31:55 +01:00
parent b37ac8ef1f
commit e639a25171
3 changed files with 46 additions and 18 deletions

View file

@ -6,9 +6,9 @@
// //
// Defaults to class="cancel-subscription-link" errorClass="cancel-subscription-error" cancelLabel="Cancel subscription" continueLabel="Continue subscription" // Defaults to class="cancel-subscription-link" errorClass="cancel-subscription-error" cancelLabel="Cancel subscription" continueLabel="Continue subscription"
const {templates, errors, i18n} = require('../services/proxy'); const {templates, errors, i18n, labs} = require('../services/proxy');
module.exports = function excerpt(options) { function cancel_link(options) { // eslint-disable-line camelcase
let truncateOptions = (options || {}).hash || {}; let truncateOptions = (options || {}).hash || {};
if (this.id === undefined || this.cancel_at_period_end === undefined) { if (this.id === undefined || this.cancel_at_period_end === undefined) {
@ -25,4 +25,18 @@ module.exports = function excerpt(options) {
}; };
return templates.execute('cancel_link', data); return templates.execute('cancel_link', data);
}
module.exports = function cancelLabsWrapper() {
let self = this;
let args = arguments;
return labs.enabledHelper({
flagKey: 'members',
flagName: 'Members',
helperName: 'cancel_link',
helpUrl: 'https://ghost.org/faq/members/'
}, () => {
return cancel_link.apply(self, args);
});
}; };

View file

@ -1,4 +1,3 @@
const proxy = require('../services/proxy');
const register = require('./register'); const register = require('./register');
const coreHelpers = {}; const coreHelpers = {};
@ -46,26 +45,13 @@ coreHelpers.title = require('./title');
coreHelpers.twitter_url = require('./twitter_url'); coreHelpers.twitter_url = require('./twitter_url');
coreHelpers.url = require('./url'); coreHelpers.url = require('./url');
function labsEnabledMembers() {
let self = this, args = arguments;
return proxy.labs.enabledHelper({
flagKey: 'members',
flagName: 'Members',
helperName: 'cancel_link',
helpUrl: 'https://ghost.org/faq/members/'
}, () => {
return coreHelpers.cancel_link.apply(self, args);
});
}
registerAllCoreHelpers = function registerAllCoreHelpers() { registerAllCoreHelpers = function registerAllCoreHelpers() {
// Register theme helpers // Register theme helpers
registerThemeHelper('asset', coreHelpers.asset); registerThemeHelper('asset', coreHelpers.asset);
registerThemeHelper('author', coreHelpers.author); registerThemeHelper('author', coreHelpers.author);
registerThemeHelper('authors', coreHelpers.authors); registerThemeHelper('authors', coreHelpers.authors);
registerThemeHelper('body_class', coreHelpers.body_class); registerThemeHelper('body_class', coreHelpers.body_class);
registerThemeHelper('cancel_link', labsEnabledMembers); registerThemeHelper('cancel_link', coreHelpers.cancel_link);
registerThemeHelper('concat', coreHelpers.concat); registerThemeHelper('concat', coreHelpers.concat);
registerThemeHelper('content', coreHelpers.content); registerThemeHelper('content', coreHelpers.content);
registerThemeHelper('date', coreHelpers.date); registerThemeHelper('date', coreHelpers.date);

View file

@ -1,9 +1,12 @@
const should = require('should'); const should = require('should');
const sinon = require('sinon');
const hbs = require('../../../core/frontend/services/themes/engine'); const hbs = require('../../../core/frontend/services/themes/engine');
const helpers = require('../../../core/frontend/helpers'); const helpers = require('../../../core/frontend/helpers');
const labs = require('../../../core/server/services/labs');
const configUtils = require('../../utils/configUtils'); const configUtils = require('../../utils/configUtils');
describe('{{cancel_link}} helper', function () { describe('{{cancel_link}} helper', function () {
let labsStub;
before(function (done) { before(function (done) {
hbs.express4({partialsDir: [configUtils.config.get('paths').helperTemplates]}); hbs.express4({partialsDir: [configUtils.config.get('paths').helperTemplates]});
@ -12,6 +15,14 @@ describe('{{cancel_link}} helper', function () {
}); });
}); });
beforeEach(function () {
labsStub = sinon.stub(labs, 'isSet').returns(true);
});
afterEach(function () {
sinon.restore();
});
const defaultLinkClass = /class="gh-subscription-cancel"/; const defaultLinkClass = /class="gh-subscription-cancel"/;
const defaultErrorElementClass = /class="gh-error gh-error-subscription-cancel"/; const defaultErrorElementClass = /class="gh-error gh-error-subscription-cancel"/;
const defaultCancelLinkText = /Cancel subscription/; const defaultCancelLinkText = /Cancel subscription/;
@ -25,7 +36,10 @@ describe('{{cancel_link}} helper', function () {
}; };
runHelper('not an object').should.throw(); runHelper('not an object').should.throw();
runHelper(function () {}).should.throw(); runHelper(function () { }).should.throw();
runHelper({}).should.throw();
runHelper({id: ''}).should.throw();
runHelper({cancel_at_period_end: ''}).should.throw();
}); });
it('can render cancel subscription link', function () { it('can render cancel subscription link', function () {
@ -109,4 +123,18 @@ describe('{{cancel_link}} helper', function () {
rendered.string.should.match(/custom continue link text/); rendered.string.should.match(/custom continue link text/);
}); });
it('is disabled if labs flag is not set', function () {
labsStub.returns(false);
const rendered = helpers.cancel_link.call({
id: 'sub_continue',
cancel_at_period_end: true
});
should.exist(rendered);
rendered.string.should.match(/^<script/);
rendered.string.should.match(/helper is not available/);
});
}); });