From d478f6e42e37eca1a20cd737ecdb112e50739c19 Mon Sep 17 00:00:00 2001 From: Tanmay Deep Sharma Date: Thu, 6 Nov 2025 18:10:19 +0530 Subject: [PATCH] fxi the subscription provision service spec --- .../subscription_provisioning_service_spec.rb | 47 +++++++++++++++++-- 1 file changed, 43 insertions(+), 4 deletions(-) diff --git a/spec/enterprise/services/enterprise/billing/v2/subscription_provisioning_service_spec.rb b/spec/enterprise/services/enterprise/billing/v2/subscription_provisioning_service_spec.rb index b07b5b2d9..4631e6c96 100644 --- a/spec/enterprise/services/enterprise/billing/v2/subscription_provisioning_service_spec.rb +++ b/spec/enterprise/services/enterprise/billing/v2/subscription_provisioning_service_spec.rb @@ -13,7 +13,9 @@ describe Enterprise::Billing::V2::SubscriptionProvisioningService do describe '#provision' do let(:subscription_response) do - OpenStruct.new( + # Mock Stripe::V2::Billing::PricingPlanSubscription object + instance_double( + Stripe::V2::Billing::PricingPlanSubscription, id: subscription_id, pricing_plan: pricing_plan_id, billing_cadence: 'bpc_cadence_123', @@ -22,7 +24,8 @@ describe Enterprise::Billing::V2::SubscriptionProvisioningService do end before do - allow(StripeV2Client).to receive(:request).and_return(subscription_response) + # Mock the retrieve_pricing_plan_subscription method directly + allow(service).to receive(:retrieve_pricing_plan_subscription).with(subscription_id).and_return(subscription_response) end it 'provisions subscription' do @@ -35,7 +38,9 @@ describe Enterprise::Billing::V2::SubscriptionProvisioningService do describe '#refresh' do let(:subscription_response) do - OpenStruct.new( + # Mock Stripe::V2::Billing::PricingPlanSubscription object + instance_double( + Stripe::V2::Billing::PricingPlanSubscription, id: 'bpps_sub_456', pricing_plan: pricing_plan_id, billing_cadence: 'bpc_cadence_123', @@ -45,7 +50,9 @@ describe Enterprise::Billing::V2::SubscriptionProvisioningService do before do account.update!(custom_attributes: { 'stripe_subscription_id' => 'bpps_sub_456' }) - allow(StripeV2Client).to receive(:request).and_return(subscription_response) + + # Mock the retrieve_pricing_plan_subscription method directly + allow(service).to receive(:retrieve_pricing_plan_subscription).with('bpps_sub_456').and_return(subscription_response) end it 'refreshes subscription' do @@ -54,4 +61,36 @@ describe Enterprise::Billing::V2::SubscriptionProvisioningService do expect(result[:pricing_plan_id]).to eq(pricing_plan_id) end end + + describe '#cancel subscription' do + let(:subscription_response) do + # Mock Stripe::V2::Billing::PricingPlanSubscription object with canceled status + instance_double( + Stripe::V2::Billing::PricingPlanSubscription, + id: subscription_id, + pricing_plan: pricing_plan_id, + billing_cadence: 'bpc_cadence_123', + servicing_status: 'canceled' + ) + end + + let(:hacker_plan_id) { 'bpp_hacker_plan_123' } + + before do + create(:installation_config, name: 'STRIPE_HACKER_PLAN_ID', value: hacker_plan_id) + + # Mock the retrieve_pricing_plan_subscription method directly + allow(service).to receive(:retrieve_pricing_plan_subscription).with(subscription_id).and_return(subscription_response) + end + + it 'cancels subscription and resets to hacker plan' do + result = service.provision(subscription_id: subscription_id) + + expect(result[:pricing_plan_id]).to be_nil + expect(result[:quantity]).to be_nil + expect(account.custom_attributes['plan_name']).to eq('Hacker') + expect(account.custom_attributes['stripe_subscription_id']).to be_nil + expect(account.custom_attributes['subscription_status']).to eq('canceled') + end + end end