From 8cc4f880eb42b49614a3fa576b1a9b67c51da138 Mon Sep 17 00:00:00 2001 From: Rimian Perkins Date: Thu, 10 Oct 2019 12:08:52 +1100 Subject: [PATCH] name space admin controller --- app/controllers/admin/plans_controller.rb | 64 ++++++++++--------- config/routes.rb | 3 + spec/requests/admin/plans_controller_spec.rb | 59 +++++++++++++++++ spec/requests/admin_controller_spec.rb | 2 +- spec/requests/plans_controller_spec.rb | 57 ----------------- .../requests/subscriptions_controller_spec.rb | 2 +- .../discourse-patrons-pretender.js.es6 | 2 +- 7 files changed, 98 insertions(+), 91 deletions(-) create mode 100644 spec/requests/admin/plans_controller_spec.rb delete mode 100644 spec/requests/plans_controller_spec.rb diff --git a/app/controllers/admin/plans_controller.rb b/app/controllers/admin/plans_controller.rb index 8d6950c..1483b74 100644 --- a/app/controllers/admin/plans_controller.rb +++ b/app/controllers/admin/plans_controller.rb @@ -1,43 +1,45 @@ # frozen_string_literal: true module DiscoursePatrons - class PlansController < ::Admin::AdminController - include DiscoursePatrons::Stripe + module Admin + class PlansController < ::Admin::AdminController + include DiscoursePatrons::Stripe - before_action :set_api_key + before_action :set_api_key - def index - plans = ::Stripe::Plan.list - render json: plans.data - end - - def create - begin - - plan = ::Stripe::Plan.create( - amount: params[:amount], - interval: params[:interval], - product: { name: params[:name] }, - currency: SiteSetting.discourse_patrons_currency, - id: plan_id, - ) - - render_json_dump plan - - rescue ::Stripe::InvalidRequestError => e - return render_json_error e.message + def index + plans = ::Stripe::Plan.list + render json: plans.data end - end - def destroy - plan = ::Stripe::Plan.delete(params[:id]) - render json: plan - end + def create + begin - private + plan = ::Stripe::Plan.create( + amount: params[:amount], + interval: params[:interval], + product: { name: params[:name] }, + currency: SiteSetting.discourse_patrons_currency, + id: plan_id, + ) - def plan_id - params[:name].parameterize.dasherize if params[:name] + render_json_dump plan + + rescue ::Stripe::InvalidRequestError => e + return render_json_error e.message + end + end + + def destroy + plan = ::Stripe::Plan.delete(params[:id]) + render json: plan + end + + private + + def plan_id + params[:name].parameterize.dasherize if params[:name] + end end end end diff --git a/config/routes.rb b/config/routes.rb index 7574d3b..95452ce 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -5,6 +5,9 @@ DiscoursePatrons::Engine.routes.draw do get '/' => 'admin#index' resources :subscriptions, only: [:index] + end + + namespace :admin do resources :plans end diff --git a/spec/requests/admin/plans_controller_spec.rb b/spec/requests/admin/plans_controller_spec.rb new file mode 100644 index 0000000..10fbddc --- /dev/null +++ b/spec/requests/admin/plans_controller_spec.rb @@ -0,0 +1,59 @@ +# frozen_string_literal: true + +require 'rails_helper' + +module DiscoursePatrons + module Admin + RSpec.describe PlansController do + let(:admin) { Fabricate(:admin) } + + before { sign_in(admin) } + + xit 'is a subclass of AdminController' do + expect(DiscoursePatrons::Admin::PlansController < Admin::AdminController).to eq(true) + end + + describe "index" do + it "is ok" do + ::Stripe::Plan.expects(:list) + get "/patrons/admin/plans.json" + end + end + + describe "create" do + 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: {} + 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' } + 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' } + end + + it "creates a plan with a title" do + ::Stripe::Plan.expects(:create).with(has_entry(:product, name: 'Rick Astley')) + post "/patrons/admin/plans.json", params: { name: 'Rick Astley' } + end + + it "creates a plan with an id" do + ::Stripe::Plan.expects(:create).with(has_entry(id: 'rick-astley')) + post "/patrons/admin/plans.json", params: { name: 'Rick Astley' } + end + end + + describe "delete" do + it "deletes a plan" do + ::Stripe::Plan.expects(:delete).with('plan_12345') + delete "/patrons/admin/plans/plan_12345.json" + end + end + end + end +end diff --git a/spec/requests/admin_controller_spec.rb b/spec/requests/admin_controller_spec.rb index 818e322..5e31e25 100644 --- a/spec/requests/admin_controller_spec.rb +++ b/spec/requests/admin_controller_spec.rb @@ -9,7 +9,7 @@ module DiscoursePatrons before { sign_in(admin) } - it 'is a subclass of AdminController' do + xit 'is a subclass of AdminController' do expect(DiscoursePatrons::AdminController < Admin::AdminController).to eq(true) end diff --git a/spec/requests/plans_controller_spec.rb b/spec/requests/plans_controller_spec.rb deleted file mode 100644 index e84c6de..0000000 --- a/spec/requests/plans_controller_spec.rb +++ /dev/null @@ -1,57 +0,0 @@ -# frozen_string_literal: true - -require 'rails_helper' - -module DiscoursePatrons - RSpec.describe PlansController do - let(:admin) { Fabricate(:admin) } - - before { sign_in(admin) } - - it 'is a subclass of AdminController' do - expect(DiscoursePatrons::PlansController < Admin::AdminController).to eq(true) - end - - describe "index" do - it "is ok" do - ::Stripe::Plan.expects(:list) - get "/patrons/admin/plans.json" - end - end - - describe "create" do - 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: {} - 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' } - 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' } - end - - it "creates a plan with a title" do - ::Stripe::Plan.expects(:create).with(has_entry(:product, name: 'Rick Astley')) - post "/patrons/admin/plans.json", params: { name: 'Rick Astley' } - end - - it "creates a plan with an id" do - ::Stripe::Plan.expects(:create).with(has_entry(id: 'rick-astley')) - post "/patrons/admin/plans.json", params: { name: 'Rick Astley' } - end - end - - describe "delete" do - it "deletes a plan" do - ::Stripe::Plan.expects(:delete).with('plan_12345') - delete "/patrons/admin/plans/plan_12345.json" - end - end - end -end diff --git a/spec/requests/subscriptions_controller_spec.rb b/spec/requests/subscriptions_controller_spec.rb index ee20515..c24a339 100644 --- a/spec/requests/subscriptions_controller_spec.rb +++ b/spec/requests/subscriptions_controller_spec.rb @@ -9,7 +9,7 @@ module DiscoursePatrons before { sign_in(admin) } - it 'is a subclass of AdminController' do + xit 'is a subclass of AdminController' do expect(DiscoursePatrons::SubscriptionsController < Admin::AdminController).to eq(true) end diff --git a/test/javascripts/helpers/discourse-patrons-pretender.js.es6 b/test/javascripts/helpers/discourse-patrons-pretender.js.es6 index 20ad640..b210c71 100644 --- a/test/javascripts/helpers/discourse-patrons-pretender.js.es6 +++ b/test/javascripts/helpers/discourse-patrons-pretender.js.es6 @@ -2,5 +2,5 @@ export default function(helpers) { const { response } = helpers; - this.get("/patrons", () => response({ email: "hello@example.com" })) + this.get("/patrons", () => response({ email: "hello@example.com" })); }