diff --git a/spec/requests/admin/plans_controller_spec.rb b/spec/requests/admin/plans_controller_spec.rb
index 2d59109..c85009e 100644
--- a/spec/requests/admin/plans_controller_spec.rb
+++ b/spec/requests/admin/plans_controller_spec.rb
@@ -76,14 +76,10 @@ module DiscoursePatrons
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' }
+ it "creates a plan with a product" do
+ product = { id: 'prod_ww', name: 'Walter White' }
+ ::Stripe::Plan.expects(:create).with(has_entry(product: product))
+ post "/patrons/admin/plans.json", params: { product: product }
end
end
diff --git a/spec/requests/admin/products_controller_spec.rb b/spec/requests/admin/products_controller_spec.rb
index ba7651c..6e95f15 100644
--- a/spec/requests/admin/products_controller_spec.rb
+++ b/spec/requests/admin/products_controller_spec.rb
@@ -71,7 +71,7 @@ module DiscoursePatrons
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: { metadata: { group_name: 'discourse-user-group-name' } }
end
end
@@ -85,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: { metadata: { group_name: '' } }
end
end
diff --git a/spec/requests/subscriptions_controller_spec.rb b/spec/requests/subscriptions_controller_spec.rb
index 4b1c859..508bc07 100644
--- a/spec/requests/subscriptions_controller_spec.rb
+++ b/spec/requests/subscriptions_controller_spec.rb
@@ -4,21 +4,51 @@ require 'rails_helper'
module DiscoursePatrons
RSpec.describe SubscriptionsController do
- describe "create" do
+ context "authenticated" do
let(:user) { Fabricate(:user, email: 'hello.2@example.com') }
before do
sign_in(user)
end
- it "creates a subscription with a customer" do
- ::Stripe::Subscription.expects(:create).with(has_entry(customer: 'cus_1234'))
- post "/patrons/subscriptions.json", params: { customer: 'cus_1234' }
+ describe "create" do
+ it "creates a subscription with a customer" do
+ ::Stripe::Subscription.expects(:create).with(has_entry(customer: 'cus_1234'))
+ post "/patrons/subscriptions.json", params: { customer: 'cus_1234' }
+ end
+
+ it "creates a subscription with a plan" do
+ ::Stripe::Subscription.expects(:create).with(has_entry(items: [ plan: 'plan_1234' ]))
+ post "/patrons/subscriptions.json", params: { plan: 'plan_1234' }
+ end
end
- it "creates a subscription with a plan" do
- ::Stripe::Subscription.expects(:create).with(has_entry(items: [ plan: 'plan_1234' ]))
- post "/patrons/subscriptions.json", params: { plan: 'plan_1234' }
+ describe "user groups" do
+ let(:group) { Fabricate(:group, name: 'group-123') }
+
+ it "does not add the user to the group" do
+ ::Stripe::Subscription.expects(:create).returns(status: 'failed')
+
+ expect {
+ post "/patrons/subscriptions.json", params: { plan: 'plan_1234' }
+ }.not_to change { group.users.count }
+ end
+
+ it "adds the user to the group when the subscription is active" do
+ ::Stripe::Subscription.expects(:create).returns(status: 'active')
+
+ expect {
+ post "/patrons/subscriptions.json", params: { plan: 'plan_1234' }
+ }.to change { group.users.count }
+ end
+
+ it "adds the user to the group when the subscription is trialing" do
+ ::Stripe::Subscription.expects(:create).returns(status: 'trialing')
+
+ expect {
+ post "/patrons/subscriptions.json", params: { plan: 'plan_1234' }
+ }.to change { group.users.count }
+ end
end
end
end