2019-10-09 21:08:52 -04:00
|
|
|
# frozen_string_literal: true
|
|
|
|
|
2022-12-29 07:35:06 -05:00
|
|
|
require "rails_helper"
|
2019-10-09 21:08:52 -04:00
|
|
|
|
2024-01-16 11:51:44 -05:00
|
|
|
RSpec.describe DiscourseSubscriptions::Admin::PlansController do
|
2024-03-06 08:51:25 -05:00
|
|
|
before { SiteSetting.discourse_subscriptions_enabled = true }
|
|
|
|
|
2024-01-16 11:51:44 -05:00
|
|
|
it "is a subclass of AdminController" do
|
|
|
|
expect(DiscourseSubscriptions::Admin::PlansController < ::Admin::AdminController).to eq(true)
|
|
|
|
end
|
|
|
|
|
|
|
|
context "when not authenticated" do
|
|
|
|
describe "index" do
|
|
|
|
it "does not get the plans" do
|
|
|
|
::Stripe::Price.expects(:list).never
|
|
|
|
get "/s/admin/plans.json"
|
|
|
|
end
|
|
|
|
|
|
|
|
it "not ok" do
|
|
|
|
get "/s/admin/plans.json"
|
|
|
|
expect(response.status).to eq 404
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
describe "create" do
|
|
|
|
it "does not create a plan" do
|
|
|
|
::Stripe::Price.expects(:create).never
|
|
|
|
post "/s/admin/plans.json", params: { name: "Rick Astley", amount: 1, interval: "week" }
|
|
|
|
end
|
|
|
|
|
|
|
|
it "is not ok" do
|
|
|
|
post "/s/admin/plans.json", params: { name: "Rick Astley", amount: 1, interval: "week" }
|
|
|
|
expect(response.status).to eq 404
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
describe "show" do
|
|
|
|
it "does not show the plan" do
|
|
|
|
::Stripe::Price.expects(:retrieve).never
|
|
|
|
get "/s/admin/plans/plan_12345.json"
|
|
|
|
end
|
|
|
|
|
|
|
|
it "is not ok" do
|
|
|
|
get "/s/admin/plans/plan_12345.json"
|
|
|
|
expect(response.status).to eq 404
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
describe "update" do
|
|
|
|
it "does not update a plan" do
|
|
|
|
::Stripe::Price.expects(:update).never
|
|
|
|
delete "/s/admin/plans/plan_12345.json"
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
context "when authenticated" do
|
|
|
|
let(:admin) { Fabricate(:admin) }
|
|
|
|
|
|
|
|
before { sign_in(admin) }
|
|
|
|
|
|
|
|
describe "index" do
|
|
|
|
it "lists the plans" do
|
|
|
|
::Stripe::Price.expects(:list).with(nil)
|
|
|
|
get "/s/admin/plans.json"
|
|
|
|
end
|
|
|
|
|
|
|
|
it "lists the plans for the product" do
|
|
|
|
::Stripe::Price.expects(:list).with({ product: "prod_id123" })
|
|
|
|
get "/s/admin/plans.json", params: { product_id: "prod_id123" }
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
describe "show" do
|
|
|
|
it "shows a plan" do
|
|
|
|
::Stripe::Price.expects(:retrieve).with("plan_12345").returns(currency: "aud")
|
|
|
|
get "/s/admin/plans/plan_12345.json"
|
|
|
|
expect(response.status).to eq 200
|
|
|
|
end
|
|
|
|
|
|
|
|
it "upcases the currency" do
|
|
|
|
::Stripe::Price
|
|
|
|
.expects(:retrieve)
|
|
|
|
.with("plan_12345")
|
|
|
|
.returns(currency: "aud", recurring: { interval: "year" })
|
|
|
|
get "/s/admin/plans/plan_12345.json"
|
|
|
|
|
|
|
|
plan = response.parsed_body
|
|
|
|
expect(plan["currency"]).to eq "AUD"
|
|
|
|
expect(plan["interval"]).to eq "year"
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
describe "create" do
|
|
|
|
it "creates a plan with a nickname" do
|
|
|
|
::Stripe::Price.expects(:create).with(has_entry(:nickname, "Veg"))
|
|
|
|
post "/s/admin/plans.json", params: { nickname: "Veg", metadata: { group_name: "" } }
|
|
|
|
end
|
|
|
|
|
|
|
|
it "creates a plan with a currency" do
|
|
|
|
::Stripe::Price.expects(:create).with(has_entry(:currency, "AUD"))
|
|
|
|
post "/s/admin/plans.json", params: { currency: "AUD", metadata: { group_name: "" } }
|
|
|
|
end
|
|
|
|
|
|
|
|
it "creates a plan with an interval" do
|
|
|
|
::Stripe::Price.expects(:create).with(has_entry(recurring: { interval: "week" }))
|
|
|
|
post "/s/admin/plans.json",
|
|
|
|
params: {
|
|
|
|
type: "recurring",
|
|
|
|
interval: "week",
|
|
|
|
metadata: {
|
|
|
|
group_name: "",
|
|
|
|
},
|
|
|
|
}
|
|
|
|
end
|
|
|
|
|
|
|
|
it "creates a plan as a one-time purchase" do
|
|
|
|
::Stripe::Price.expects(:create).with(Not(has_key(:recurring)))
|
|
|
|
post "/s/admin/plans.json", params: { metadata: { group_name: "" } }
|
|
|
|
end
|
|
|
|
|
|
|
|
it "creates a plan with an amount" do
|
|
|
|
::Stripe::Price.expects(:create).with(has_entry(:unit_amount, "102"))
|
|
|
|
post "/s/admin/plans.json", params: { amount: "102", metadata: { group_name: "" } }
|
|
|
|
end
|
|
|
|
|
|
|
|
it "creates a plan with a product" do
|
|
|
|
::Stripe::Price.expects(:create).with(has_entry(product: "prod_walterwhite"))
|
|
|
|
post "/s/admin/plans.json",
|
|
|
|
params: {
|
|
|
|
product: "prod_walterwhite",
|
|
|
|
metadata: {
|
|
|
|
group_name: "",
|
|
|
|
},
|
|
|
|
}
|
|
|
|
end
|
|
|
|
|
|
|
|
it "creates a plan with an active status" do
|
|
|
|
::Stripe::Price.expects(:create).with(has_entry(:active, "false"))
|
|
|
|
post "/s/admin/plans.json", params: { active: "false", metadata: { group_name: "" } }
|
|
|
|
end
|
|
|
|
|
|
|
|
# TODO: Need to fix the metadata tests
|
|
|
|
# I think mocha has issues with the metadata fields here.
|
|
|
|
|
|
|
|
#it 'has metadata' do
|
|
|
|
# ::Stripe::Price.expects(:create).with(has_entry(:group_name, "discourse-user-group-name"))
|
|
|
|
# post "/s/admin/plans.json", params: { amount: "100", metadata: { group_name: 'discourse-user-group-name' } }
|
|
|
|
#end
|
|
|
|
|
|
|
|
#it "creates a plan with a trial period" do
|
|
|
|
# ::Stripe::Price.expects(:create).with(has_entry(trial_period_days: '14'))
|
|
|
|
# post "/s/admin/plans.json", params: { trial_period_days: '14' }
|
|
|
|
#end
|
|
|
|
end
|
|
|
|
|
|
|
|
describe "update" do
|
|
|
|
it "updates a plan" do
|
|
|
|
::Stripe::Price.expects(:update)
|
|
|
|
patch "/s/admin/plans/plan_12345.json",
|
|
|
|
params: {
|
|
|
|
trial_period_days: "14",
|
|
|
|
metadata: {
|
|
|
|
group_name: "discourse-user-group-name",
|
|
|
|
},
|
|
|
|
}
|
2019-10-09 21:08:52 -04:00
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|