mirror of
https://github.com/stripe/stripe-ruby.git
synced 2025-10-17 00:03:02 -04:00
* Introduce types to ruby * rubocop * forgot these files * other request methods * more tests, fix for raw request * Add README entry for types * rebase and regen
138 lines
4.9 KiB
Ruby
138 lines
4.9 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
require File.expand_path("../test_helper", __dir__)
|
|
|
|
module Stripe
|
|
class RequestParamsTest < Test::Unit::TestCase
|
|
class FooCreateParams < Stripe::RequestParams
|
|
attr_accessor :fun, :team
|
|
|
|
def initialize(fun: nil, team: nil)
|
|
@fun = fun
|
|
@team = team
|
|
end
|
|
|
|
class Fun < Stripe::RequestParams
|
|
attr_accessor :games
|
|
|
|
def initialize(games: nil)
|
|
@games = games
|
|
end
|
|
end
|
|
end
|
|
|
|
context "#to_h" do
|
|
should "convert to hash" do
|
|
params = FooCreateParams.new(
|
|
fun: FooCreateParams::Fun.new(games: %w[chess go]),
|
|
team: "blue"
|
|
)
|
|
expected = { fun: { games: %w[chess go] }, team: "blue" }
|
|
assert_equal expected, params.to_h
|
|
end
|
|
|
|
should "convert nested lists" do
|
|
params = FooCreateParams.new(
|
|
fun: [FooCreateParams::Fun.new(games: "chess"), FooCreateParams::Fun.new(games: "go"), FooCreateParams::Fun.new(games: "sorry")],
|
|
team: 42
|
|
)
|
|
expected = { fun: [{ games: "chess" }, { games: "go" }, { games: "sorry" }], team: 42 }
|
|
assert_equal expected, params.to_h
|
|
end
|
|
|
|
should "make request with params class" do
|
|
stub_request(:post, "#{Stripe.api_base}/v1/customers")
|
|
.with do |req|
|
|
assert req.body == "name=foo"
|
|
end
|
|
.to_return(body: JSON.generate(object: "customer"))
|
|
params = Stripe::Customer::CreateParams.new(name: "foo")
|
|
cus = Stripe::Customer.create(params)
|
|
assert cus.is_a?(Stripe::Customer)
|
|
end
|
|
end
|
|
|
|
context "different request types" do
|
|
should "create a customer with params class" do
|
|
stub_request(:post, "#{Stripe.api_base}/v1/customers")
|
|
.with(body: "name=foo")
|
|
.to_return(body: JSON.generate(object: "customer", id: "cus_123", name: "foo"))
|
|
|
|
params = Stripe::Customer::CreateParams.new(name: "foo")
|
|
customer = Stripe::Customer.create(params)
|
|
|
|
assert customer.is_a?(Stripe::Customer)
|
|
assert_equal "cus_123", customer.id
|
|
assert_equal "foo", customer.name
|
|
end
|
|
|
|
should "update a customer with params class" do
|
|
stub_request(:post, "#{Stripe.api_base}/v1/customers/cus_123")
|
|
.with(body: "name=bar")
|
|
.to_return(body: JSON.generate(object: "customer", id: "cus_123", name: "bar"))
|
|
|
|
params = Stripe::Customer::UpdateParams.new(name: "bar")
|
|
customer = Stripe::Customer.update("cus_123", params)
|
|
|
|
assert customer.is_a?(Stripe::Customer)
|
|
assert_equal "cus_123", customer.id
|
|
assert_equal "bar", customer.name
|
|
end
|
|
|
|
# NOTE: Resource-based retrieve expand is a special case...
|
|
should "retrieve a customer with params class" do
|
|
stub_request(:get, "#{Stripe::DEFAULT_API_BASE}/v1/customers/cus_123?expand[]=foo")
|
|
.to_return(body: JSON.generate(object: "customer", id: "cus_123", name: "foo"))
|
|
|
|
@client = Stripe::StripeClient.new("sk_test_123")
|
|
customer = @client.v1.customers.retrieve("cus_123", CustomerService::RetrieveParams.new(expand: [:foo]))
|
|
|
|
assert customer.is_a?(Stripe::Customer)
|
|
end
|
|
|
|
should "list customers with params class" do
|
|
stub_request(:get, "#{Stripe.api_base}/v1/customers")
|
|
.to_return(body: JSON.generate(object: "list", data: [{ id: "cus_123", name: "foo" }, { id: "cus_456", name: "bar" }]))
|
|
|
|
customers = Stripe::Customer.list
|
|
|
|
assert customers.is_a?(Stripe::ListObject)
|
|
assert_equal 2, customers.data.size
|
|
assert_equal "cus_123", customers.data[0].id
|
|
assert_equal "foo", customers.data[0].name
|
|
assert_equal "cus_456", customers.data[1].id
|
|
assert_equal "bar", customers.data[1].name
|
|
end
|
|
|
|
should "search customers with params class" do
|
|
stub_request(:get, "#{Stripe.api_base}/v1/customers/search")
|
|
.with(query: { query: "name:'foo'" })
|
|
.to_return(body: JSON.generate(object: "search_result", data: [{ id: "cus_123", name: "foo" }]))
|
|
|
|
params = Stripe::Customer::SearchParams.new(query: "name:'foo'")
|
|
customers = Stripe::Customer.search(params)
|
|
|
|
assert customers.is_a?(Stripe::SearchResultObject)
|
|
assert_equal 1, customers.data.size
|
|
assert_equal "cus_123", customers.data[0].id
|
|
assert_equal "foo", customers.data[0].name
|
|
end
|
|
|
|
should "request params work in raw request" do
|
|
expected_body = JSON.generate(id: "cus_123", name: "foo")
|
|
req = nil
|
|
|
|
stub_request(:post, "#{Stripe::DEFAULT_API_BASE}/v1/customers")
|
|
.with(body: "name=foo")
|
|
.with { |request| req = request }
|
|
.to_return(body: expected_body)
|
|
|
|
@client = Stripe::StripeClient.new("sk_test_123")
|
|
resp = @client.raw_request(:post, "/v1/customers", params: Customer::CreateParams.new(name: "foo"))
|
|
|
|
assert_equal expected_body, resp.http_body
|
|
end
|
|
end
|
|
end
|
|
end
|