-
Notifications
You must be signed in to change notification settings - Fork 354
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
* Add promotion codes * Update API spec and fix failing tests * Add promotion_code to subscription create * Add code and active to PromotionCode.list * Sort attributes * :id is not a possible creation parameter
- Loading branch information
1 parent
eae3a91
commit 2e12c36
Showing
8 changed files
with
170 additions
and
7 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -56,6 +56,7 @@ defmodule Stripe.Converter do | |
plan | ||
price | ||
product | ||
promotion_code | ||
recipient | ||
refund | ||
review | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,133 @@ | ||
defmodule Stripe.PromotionCode do | ||
@moduledoc """ | ||
Work with Stripe promotion code objects. | ||
You can: | ||
- Create a promotion code | ||
- Retrieve a promotion code | ||
- Update a promotion code | ||
- list all promotion codes | ||
Stripe API reference: https://stripe.com/docs/api/promotion_codes | ||
""" | ||
|
||
use Stripe.Entity | ||
import Stripe.Request | ||
|
||
@type t :: %__MODULE__{ | ||
id: Stripe.id(), | ||
object: String.t(), | ||
active: boolean, | ||
code: String.t() | nil, | ||
coupon: Stripe.Coupon.t(), | ||
created: Stripe.timestamp(), | ||
deleted: boolean | nil, | ||
livemode: boolean, | ||
max_redemptions: pos_integer | nil, | ||
metadata: Stripe.Types.metadata(), | ||
restrictions: restrictions(), | ||
times_redeemed: non_neg_integer, | ||
valid: boolean | ||
} | ||
|
||
@type restrictions :: %{ | ||
optional(:first_time_transaction) => boolean, | ||
optional(:minimum_amount) => pos_integer, | ||
optional(:minimum_amount_currency) => String.t() | ||
} | ||
|
||
defstruct [ | ||
:id, | ||
:object, | ||
:active, | ||
:code, | ||
:coupon, | ||
:created, | ||
:deleted, | ||
:livemode, | ||
:max_redemptions, | ||
:metadata, | ||
:restrictions, | ||
:times_redeemed, | ||
:valid | ||
] | ||
|
||
@plural_endpoint "promotion_codes" | ||
|
||
@doc """ | ||
Create a promotion code. | ||
""" | ||
@spec create(params, Stripe.options()) :: {:ok, t} | {:error, Stripe.Error.t()} | ||
when params: %{ | ||
:coupon => Stripe.id(), | ||
optional(:code) => String.t(), | ||
optional(:active) => boolean, | ||
optional(:customer) => Stripe.id(), | ||
optional(:max_redemptions) => pos_integer, | ||
optional(:metadata) => Stripe.Types.metadata(), | ||
optional(:restrictions) => restrictions() | ||
} | ||
def create(params, opts \\ []) do | ||
new_request(opts) | ||
|> put_endpoint(@plural_endpoint) | ||
|> put_params(params) | ||
|> put_method(:post) | ||
|> make_request() | ||
end | ||
|
||
@doc """ | ||
Retrieve a promotion code. | ||
""" | ||
@spec retrieve(Stripe.id() | t, Stripe.options()) :: {:ok, t} | {:error, Stripe.Error.t()} | ||
def retrieve(id, opts \\ []) do | ||
new_request(opts) | ||
|> put_endpoint(@plural_endpoint <> "/#{get_id!(id)}") | ||
|> put_method(:get) | ||
|> make_request() | ||
end | ||
|
||
@doc """ | ||
Updates the metadata of a promotion code. Other promotion code details (coupon, customer, | ||
expires_at, max_redemptions, restrictions) are, by design, not editable. | ||
Takes the `id` and a map of changes. | ||
""" | ||
@spec update(Stripe.id() | t, params, Stripe.options()) :: {:ok, t} | {:error, Stripe.Error.t()} | ||
when params: | ||
%{ | ||
optional(:metadata) => Stripe.Types.metadata(), | ||
optional(:active) => boolean | ||
} | ||
| %{} | ||
def update(id, params, opts \\ []) do | ||
new_request(opts) | ||
|> put_endpoint(@plural_endpoint <> "/#{get_id!(id)}") | ||
|> put_method(:post) | ||
|> put_params(params) | ||
|> make_request() | ||
end | ||
|
||
@doc """ | ||
List all promotion codes. | ||
""" | ||
@spec list(params, Stripe.options()) :: {:ok, Stripe.List.t(t)} | {:error, Stripe.Error.t()} | ||
when params: %{ | ||
optional(:active) => boolean, | ||
optional(:created) => Stripe.date_query(), | ||
optional(:code) => String.t(), | ||
optional(:coupon) => Stripe.id(), | ||
optional(:customer) => Stripe.id(), | ||
optional(:ending_before) => t | Stripe.id(), | ||
optional(:limit) => 1..100, | ||
optional(:starting_after) => t | Stripe.id() | ||
} | ||
def list(params \\ %{}, opts \\ []) do | ||
new_request(opts) | ||
|> put_endpoint(@plural_endpoint) | ||
|> put_method(:get) | ||
|> put_params(params) | ||
|> cast_to_id([:ending_before, :starting_after]) | ||
|> make_request() | ||
end | ||
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,28 @@ | ||
defmodule Stripe.PromotionCodeTest do | ||
use Stripe.StripeCase, async: true | ||
|
||
test "is listable" do | ||
assert {:ok, %Stripe.List{data: promotion_codes}} = Stripe.PromotionCode.list() | ||
assert_stripe_requested(:get, "/v1/promotion_codes") | ||
assert is_list(promotion_codes) | ||
assert %Stripe.PromotionCode{} = hd(promotion_codes) | ||
end | ||
|
||
test "is retrievable" do | ||
assert {:ok, %Stripe.PromotionCode{}} = Stripe.PromotionCode.retrieve("FALL20") | ||
assert_stripe_requested(:get, "/v1/promotion_codes/FALL20") | ||
end | ||
|
||
test "is creatable" do | ||
params = %{code: "FALL21", max_redemptions: 2, coupon: "25OFF"} | ||
assert {:ok, %Stripe.PromotionCode{}} = Stripe.PromotionCode.create(params) | ||
assert_stripe_requested(:post, "/v1/promotion_codes") | ||
end | ||
|
||
test "is updateable" do | ||
assert {:ok, %Stripe.PromotionCode{}} = | ||
Stripe.PromotionCode.update("FALL20", %{active: false, metadata: %{key: "value"}}) | ||
|
||
assert_stripe_requested(:post, "/v1/promotion_codes/FALL20") | ||
end | ||
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters