mirror of
https://github.com/stripe/stripe-ruby.git
synced 2025-05-13 01:11:56 -04:00
99 lines
2.8 KiB
Ruby
99 lines
2.8 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
require "stripe"
|
|
require "test/unit"
|
|
require "mocha/test_unit"
|
|
require "stringio"
|
|
require "shoulda/context"
|
|
require "webmock/test_unit"
|
|
|
|
PROJECT_ROOT = File.expand_path("../", __dir__)
|
|
|
|
require File.expand_path("test_data", __dir__)
|
|
require File.expand_path("stripe_mock", __dir__)
|
|
|
|
MOCK_MINIMUM_VERSION = "0.109.0"
|
|
MOCK_PORT = Stripe::StripeMock.start
|
|
|
|
# Disable all real network connections except those that are outgoing to
|
|
# stripe-mock.
|
|
WebMock.disable_net_connect!(allow: "localhost:#{MOCK_PORT}")
|
|
|
|
# Try one initial test connection to stripe-mock so that if there's a problem
|
|
# we can print one error and fail fast so that it's more clear to the user how
|
|
# they should fix the problem.
|
|
begin
|
|
resp = Net::HTTP.get_response(URI("http://localhost:#{MOCK_PORT}/"))
|
|
version = resp["Stripe-Mock-Version"]
|
|
|
|
if version.nil?
|
|
abort("Couldn't find `Stripe-Mock-Version` in response from " \
|
|
"`localhost:#{MOCK_PORT}`. Is the service running there stripe-mock?")
|
|
end
|
|
|
|
if version != "master" &&
|
|
Gem::Version.new(version) < Gem::Version.new(MOCK_MINIMUM_VERSION)
|
|
abort("Your version of stripe-mock (#{version}) is too old. The minimum " \
|
|
"version to run this test suite is #{MOCK_MINIMUM_VERSION}. Please " \
|
|
"see its repository for upgrade instructions.")
|
|
end
|
|
rescue Errno::ECONNREFUSED
|
|
abort("Couldn't reach stripe-mock at `localhost:#{MOCK_PORT}`. Is " \
|
|
"it running? Please see README for setup instructions.")
|
|
end
|
|
|
|
Test::Unit.at_exit do
|
|
Stripe::StripeMock.stop
|
|
end
|
|
|
|
module Test
|
|
module Unit
|
|
class TestCase
|
|
include Stripe::TestData
|
|
include Mocha
|
|
|
|
WRITE_TIMEOUT_SUPPORTED = Net::HTTP.instance_methods.include?(:write_timeout=)
|
|
|
|
setup do
|
|
Stripe.api_key = "sk_test_123"
|
|
Stripe.api_base = "http://localhost:#{MOCK_PORT}"
|
|
Stripe.uploads_base = "http://localhost:#{MOCK_PORT}"
|
|
|
|
stub_connect
|
|
end
|
|
|
|
teardown do
|
|
Stripe.api_key = nil
|
|
end
|
|
|
|
private def stub_connect
|
|
stub_request(:any, /^#{Stripe.connect_base}/).to_return(body: "{}")
|
|
end
|
|
end
|
|
end
|
|
|
|
# helpers for writing webhook-related tests
|
|
module WebhookHelpers
|
|
SECRET = "whsec_test_secret"
|
|
|
|
# calculate a verification header from a given payload
|
|
def self.generate_header(opts = {})
|
|
raise ArgumentError, "payload must be supplied!" unless opts[:payload]
|
|
|
|
opts[:timestamp] ||= Time.now
|
|
opts[:secret] ||= SECRET
|
|
opts[:scheme] ||= Stripe::Webhook::Signature::EXPECTED_SCHEME
|
|
opts[:signature] ||= Stripe::Webhook::Signature.compute_signature(
|
|
opts[:timestamp],
|
|
opts[:payload],
|
|
opts[:secret]
|
|
)
|
|
Stripe::Webhook::Signature.generate_header(
|
|
opts[:timestamp],
|
|
opts[:signature],
|
|
scheme: opts[:scheme]
|
|
)
|
|
end
|
|
end
|
|
end
|