Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
35 changes: 34 additions & 1 deletion lib/stripe_mock/api/live.rb
Original file line number Diff line number Diff line change
@@ -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
45 changes: 44 additions & 1 deletion spec/stripe_mock_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down Expand Up @@ -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
Expand Down