flexible billing primitives and tests

This commit is contained in:
Alexander Thiemann 2018-04-04 11:13:59 -07:00
parent 0b54bf7ba2
commit c066c9c5f8
6 changed files with 82 additions and 2 deletions

View File

@ -33,12 +33,12 @@ Metrics/LineLength:
# Offense count: 32
# Configuration parameters: CountComments.
Metrics/MethodLength:
Max: 45
Max: 46
# Offense count: 1
# Configuration parameters: CountComments.
Metrics/ModuleLength:
Max: 305
Max: 306
# Offense count: 6
# Configuration parameters: CountKeywordArgs.

View File

@ -76,6 +76,7 @@ require "stripe/three_d_secure"
require "stripe/token"
require "stripe/topup"
require "stripe/transfer"
require "stripe/usage_record"
# OAuth
require "stripe/oauth"

View File

@ -0,0 +1,12 @@
module Stripe
class UsageRecord < APIResource
def self.create(params = {}, opts = {})
raise(ArgumentError, "Params must have a subscription_item key") unless params.key?(:subscription_item)
req_params = params.clone.delete_if { |key, _value| key == :subscription_item }
resp, opts = request(:post, "/v1/subscription_items/#{params[:subscription_item]}/usage_records", req_params, opts)
Util.convert_to_stripe_object(resp.data, opts)
end
OBJECT_NAME = "usage_record".freeze
end
end

View File

@ -85,6 +85,7 @@ module Stripe
Token::OBJECT_NAME => Token,
Topup::OBJECT_NAME => Topup,
Transfer::OBJECT_NAME => Transfer,
UsageRecord::OBJECT_NAME => UsageRecord,
}
end

View File

@ -27,6 +27,46 @@ module Stripe
assert plan.is_a?(Stripe::Plan)
end
should "be creatable with metered configuration" do
plan = Stripe::Plan.create(
amount: 5000,
interval: "month",
name: "Sapphire elite",
currency: "usd",
id: "sapphire-elite",
usage_type: "metered"
)
assert_requested :post, "#{Stripe.api_base}/v1/plans"
assert plan.is_a?(Stripe::Plan)
end
should "be creatable with tiered configuration" do
plan = Stripe::Plan.create(
interval: "month",
name: "Sapphire elite",
currency: "usd",
id: "sapphire-elite",
billing_scheme: "tiered",
tiers_mode: "volume",
tiers: [{ up_to: 100, amount: 1000 }, { up_to: "inf", amount: 2000 }]
)
assert_requested :post, "#{Stripe.api_base}/v1/plans"
assert plan.is_a?(Stripe::Plan)
end
should "be creatable with transform_usage" do
plan = Stripe::Plan.create(
interval: "month",
name: "Sapphire elite",
currency: "usd",
id: "sapphire-elite",
amount: 5000,
transform_usage: { round: "up", divide_by: 50 }
)
assert_requested :post, "#{Stripe.api_base}/v1/plans"
assert plan.is_a?(Stripe::Plan)
end
should "be saveable" do
plan = Stripe::Plan.retrieve("sapphire-elite")
plan.metadata["key"] = "value"

View File

@ -0,0 +1,26 @@
require File.expand_path("../../test_helper", __FILE__)
module Stripe
class UsageRecordTest < Test::Unit::TestCase
should "be creatable" do
usage_record = Stripe::UsageRecord.create(
quantity: 5000,
subscription_item: "si_abc",
timestamp: Time.now.to_i,
action: "increment"
)
assert_requested :post, "#{Stripe.api_base}/v1/subscription_items/si_abc/usage_records"
assert usage_record.is_a?(Stripe::UsageRecord)
end
should "raise when subscription_item is missing" do
assert_raise ArgumentError do
Stripe::UsageRecord.create(
quantity: 5000,
timestamp: Time.now.to_i,
action: "increment"
)
end
end
end
end