mirror of
https://github.com/stripe/stripe-ruby.git
synced 2025-10-04 00:00:47 -04:00
Add Orders.
This commit is contained in:
parent
2c08524396
commit
747dac6ea0
@ -51,6 +51,7 @@ require 'stripe/bitcoin_transaction'
|
||||
require 'stripe/dispute'
|
||||
require 'stripe/product'
|
||||
require 'stripe/sku'
|
||||
require 'stripe/order'
|
||||
|
||||
# Errors
|
||||
require 'stripe/errors/stripe_error'
|
||||
|
19
lib/stripe/order.rb
Normal file
19
lib/stripe/order.rb
Normal file
@ -0,0 +1,19 @@
|
||||
module Stripe
|
||||
class Order < APIResource
|
||||
include Stripe::APIOperations::List
|
||||
include Stripe::APIOperations::Create
|
||||
include Stripe::APIOperations::Update
|
||||
|
||||
def pay(params, opts={})
|
||||
response, opts = request(:post, pay_url, params, opts)
|
||||
refresh_from(response, opts)
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def pay_url
|
||||
url + "/pay"
|
||||
end
|
||||
|
||||
end
|
||||
end
|
@ -47,6 +47,7 @@ module Stripe
|
||||
'dispute' => Dispute,
|
||||
'product' => Product,
|
||||
'sku' => SKU,
|
||||
'order' => Order,
|
||||
}
|
||||
end
|
||||
|
||||
|
@ -29,6 +29,11 @@ module Stripe
|
||||
:test => method(:make_product),
|
||||
:url => "/v1/products/#{make_product()[:id]}"
|
||||
},
|
||||
:order => {
|
||||
:new => Stripe::Order.method(:new),
|
||||
:test => method(:make_order),
|
||||
:url => "/v1/orders/#{make_order()[:id]}"
|
||||
},
|
||||
}
|
||||
|
||||
@base_url = 'https://api.stripe.com'
|
||||
|
52
test/stripe/order_test.rb
Normal file
52
test/stripe/order_test.rb
Normal file
@ -0,0 +1,52 @@
|
||||
require File.expand_path('../../test_helper', __FILE__)
|
||||
|
||||
module Stripe
|
||||
class OrderTest < Test::Unit::TestCase
|
||||
should "orders should be listable" do
|
||||
@mock.expects(:get).once.returns(make_response(make_order_array))
|
||||
orders = Stripe::Order.all
|
||||
assert orders.data.kind_of?(Array)
|
||||
orders.each do |order|
|
||||
assert order.kind_of?(Stripe::Order)
|
||||
end
|
||||
end
|
||||
|
||||
should "orders should not be deletable" do
|
||||
assert_raises NoMethodError do
|
||||
@mock.expects(:get).once.returns(make_response(make_order))
|
||||
p = Stripe::Order.retrieve("test_order")
|
||||
p.delete
|
||||
end
|
||||
end
|
||||
|
||||
should "orders should be updateable" do
|
||||
@mock.expects(:get).once.returns(make_response(make_order))
|
||||
@mock.expects(:post).once.returns(make_response(make_order))
|
||||
p = Stripe::Order.new("test_order")
|
||||
p.refresh
|
||||
p.status = "fulfilled"
|
||||
p.save
|
||||
end
|
||||
|
||||
should "orders should allow metadata updates" do
|
||||
@mock.expects(:get).once.returns(make_response(make_order))
|
||||
@mock.expects(:post).once.returns(make_response(make_order))
|
||||
p = Stripe::Order.new("test_order")
|
||||
p.refresh
|
||||
p.metadata['key'] = 'value'
|
||||
p.save
|
||||
end
|
||||
|
||||
should "pay should pay an order" do
|
||||
@mock.expects(:get).once.
|
||||
returns(make_response(make_order(:id => 'or_test_order')))
|
||||
order = Stripe::Order.retrieve('or_test_order')
|
||||
|
||||
@mock.expects(:post).once.
|
||||
with('https://api.stripe.com/v1/orders/or_test_order/pay', nil, 'token=test_token').
|
||||
returns(make_response(make_paid_order))
|
||||
order.pay(token: 'test_token')
|
||||
assert_equal "paid", order.status
|
||||
end
|
||||
end
|
||||
end
|
@ -592,5 +592,66 @@ module Stripe
|
||||
]
|
||||
}
|
||||
end
|
||||
|
||||
def make_order(params={})
|
||||
{
|
||||
:id => "or_16kg0uDAu10Yox5RReNVCthv",
|
||||
:created => 1442171988,
|
||||
:updated => nil,
|
||||
:object => "order",
|
||||
:livemode => false,
|
||||
:status => "created",
|
||||
:metadata => {},
|
||||
:customer => nil,
|
||||
:shipping => {
|
||||
:name => "Jenny Rosen",
|
||||
:address => {
|
||||
:line1 => "1234 Main street",
|
||||
:line2 => nil,
|
||||
:city => "Anytown",
|
||||
:state => nil,
|
||||
:postal_code => "123456",
|
||||
:country => "US"
|
||||
},
|
||||
:phone => nil,
|
||||
},
|
||||
:email => nil,
|
||||
:items => [
|
||||
{
|
||||
:parent => "sk_16bHXrDAu10Yox5RU2007dpU",
|
||||
:object => "order_item",
|
||||
:type => "sku",
|
||||
:description => "T-shirt",
|
||||
:amount => 1500,
|
||||
:currency => "usd",
|
||||
:quantity => nil,
|
||||
}
|
||||
],
|
||||
:shipping_methods => nil,
|
||||
:selected_shipping_method => nil,
|
||||
:amount => 1500,
|
||||
:currency => "usd",
|
||||
:charge => nil,
|
||||
}.merge(params)
|
||||
end
|
||||
|
||||
def make_order_array(params={})
|
||||
{
|
||||
:object => "list",
|
||||
:url => "/v1/orders",
|
||||
:data => [
|
||||
make_order,
|
||||
make_order,
|
||||
make_order,
|
||||
]
|
||||
}
|
||||
end
|
||||
|
||||
def make_paid_order(params={})
|
||||
make_order.merge({
|
||||
:status => "paid",
|
||||
:charge => make_charge,
|
||||
}).merge(params)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
Loading…
x
Reference in New Issue
Block a user