From a94287434d1d88d38a0fc5c45bed265b78eedb03 Mon Sep 17 00:00:00 2001 From: Rimian Perkins Date: Wed, 23 Oct 2019 11:50:54 +1100 Subject: [PATCH] plans have group names --- app/controllers/admin/plans_controller.rb | 1 + app/controllers/admin/products_controller.rb | 1 - .../discourse/models/admin-plan.js.es6 | 4 +++- ...urse-patrons-products-show-plans-show.js.es6 | 5 ++++- ...ugins-discourse-patrons-products-show.js.es6 | 5 +---- ...scourse-patrons-products-show-plans-show.hbs | 7 +++++++ .../plugins-discourse-patrons-products-show.hbs | 15 +++++---------- config/locales/client.en.yml | 3 +++ spec/requests/admin/plans_controller_spec.rb | 17 +++++++++++------ spec/requests/admin/products_controller_spec.rb | 15 +++++---------- 10 files changed, 40 insertions(+), 33 deletions(-) diff --git a/app/controllers/admin/plans_controller.rb b/app/controllers/admin/plans_controller.rb index d8181c3..4f7c8b7 100644 --- a/app/controllers/admin/plans_controller.rb +++ b/app/controllers/admin/plans_controller.rb @@ -27,6 +27,7 @@ module DiscoursePatrons product: params[:product], trial_period_days: params[:trial_period_days], currency: SiteSetting.discourse_patrons_currency, + metadata: { group_name: params[:metadata][:group_name] } ) render_json_dump plan diff --git a/app/controllers/admin/products_controller.rb b/app/controllers/admin/products_controller.rb index 9a32d60..211226a 100644 --- a/app/controllers/admin/products_controller.rb +++ b/app/controllers/admin/products_controller.rb @@ -73,7 +73,6 @@ module DiscoursePatrons name: params[:name], statement_descriptor: params[:statement_descriptor], active: params[:active], - metadata: { group_name: params[:metadata][:group_name] } } end end diff --git a/assets/javascripts/discourse/models/admin-plan.js.es6 b/assets/javascripts/discourse/models/admin-plan.js.es6 index 473a1df..ac23d9c 100644 --- a/assets/javascripts/discourse/models/admin-plan.js.es6 +++ b/assets/javascripts/discourse/models/admin-plan.js.es6 @@ -6,6 +6,7 @@ const AdminPlan = Discourse.Model.extend({ interval: "month", amount: 0, intervals: ["day", "week", "month", "year"], + metadata: {}, @computed("created") createdFormatted(created) { @@ -22,7 +23,8 @@ const AdminPlan = Discourse.Model.extend({ interval: this.interval, amount: this.amount, trial_period_days: this.trial_period_days, - product: this.product + product: this.product, + metadata: this.metadata, }; return ajax("/patrons/admin/plans", { method: "post", data }); diff --git a/assets/javascripts/discourse/routes/admin-plugins-discourse-patrons-products-show-plans-show.js.es6 b/assets/javascripts/discourse/routes/admin-plugins-discourse-patrons-products-show-plans-show.js.es6 index df407a1..4d6f566 100644 --- a/assets/javascripts/discourse/routes/admin-plugins-discourse-patrons-products-show-plans-show.js.es6 +++ b/assets/javascripts/discourse/routes/admin-plugins-discourse-patrons-products-show-plans-show.js.es6 @@ -1,4 +1,5 @@ import AdminPlan from "discourse/plugins/discourse-patrons/discourse/models/admin-plan"; +import Group from "discourse/models/group"; export default Discourse.Route.extend({ model(params) { @@ -13,7 +14,9 @@ export default Discourse.Route.extend({ plan = AdminPlan.find(id); } - return Ember.RSVP.hash({ plan, product }); + const groups = Group.findAll({ ignore_automatic: true }); + + return Ember.RSVP.hash({ plan, product, groups }); }, renderTemplate() { diff --git a/assets/javascripts/discourse/routes/admin-plugins-discourse-patrons-products-show.js.es6 b/assets/javascripts/discourse/routes/admin-plugins-discourse-patrons-products-show.js.es6 index 08ca81b..6781cba 100644 --- a/assets/javascripts/discourse/routes/admin-plugins-discourse-patrons-products-show.js.es6 +++ b/assets/javascripts/discourse/routes/admin-plugins-discourse-patrons-products-show.js.es6 @@ -1,6 +1,5 @@ import AdminProduct from "discourse/plugins/discourse-patrons/discourse/models/admin-product"; import AdminPlan from "discourse/plugins/discourse-patrons/discourse/models/admin-plan"; -import Group from "discourse/models/group"; export default Discourse.Route.extend({ model(params) { @@ -16,9 +15,7 @@ export default Discourse.Route.extend({ plans = AdminPlan.findAll({ product_id }); } - const groups = Group.findAll({ ignore_automatic: true }); - - return Ember.RSVP.hash({ plans, product, groups }); + return Ember.RSVP.hash({ plans, product }); }, actions: { diff --git a/assets/javascripts/discourse/templates/admin/plugins-discourse-patrons-products-show-plans-show.hbs b/assets/javascripts/discourse/templates/admin/plugins-discourse-patrons-products-show-plans-show.hbs index 1f000b4..a5a99bd 100644 --- a/assets/javascripts/discourse/templates/admin/plugins-discourse-patrons-products-show-plans-show.hbs +++ b/assets/javascripts/discourse/templates/admin/plugins-discourse-patrons-products-show-plans-show.hbs @@ -13,6 +13,13 @@ {{i18n 'discourse_patrons.admin.plans.plan.nickname_help'}}

+

+ + {{combo-box valueAttribute="name" content=model.groups value=model.plan.metadata.group_name}} +

+ {{i18n 'discourse_patrons.admin.plans.plan.group_help'}} +
+

{{input type="text" name="name" value=model.plan.amount}} diff --git a/assets/javascripts/discourse/templates/admin/plugins-discourse-patrons-products-show.hbs b/assets/javascripts/discourse/templates/admin/plugins-discourse-patrons-products-show.hbs index a836020..3626701 100644 --- a/assets/javascripts/discourse/templates/admin/plugins-discourse-patrons-products-show.hbs +++ b/assets/javascripts/discourse/templates/admin/plugins-discourse-patrons-products-show.hbs @@ -15,15 +15,8 @@

- - {{combo-box valueAttribute="name" content=model.groups value=model.product.metadata.group_name}} -

- {{i18n 'discourse_patrons.admin.products.product.group_help'}} -
-

-

- - {{input type="checkbox" checked=model.product.active}} + + {{input type="checkbox" name="active" checked=model.product.active}}

@@ -35,6 +28,7 @@ {{i18n 'discourse_patrons.admin.plans.plan.nickname'}} {{i18n 'discourse_patrons.admin.plans.plan.interval'}} {{i18n 'discourse_patrons.admin.plans.plan.created_at'}} + {{i18n 'discourse_patrons.admin.plans.plan.group'}} {{i18n 'discourse_patrons.admin.plans.plan.amount'}} {{#link-to "adminPlugins.discourse-patrons.products.show.plans.show" model.product.id "new" class="btn"}} @@ -47,6 +41,7 @@ {{plan.nickname}} {{plan.interval}} {{format-date plan.createdFormatted}} + {{plan.metadata.group_name}} {{plan.amount}} {{#link-to "adminPlugins.discourse-patrons.products.show.plans.show" model.product.id plan.id class="btn no-text btn-icon"}} @@ -65,7 +60,7 @@ {{#unless model.plans}}
- Create a pricing plan to subscribe customers to this product + {{i18n 'discourse_patrons.admin.products.product.plan_help'}} {{/unless}} diff --git a/config/locales/client.en.yml b/config/locales/client.en.yml index 4edc029..11802c0 100644 --- a/config/locales/client.en.yml +++ b/config/locales/client.en.yml @@ -75,6 +75,7 @@ en: statement_descriptor_help: Extra information about a product which will appear on your customer’s credit card statement. group: User Group group_help: This is the discourse user group the customer gets added to when the subscription is created. + plan_help: Create a pricing plan to subscribe customers to this product active: Active created_at: Created plans: @@ -95,6 +96,8 @@ en: amount: Amount trial: Trial Period Days trial_help: Subscriptions to this plan will automatically start with a free trial of this length + group: User Group + group_help: This is the discourse user group the customer gets added to when the subscription is created. created_at: Created subscriptions: title: Subscriptions diff --git a/spec/requests/admin/plans_controller_spec.rb b/spec/requests/admin/plans_controller_spec.rb index 8bd0ce0..0147066 100644 --- a/spec/requests/admin/plans_controller_spec.rb +++ b/spec/requests/admin/plans_controller_spec.rb @@ -79,33 +79,38 @@ module DiscoursePatrons describe "create" do it "creates a plan with a nickname" do ::Stripe::Plan.expects(:create).with(has_entry(:nickname, 'Veg')) - post "/patrons/admin/plans.json", params: { nickname: 'Veg' } + post "/patrons/admin/plans.json", params: { nickname: 'Veg', metadata: { group_name: '' } } end it "creates a plan with a currency" do SiteSetting.stubs(:discourse_patrons_currency).returns('aud') ::Stripe::Plan.expects(:create).with(has_entry(:currency, 'aud')) - post "/patrons/admin/plans.json", params: {} + post "/patrons/admin/plans.json", params: { metadata: { group_name: '' } } end it "creates a plan with an interval" do ::Stripe::Plan.expects(:create).with(has_entry(:interval, 'week')) - post "/patrons/admin/plans.json", params: { interval: 'week' } + post "/patrons/admin/plans.json", params: { interval: 'week', metadata: { group_name: '' } } end it "creates a plan with an amount" do ::Stripe::Plan.expects(:create).with(has_entry(:amount, '102')) - post "/patrons/admin/plans.json", params: { amount: '102' } + post "/patrons/admin/plans.json", params: { amount: '102', metadata: { group_name: '' } } end it "creates a plan with a trial period" do ::Stripe::Plan.expects(:create).with(has_entry(:trial_period_days, '14')) - post "/patrons/admin/plans.json", params: { trial_period_days: '14' } + post "/patrons/admin/plans.json", params: { trial_period_days: '14', metadata: { group_name: '' } } end it "creates a plan with a product" do ::Stripe::Plan.expects(:create).with(has_entry(product: 'prod_walterwhite')) - post "/patrons/admin/plans.json", params: { product: 'prod_walterwhite' } + post "/patrons/admin/plans.json", params: { product: 'prod_walterwhite', metadata: { group_name: '' } } + end + + it 'has a metadata' do + ::Stripe::Plan.expects(:create).with(has_entry(metadata: { group_name: 'discourse-user-group-name' })) + post "/patrons/admin/plans.json", params: { metadata: { group_name: 'discourse-user-group-name' } } end end diff --git a/spec/requests/admin/products_controller_spec.rb b/spec/requests/admin/products_controller_spec.rb index eda8cb2..e776d4b 100644 --- a/spec/requests/admin/products_controller_spec.rb +++ b/spec/requests/admin/products_controller_spec.rb @@ -56,27 +56,22 @@ module DiscoursePatrons describe 'create' do it 'is of product type service' do ::Stripe::Product.expects(:create).with(has_entry(:type, 'service')) - post "/patrons/admin/products.json", params: { metadata: { group_name: '' } } + post "/patrons/admin/products.json", params: { } end it 'has a name' do ::Stripe::Product.expects(:create).with(has_entry(:name, 'Jesse Pinkman')) - post "/patrons/admin/products.json", params: { name: 'Jesse Pinkman', metadata: { group_name: '' } } + post "/patrons/admin/products.json", params: { name: 'Jesse Pinkman' } end it 'has an active attribute' do ::Stripe::Product.expects(:create).with(has_entry(active: 'false')) - post "/patrons/admin/products.json", params: { active: 'false', metadata: { group_name: '' } } + post "/patrons/admin/products.json", params: { active: 'false' } end it 'has a statement descriptor' do ::Stripe::Product.expects(:create).with(has_entry(statement_descriptor: 'Blessed are the cheesemakers')) - post "/patrons/admin/products.json", params: { statement_descriptor: 'Blessed are the cheesemakers', metadata: { group_name: '' } } - end - - it 'has a metadata' do - ::Stripe::Product.expects(:create).with(has_entry(metadata: { group_name: 'discourse-user-group-name' })) - post "/patrons/admin/products.json", params: { metadata: { group_name: 'discourse-user-group-name' } } + post "/patrons/admin/products.json", params: { statement_descriptor: 'Blessed are the cheesemakers' } end end @@ -90,7 +85,7 @@ module DiscoursePatrons describe 'update' do it 'updates the product' do ::Stripe::Product.expects(:update) - patch "/patrons/admin/products/prod_walterwhite.json", params: { metadata: { group_name: '' } } + patch "/patrons/admin/products/prod_walterwhite.json", params: {} end end