From c8819092583441ce63ca5573d3b620a0ae9232cf Mon Sep 17 00:00:00 2001 From: Alexandre Bourdin Date: Mon, 8 Nov 2021 16:06:55 +0100 Subject: [PATCH] Merge pull request #5716 from overleaf/ab-tear-down-de-ng-plans-page-test Tear down de-ng split test and cleanup old version GitOrigin-RevId: 02438bbb2e530dfe72f046dd91c547d97c39c96e --- .../Subscription/SubscriptionController.js | 14 +-- .../subscriptions/_modal_group_purchase.pug | 56 --------- .../app/views/subscriptions/_plans_faq.pug | 34 ----- .../subscriptions/_plans_page_tables.pug | 117 ------------------ .../app/views/subscriptions/_plans_quotes.pug | 25 ---- .../web/app/views/subscriptions/plans.pug | 100 --------------- .../SubscriptionControllerTests.js | 36 +----- 7 files changed, 4 insertions(+), 378 deletions(-) delete mode 100644 services/web/app/views/subscriptions/_modal_group_purchase.pug delete mode 100644 services/web/app/views/subscriptions/_plans_faq.pug delete mode 100644 services/web/app/views/subscriptions/_plans_page_tables.pug delete mode 100644 services/web/app/views/subscriptions/_plans_quotes.pug delete mode 100644 services/web/app/views/subscriptions/plans.pug diff --git a/services/web/app/src/Features/Subscription/SubscriptionController.js b/services/web/app/src/Features/Subscription/SubscriptionController.js index 27d32da407..4cd878bc59 100644 --- a/services/web/app/src/Features/Subscription/SubscriptionController.js +++ b/services/web/app/src/Features/Subscription/SubscriptionController.js @@ -18,9 +18,6 @@ const AnalyticsManager = require('../Analytics/AnalyticsManager') const RecurlyEventHandler = require('./RecurlyEventHandler') const { expressify } = require('../../util/promises') const OError = require('@overleaf/o-error') -const { - getAssignmentForSession, -} = require('../SplitTests/SplitTestV2Handler').promises const groupPlanModalOptions = Settings.groupPlanModalOptions const validGroupPlanModalOptions = { @@ -58,16 +55,7 @@ async function plansPage(req, res) { usage: getDefault('usage', 'usage', 'enterprise'), } - const { variant: templateVariant } = await getAssignmentForSession( - req.session, - 'plans-page-de-ng' - ) - const template = - templateVariant === 'de-ng' - ? 'subscriptions/plans-marketing' - : 'subscriptions/plans' - - res.render(template, { + res.render('subscriptions/plans-marketing', { title: 'plans_and_pricing', plans, gaExperiments: Settings.gaExperiments.plansPage, diff --git a/services/web/app/views/subscriptions/_modal_group_purchase.pug b/services/web/app/views/subscriptions/_modal_group_purchase.pug deleted file mode 100644 index e8da6d0b60..0000000000 --- a/services/web/app/views/subscriptions/_modal_group_purchase.pug +++ /dev/null @@ -1,56 +0,0 @@ -script(type="text/ng-template", id="groupPlanModalPurchaseTemplate") - .modal-header - h3 Save 30% or more with a group license - .modal-body.plans - .container-fluid - .row - .col-md-6.text-center - .circle.circle-lg - | {{ displayPrice }} - span.small / year - br - span.circle-subtext For {{ selected.size }} users - ul.list-unstyled - li Each user will have access to: - li   - li(ng-if="selected.plan_code == 'collaborator'") - strong #{translate("collabs_per_proj", {collabcount:10})} - li(ng-if="selected.plan_code == 'professional'") - strong #{translate("unlimited_collabs")} - +features_premium - .col-md-6 - form.form - .form-group - label(for='plan_code') - | Plan - select.form-control(id="plan_code", ng-model="selected.plan_code") - option(ng-repeat="plan_code in options.plan_codes", value="{{plan_code.code}}") {{ plan_code.display }} - .form-group - label(for='size') - | Number of users - select.form-control(id="size", ng-model="selected.size") - option(ng-repeat="size in options.sizes", value="{{size}}") {{ size }} - .form-group - label(for='currency') - | Currency - select.form-control(id="currency", ng-model="selected.currency") - option(ng-repeat="currency in options.currencies", value="{{currency.code}}") {{ currency.display }} - .form-group - label(for='usage') - | Usage - select.form-control(id="usage", ng-model="selected.usage") - option(ng-repeat="usage in options.usages", value="{{usage.code}}") {{ usage.display }} - p.small.text-center.row-spaced-small(ng-show="selected.usage == 'educational'") - | The 40% educational discount can be used by students or faculty using Overleaf for teaching - p.small.text-center.row-spaced-small(ng-show="selected.usage == 'enterprise'") - | Save an additional 40% on groups of 10 or more with our educational discount - .modal-footer - .text-center - button.btn.btn-primary.btn-lg(ng-click="purchase()") Purchase Now - hr.thin - a( - href - ng-controller="ContactGeneralModal" - ng-click="openModal()" - ) Need more than 50 licenses? Please get in touch - diff --git a/services/web/app/views/subscriptions/_plans_faq.pug b/services/web/app/views/subscriptions/_plans_faq.pug deleted file mode 100644 index 12d881cd12..0000000000 --- a/services/web/app/views/subscriptions/_plans_faq.pug +++ /dev/null @@ -1,34 +0,0 @@ -.faq - .row.row-spaced-large - .col-md-12 - .page-header.plans-header.plans-subheader.text-centered - h2 FAQ - .row - .col-md-6 - h3 #{translate("faq_how_free_trial_works_question")} - p #{translate('faq_how_does_free_trial_works_answer', { appName:'{{settings.appName}}', len:'7' })} - .col-md-6 - h3 #{translate('faq_change_plans_question')} - p #{translate('faq_change_plans_answer')} - .row - .col-md-6 - h3 #{translate('faq_do_collab_need_premium_question')} - p #{translate('faq_do_collab_need_premium_answer')} - .col-md-6 - h3 #{translate('faq_need_more_collab_question')} - p !{translate('faq_need_more_collab_answer', { referFriendsLink: translate('referring_your_friends') })} - .row - .col-md-6 - h3 #{translate('faq_purchase_more_licenses_question')} - p !{translate('faq_purchase_more_licenses_answer', { groupLink: translate('discounted_group_accounts') })}  - a(href='#groups', ng-click="openGroupPlanModal()") #{translate("get_in_touch_for_details")} - .col-md-6 - h3 #{translate('faq_monthly_or_annual_question')} - p #{translate('faq_monthly_or_annual_answer')} - .row - .col-md-6 - h3 #{translate('faq_how_to_pay_question')} - p #{translate('faq_how_to_pay_answer')} - .col-md-6 - h3 #{translate('faq_pay_by_invoice_question')} - p !{translate('faq_pay_by_invoice_answer', {}, [{ name: 'a', attrs: { href: "#pay-by-invoice", 'ng-controller': "ContactGeneralModal", 'ng-click': "openModal()" }}])} diff --git a/services/web/app/views/subscriptions/_plans_page_tables.pug b/services/web/app/views/subscriptions/_plans_page_tables.pug deleted file mode 100644 index 9db4d6b7ec..0000000000 --- a/services/web/app/views/subscriptions/_plans_page_tables.pug +++ /dev/null @@ -1,117 +0,0 @@ - -//- Features Tables -mixin table_premium - table.card.plans-table.plans-table-main - tr - th - th #{translate("free")} - th #{translate("personal")} - th #{translate("collaborator")} - .outer.outer-top - .outer-content - .best-value - strong #{translate('best_value')} - th #{translate("professional")} - - tr - td #{translate("price")} - td #{translate("free")} - td - +price_personal - td - +price_collaborator - td - +price_professional - - for feature in planFeatures - tr - td(event-tracking="features-table" event-tracking-trigger="hover" event-tracking-ga="subscription-funnel" event-tracking-label=`${feature.feature}`) - if feature.info - span(tooltip=translate(feature.info)) #{translate(feature.feature)} - else - | #{translate(feature.feature)} - for plan in feature.plans - td(ng-non-bindable) - if feature.value == 'str' - | #{plan} - else if plan - i.fa.fa-check(aria-hidden="true") - span.sr-only Feature included - else - i.fa.fa-times(aria-hidden="true") - span.sr-only Feature not included - - tr - td - td - +btn_buy_free('table') - td - +btn_buy_personal('table') - td - +btn_buy_collaborator('table') - .outer.outer-btm - .outer-content   - td - +btn_buy_professional('table') - -mixin table_cell_student(feature) - if feature.value == 'str' - | #{feature.student} - else if feature.student - i.fa.fa-check(aria-hidden="true") - span.sr-only Feature included - else - i.fa.fa-times(aria-hidden="true") - span.sr-only Feature not included - -mixin table_student - table.card.plans-table.plans-table-student - tr - th - th #{translate("free")} - th #{translate("student")} (#{translate("annual")}) - .outer.outer-top - .outer-content - .best-value - strong Best Value - th #{translate("student")} - - tr - td #{translate("price")} - td #{translate("free")} - td - +price_student_annual - td - +price_student_monthly - - for feature in planFeatures - tr - td(event-tracking="plans-page-table" event-tracking-trigger="hover" event-tracking-ga="subscription-funnel" event-tracking-label=`${feature.feature}`) - if feature.info - span(tooltip=translate(feature.info)) #{translate(feature.feature)} - else - | #{translate(feature.feature)} - td(ng-non-bindable) - if feature.value == 'str' - | #{feature.plans.free} - else if feature.plans.free - i.fa.fa-check(aria-hidden="true") - span.sr-only Feature included - else - i.fa.fa-times(aria-hidden="true") - span.sr-only Feature included - td(ng-non-bindable) - +table_cell_student(feature) - td(ng-non-bindable) - +table_cell_student(feature) - - tr - td - td - +btn_buy_free('table') - td - +btn_buy_student('table', 'annual') - .outer.outer-btm - .outer-content   - td - +btn_buy_student('table', 'monthly') diff --git a/services/web/app/views/subscriptions/_plans_quotes.pug b/services/web/app/views/subscriptions/_plans_quotes.pug deleted file mode 100644 index e7c6978a48..0000000000 --- a/services/web/app/views/subscriptions/_plans_quotes.pug +++ /dev/null @@ -1,25 +0,0 @@ -.row.row-spaced-large - .col-md-12 - .page-header.plans-header.plans-subheader.text-centered - h2 #{translate('in_good_company')} -.row - .col-md-6 - div - .row - .col-md-3 - .circle-img - img(src=buildImgPath('advocates/schultz.jpg') alt="Kevin Schultz") - .col-md-9 - blockquote - p It is the ability to collaborate very easily that drew me to Overleaf. - footer Kevin Schultz, Assistant Professor of Physics, Hartwick College - .col-md-6 - div - .row - .col-md-3 - .circle-img - img(src=buildImgPath('advocates/dagoret-campagne.jpg') alt="Dr Sylvie Dagoret-Campagne") - .col-md-9 - blockquote - p Overleaf is a great educational tool for publishing scientific documents. - footer Dr Sylvie Dagoret-Campagne, Director of Research at CNRS, University of Paris-Saclay \ No newline at end of file diff --git a/services/web/app/views/subscriptions/plans.pug b/services/web/app/views/subscriptions/plans.pug deleted file mode 100644 index 5b9e4caf29..0000000000 --- a/services/web/app/views/subscriptions/plans.pug +++ /dev/null @@ -1,100 +0,0 @@ -extends ../layout - -include _plans_page_mixins -include _plans_page_tables - -block vars - - metadata = { viewport: true } - -block append meta - meta(name="ol-recomendedCurrency" content=recomendedCurrency) - meta(name="ol-groupPlans" data-type="json" content=groupPlans) - -block content - main.content.content-alt#main-content - .container - .user-notifications - ul.list-unstyled(ng-cloak) - li.notification-entry - .alert.alert-info - .notification-body - span To help you work from home throughout 2021, we're providing discounted plans and special initiatives. - .notification-action - a.btn.btn-sm.btn-info(href="https://www.overleaf.com/events/wfh2021" event-tracking="Event-Pages" event-tracking-trigger="click" event-tracking-ga="WFH-Offer-Click" event-tracking-label="Plans-Banner") Upgrade - .content-page - .plans(ng-controller="PlansController") - .container(ng-cloak) - .row - .col-md-12 - .page-header.centered.plans-header.text-centered - h1.text-capitalize(ng-non-bindable) #{translate('get_instant_access_to')} #{settings.appName} - .row - .col-md-8.col-md-offset-2 - p.text-centered #{translate("sl_benefits_plans")} - - +allCardsAndControls() - - .row.row-spaced-large.text-centered - .col-xs-12 - p.text-centered !{translate('also_provides_free_plan', { appName:'{{settings.appName}}' }, [{ name: 'a', attrs: { href: '/register' }}])} - i.fa.fa-cc-mastercard.fa-2x(aria-hidden="true")   - span.sr-only Mastercard accepted - i.fa.fa-cc-visa.fa-2x(aria-hidden="true")   - span.sr-only Visa accepted - i.fa.fa-cc-amex.fa-2x(aria-hidden="true")   - span.sr-only Amex accepted - i.fa.fa-cc-paypal.fa-2x(aria-hidden="true")   - span.sr-only Paypal accepted - div.text-centered #{translate('change_plans_any_time')}
#{translate('billed_after_x_days', {len:'7'})} - br - div.text-centered #{translate('subject_to_additional_vat')}
#{translate('select_country_vat')} - - .row.row-spaced-large - .col-md-8.col-md-offset-2 - .card.text-centered - .card-header - h2 #{translate('looking_multiple_licenses')} - span #{translate('reduce_costs_group_licenses')} - br - br - a.btn.btn-default( - href="#groups" - ng-click="openGroupPlanModal()" - ) #{translate('find_out_more')} - - .row.row-spaced-large - .col-sm-12 - .page-header.plans-header.plans-subheader.text-centered - h2 #{translate('compare_plan_features')} - .row - .col-md-6.col-md-offset-3 - +plan_switch('table') - .col-md-3.text-right - +currency_dropdown - .row(event-tracking="features-table-viewed" event-tracking-ga="subscription-funnel" event-tracking-trigger="scroll" event-tracking-send-once="true" event-tracking-label="exp-") - .col-sm-12(ng-if="ui.view != 'student'") - +table_premium - .col-sm-12(ng-if="ui.view == 'student'") - +table_student - - include _plans_quotes - - include _plans_faq - - #bottom-cards.row.row-spaced(style="display: none;") - .col-sm-12 - +allCardsAndControls(true, 'bottom') - - .row.row-spaced-large - .col-md-12 - .plans-header.plans-subheader.text-centered - h2.header-with-btn #{translate('still_have_questions')} - button.btn.btn-default.btn-header.text-capitalize( - ng-controller="ContactGeneralModal" - ng-click="openModal()" - ) #{translate('get_in_touch')} - != moduleIncludes("contactModalGeneral", locals) - - .row.row-spaced - - include _modal_group_purchase diff --git a/services/web/test/unit/src/Subscription/SubscriptionControllerTests.js b/services/web/test/unit/src/Subscription/SubscriptionControllerTests.js index a0c1187b42..78f3dd1039 100644 --- a/services/web/test/unit/src/Subscription/SubscriptionControllerTests.js +++ b/services/web/test/unit/src/Subscription/SubscriptionControllerTests.js @@ -185,40 +185,10 @@ describe('SubscriptionController', function () { }) }) - describe('splitTest', function () { - const cases = [ - { - variant: 'default', - template: 'subscriptions/plans', - }, - { - variant: 'de-ng', - template: 'subscriptions/plans-marketing', - }, - ] - for (const { variant, template } of cases) { - describe(variant, function () { - beforeEach(function () { - const assignment = { variant } - this.SplitTestV2Hander.promises.getAssignmentForSession.resolves( - assignment - ) - }) - it(`should render template ${template}`, function (done) { - this.res.render = page => { - page.should.equal(template) - done() - } - this.SubscriptionController.plansPage(this.req, this.res) - }) - }) - } - }) - describe('groupPlanModal data', function () { it('should pass local currency if valid', function (done) { this.res.render = (page, opts) => { - page.should.equal('subscriptions/plans') + page.should.equal('subscriptions/plans-marketing') opts.groupPlanModalDefaults.currency.should.equal('GBP') done() } @@ -230,7 +200,7 @@ describe('SubscriptionController', function () { it('should fallback to USD when valid', function (done) { this.res.render = (page, opts) => { - page.should.equal('subscriptions/plans') + page.should.equal('subscriptions/plans-marketing') opts.groupPlanModalDefaults.currency.should.equal('USD') done() } @@ -242,7 +212,7 @@ describe('SubscriptionController', function () { it('should pass valid options for group plan modal and discard invalid', function (done) { this.res.render = (page, opts) => { - page.should.equal('subscriptions/plans') + page.should.equal('subscriptions/plans-marketing') opts.groupPlanModalDefaults.size.should.equal('42') opts.groupPlanModalDefaults.plan_code.should.equal('collaborator') opts.groupPlanModalDefaults.currency.should.equal('GBP')