From e639a25171afd3ca942b1362fcd97aa6de4fd9b0 Mon Sep 17 00:00:00 2001 From: Hannah Wolfe Date: Wed, 8 Apr 2020 19:31:55 +0100 Subject: [PATCH] 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 --- core/frontend/helpers/cancel_link.js | 18 ++++++++++++++-- core/frontend/helpers/index.js | 16 +------------- test/unit/helpers/cancel_link_spec.js | 30 ++++++++++++++++++++++++++- 3 files changed, 46 insertions(+), 18 deletions(-) diff --git a/core/frontend/helpers/cancel_link.js b/core/frontend/helpers/cancel_link.js index 98d81e2e9e..f9d45d8e0e 100644 --- a/core/frontend/helpers/cancel_link.js +++ b/core/frontend/helpers/cancel_link.js @@ -6,9 +6,9 @@ // // 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 || {}; 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); +} + +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); + }); }; diff --git a/core/frontend/helpers/index.js b/core/frontend/helpers/index.js index ffb71c50e7..f6b4185d7c 100644 --- a/core/frontend/helpers/index.js +++ b/core/frontend/helpers/index.js @@ -1,4 +1,3 @@ -const proxy = require('../services/proxy'); const register = require('./register'); const coreHelpers = {}; @@ -46,26 +45,13 @@ coreHelpers.title = require('./title'); coreHelpers.twitter_url = require('./twitter_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() { // Register theme helpers registerThemeHelper('asset', coreHelpers.asset); registerThemeHelper('author', coreHelpers.author); registerThemeHelper('authors', coreHelpers.authors); registerThemeHelper('body_class', coreHelpers.body_class); - registerThemeHelper('cancel_link', labsEnabledMembers); + registerThemeHelper('cancel_link', coreHelpers.cancel_link); registerThemeHelper('concat', coreHelpers.concat); registerThemeHelper('content', coreHelpers.content); registerThemeHelper('date', coreHelpers.date); diff --git a/test/unit/helpers/cancel_link_spec.js b/test/unit/helpers/cancel_link_spec.js index 557fdb721d..854fbb5a61 100644 --- a/test/unit/helpers/cancel_link_spec.js +++ b/test/unit/helpers/cancel_link_spec.js @@ -1,9 +1,12 @@ const should = require('should'); +const sinon = require('sinon'); const hbs = require('../../../core/frontend/services/themes/engine'); const helpers = require('../../../core/frontend/helpers'); +const labs = require('../../../core/server/services/labs'); const configUtils = require('../../utils/configUtils'); describe('{{cancel_link}} helper', function () { + let labsStub; before(function (done) { 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 defaultErrorElementClass = /class="gh-error gh-error-subscription-cancel"/; const defaultCancelLinkText = /Cancel subscription/; @@ -25,7 +36,10 @@ describe('{{cancel_link}} helper', function () { }; 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 () { @@ -109,4 +123,18 @@ describe('{{cancel_link}} helper', function () { 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(/^