From e51aa5f6f0f4db8d848daf98efdd712e6b3c704f Mon Sep 17 00:00:00 2001 From: Rimian Perkins Date: Tue, 15 Oct 2019 13:18:25 +1100 Subject: [PATCH] products admin route and basic pages --- app/controllers/admin/products_controller.rb | 16 ++++++++++ ...ugins-discourse-patrons-plans-index.js.es6 | 8 ----- .../controllers/patrons-subscribe.js.es6 | 2 +- ...ns-discourse-patrons-products-index.js.es6 | 24 ++++++++++++++ ...ugins-discourse-patrons-products-index.hbs | 2 +- config/routes.rb | 1 + plugin.rb | 1 + .../admin/products_controller_spec.rb | 32 +++++++++++++++++++ .../admin/subscriptions_controller_spec.rb | 27 ++++++++++------ 9 files changed, 94 insertions(+), 19 deletions(-) create mode 100644 app/controllers/admin/products_controller.rb create mode 100644 assets/javascripts/discourse/routes/admin-plugins-discourse-patrons-products-index.js.es6 create mode 100644 spec/requests/admin/products_controller_spec.rb diff --git a/app/controllers/admin/products_controller.rb b/app/controllers/admin/products_controller.rb new file mode 100644 index 0000000..3c46e7b --- /dev/null +++ b/app/controllers/admin/products_controller.rb @@ -0,0 +1,16 @@ +# frozen_string_literal: true + +module DiscoursePatrons + module Admin + class ProductsController < ::Admin::AdminController + include DiscoursePatrons::Stripe + + before_action :set_api_key + + def index + products = ::Stripe::Product.list + render_json_dump products.data + end + end + end +end diff --git a/assets/javascripts/discourse/controllers/admin-plugins-discourse-patrons-plans-index.js.es6 b/assets/javascripts/discourse/controllers/admin-plugins-discourse-patrons-plans-index.js.es6 index b5f6a81..69ba47a 100644 --- a/assets/javascripts/discourse/controllers/admin-plugins-discourse-patrons-plans-index.js.es6 +++ b/assets/javascripts/discourse/controllers/admin-plugins-discourse-patrons-plans-index.js.es6 @@ -2,14 +2,6 @@ import DiscourseURL from "discourse/lib/url"; export default Ember.Controller.extend({ actions: { - destroyPlan(plan) { - plan.destroy().then(() => - this.controllerFor("adminPluginsDiscoursePatronsPlansIndex") - .get("model") - .removeObject(plan) - ); - }, - editPlan(id) { return DiscourseURL.redirectTo( `/admin/plugins/discourse-patrons/plans/${id}` diff --git a/assets/javascripts/discourse/controllers/patrons-subscribe.js.es6 b/assets/javascripts/discourse/controllers/patrons-subscribe.js.es6 index 10eba4b..f648b82 100644 --- a/assets/javascripts/discourse/controllers/patrons-subscribe.js.es6 +++ b/assets/javascripts/discourse/controllers/patrons-subscribe.js.es6 @@ -39,7 +39,7 @@ export default Ember.Controller.extend({ }; return ajax("/patrons/subscriptions", { method: "post", data: subscriptionData }).then( - subscription => { + () => { return DiscourseURL.redirectTo(Discourse.SiteSettings.discourse_patrons_subscription_group_landing_page); } ); diff --git a/assets/javascripts/discourse/routes/admin-plugins-discourse-patrons-products-index.js.es6 b/assets/javascripts/discourse/routes/admin-plugins-discourse-patrons-products-index.js.es6 new file mode 100644 index 0000000..33f20eb --- /dev/null +++ b/assets/javascripts/discourse/routes/admin-plugins-discourse-patrons-products-index.js.es6 @@ -0,0 +1,24 @@ +import AdminProduct from "discourse/plugins/discourse-patrons/discourse/models/admin-product"; + +export default Discourse.Route.extend({ + model() { + return AdminProduct.find(); + }, + + actions: { + destroyProduct(product) { + bootbox.confirm( + I18n.t("discourse_patrons.admin.products.operations.destroy.confirm"), + I18n.t("no_value"), + I18n.t("yes_value"), + confirmed => { + if (confirmed) { + this.controllerFor("adminPluginsDiscoursePatronsProductsIndex") + .get("model") + .removeObject(product); + } + } + ); + } + } +}); diff --git a/assets/javascripts/discourse/templates/admin/plugins-discourse-patrons-products-index.hbs b/assets/javascripts/discourse/templates/admin/plugins-discourse-patrons-products-index.hbs index 3faec80..b08d335 100644 --- a/assets/javascripts/discourse/templates/admin/plugins-discourse-patrons-products-index.hbs +++ b/assets/javascripts/discourse/templates/admin/plugins-discourse-patrons-products-index.hbs @@ -1,7 +1,7 @@ - + {{#each model as |product|}} diff --git a/config/routes.rb b/config/routes.rb index 6dce13b..d30599a 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -9,6 +9,7 @@ DiscoursePatrons::Engine.routes.draw do namespace :admin do resources :plans resources :subscriptions, only: [:index] + resources :products, only: [:index] end resources :customers, only: [:create] diff --git a/plugin.rb b/plugin.rb index b5398ce..a2007f8 100644 --- a/plugin.rb +++ b/plugin.rb @@ -42,6 +42,7 @@ after_initialize do "../app/controllers/concerns/stripe", "../app/controllers/admin_controller", "../app/controllers/admin/plans_controller", + "../app/controllers/admin/products_controller", "../app/controllers/admin/subscriptions_controller", "../app/controllers/customers_controller", "../app/controllers/patrons_controller", diff --git a/spec/requests/admin/products_controller_spec.rb b/spec/requests/admin/products_controller_spec.rb new file mode 100644 index 0000000..8c426a0 --- /dev/null +++ b/spec/requests/admin/products_controller_spec.rb @@ -0,0 +1,32 @@ +# frozen_string_literal: true + +require 'rails_helper' + +module DiscoursePatrons + module Admin + RSpec.describe ProductsController do + it 'is a subclass of AdminController' do + expect(DiscoursePatrons::Admin::ProductsController < ::Admin::AdminController).to eq(true) + end + + context 'unauthenticated' do + it "does nothing" do + ::Stripe::Product.expects(:list).never + get "/patrons/admin/products.json" + expect(response.status).to eq(403) + end + end + + context 'authenticated' do + let(:admin) { Fabricate(:admin) } + + before { sign_in(admin) } + + it "gets the empty products" do + ::Stripe::Product.expects(:list) + get "/patrons/admin/products.json" + end + end + end + end +end diff --git a/spec/requests/admin/subscriptions_controller_spec.rb b/spec/requests/admin/subscriptions_controller_spec.rb index a650ddb..3ef8d4c 100644 --- a/spec/requests/admin/subscriptions_controller_spec.rb +++ b/spec/requests/admin/subscriptions_controller_spec.rb @@ -4,19 +4,28 @@ require 'rails_helper' module DiscoursePatrons RSpec.describe Admin::SubscriptionsController do - - let(:admin) { Fabricate(:admin) } - - before { sign_in(admin) } - it 'is a subclass of AdminController' do expect(DiscoursePatrons::Admin::SubscriptionsController < ::Admin::AdminController).to eq(true) end - it "gets the empty subscriptions" do - ::Stripe::Subscription.expects(:list) - get "/patrons/admin/subscriptions.json" - expect(response.status).to eq(204) + context 'unauthenticated' do + it "does nothing" do + ::Stripe::Subscription.expects(:list).never + get "/patrons/admin/subscriptions.json" + expect(response.status).to eq(403) + end + end + + context 'authenticated' do + let(:admin) { Fabricate(:admin) } + + before { sign_in(admin) } + + it "gets the empty subscriptions" do + ::Stripe::Subscription.expects(:list) + get "/patrons/admin/subscriptions.json" + expect(response.status).to eq(200) + end end end end
{{i18n 'discourse_patrons.admin.products.product.product_id'}}