From 866e6dbc67af120febe44ed99d696b88ec996b35 Mon Sep 17 00:00:00 2001 From: strawhatduckk Date: Mon, 8 Dec 2025 14:20:25 +0800 Subject: [PATCH] feat: Accept stripe keys as configuration or turning on live mode --- lib/stripe_mock/api/live.rb | 35 ++++++++++++++++++++++++++++- spec/stripe_mock_spec.rb | 45 ++++++++++++++++++++++++++++++++++++- 2 files changed, 78 insertions(+), 2 deletions(-) diff --git a/lib/stripe_mock/api/live.rb b/lib/stripe_mock/api/live.rb index a913b9791..d605e97ef 100644 --- a/lib/stripe_mock/api/live.rb +++ b/lib/stripe_mock/api/live.rb @@ -1,15 +1,48 @@ module StripeMock - def self.toggle_live(toggle) + class Configuration + attr_accessor :api_key, :oauth_access_token + + def initialize + @api_key = nil + @oauth_access_token = nil + end + end + + class << self + attr_writer :configuration + end + + def self.configuration + @configuration ||= Configuration.new + end + + def self.configure + yield(configuration) + end + + def self.toggle_live(toggle, api_key: nil, oauth_access_token: nil) if @state != 'ready' && @state != 'live' raise "You cannot toggle StripeMock live when it has already started." end if toggle @state = 'live' StripeMock.set_default_test_helper_strategy(:live) + + # Set API key from argument, configuration, or environment variable + key = api_key || configuration.api_key || ENV['STRIPE_TEST_SECRET_KEY'] + Stripe.api_key = key if key + + # Store OAuth token for later use + token = oauth_access_token || configuration.oauth_access_token || ENV['STRIPE_TEST_OAUTH_ACCESS_TOKEN'] + configuration.oauth_access_token = token if token else @state = 'ready' StripeMock.set_default_test_helper_strategy(:mock) end end + + def self.oauth_access_token + configuration.oauth_access_token + end end diff --git a/spec/stripe_mock_spec.rb b/spec/stripe_mock_spec.rb index 965f1fbec..596837ff3 100644 --- a/spec/stripe_mock_spec.rb +++ b/spec/stripe_mock_spec.rb @@ -73,7 +73,10 @@ end describe "Live Testing" do - after { StripeMock.instance_variable_set(:@state, 'ready') } + after do + StripeMock.instance_variable_set(:@state, 'ready') + StripeMock.instance_variable_set(:@configuration, nil) + end it "sets the default test strategy" do StripeMock.toggle_live(true) @@ -107,6 +110,46 @@ StripeMock.instance_variable_set(:@state, 'remote') expect { StripeMock.toggle_live(true) }.to raise_error(RuntimeError, "You cannot toggle StripeMock live when it has already started.") end + + it "sets api_key via inline argument" do + StripeMock.toggle_live(true, api_key: 'sk_test_inline_key') + expect(Stripe.api_key).to eq 'sk_test_inline_key' + end + + it "sets oauth_access_token via inline argument" do + StripeMock.toggle_live(true, oauth_access_token: 'oauth_inline_token') + expect(StripeMock.oauth_access_token).to eq 'oauth_inline_token' + end + + it "sets api_key via configuration block" do + StripeMock.configure do |config| + config.api_key = 'sk_test_configured_key' + end + StripeMock.toggle_live(true) + expect(Stripe.api_key).to eq 'sk_test_configured_key' + end + + it "sets oauth_access_token via configuration block" do + StripeMock.configure do |config| + config.oauth_access_token = 'oauth_configured_token' + end + StripeMock.toggle_live(true) + expect(StripeMock.oauth_access_token).to eq 'oauth_configured_token' + end + + it "inline argument takes precedence over configuration" do + StripeMock.configure do |config| + config.api_key = 'sk_test_configured_key' + config.oauth_access_token = 'oauth_configured_token' + end + StripeMock.toggle_live(true, api_key: 'sk_test_override', oauth_access_token: 'oauth_override') + expect(Stripe.api_key).to eq 'sk_test_override' + expect(StripeMock.oauth_access_token).to eq 'oauth_override' + end + + it "returns a Configuration object" do + expect(StripeMock.configuration).to be_a StripeMock::Configuration + end end describe "Test Helper Strategies" do