From dfb5762eb26dca1245baa827fa90e1597e0d6c8c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julio=20Jime=CC=81nez?= Date: Fri, 5 Feb 2016 12:20:41 +0100 Subject: [PATCH] Add create card for an existing customer --- lib/stripe/cards.ex | 48 +++++++++++++++++++++++++++++++++++++++ test/stripe/card_test.exs | 41 +++++++++++++++++++++++++++++++++ test/test_helper.exs | 13 +++++++++++ 3 files changed, 102 insertions(+) create mode 100644 lib/stripe/cards.ex create mode 100644 test/stripe/card_test.exs diff --git a/lib/stripe/cards.ex b/lib/stripe/cards.ex new file mode 100644 index 00000000..12ba748f --- /dev/null +++ b/lib/stripe/cards.ex @@ -0,0 +1,48 @@ +defmodule Stripe.Cards do + @moduledoc """ + Main API for working with Cards at Stripe. Through this API you can: + - create + + (API ref https://stripe.com/docs/api#subscriptions) + """ + @endpoint "customers" + + @doc """ + Create a card for the specified customer. + + ## Example + + ``` + new_card = [ + source: token, + metadata: [ + ... + ] + ] + {:ok, card} = Stripe.Cards.create customer_id, new_card + ``` + """ + def create(customer_id, opts) do + create customer_id, opts, Stripe.config_or_env_key + end + + @doc """ + Create a card for the specified customer using given api key. + + ## Example + + ``` + new_card = [ + source: token, + metadata: [ + ... + ] + ] + {:ok, card} = Stripe.Cards.create customer_id, new_card + ``` + """ + def create(customer_id, opts, key) do + Stripe.make_request_with_key(:post, "#{@endpoint}/#{customer_id}/sources", key, opts) + |> Stripe.Util.handle_stripe_response + end +end diff --git a/test/stripe/card_test.exs b/test/stripe/card_test.exs new file mode 100644 index 00000000..6cd7ed57 --- /dev/null +++ b/test/stripe/card_test.exs @@ -0,0 +1,41 @@ +defmodule Stripe.CardTest do + use ExUnit.Case + + #these tests are dependent on the execution order + # ExUnit.configure w/ seed: 0 was set + setup_all do + Stripe.Customers.delete_all + customer = Helper.create_test_customer "card_test1@localhost" + on_exit fn -> + Stripe.Customers.delete customer.id + end + + {:ok, [customer: customer]} + end + + + @tag disabled: false + test "Create w/opts works", %{customer: customer} do + token = Helper.create_test_token + opts = [ + source: token.id + ] + case Stripe.Cards.create customer.id, opts do + {:ok, card} -> assert card.customer == customer.id + {:error, err} -> flunk err + end + end + + @tag disabled: false + test "Create w/opts w/key works", %{customer: customer} do + token = Helper.create_test_token + opts = [ + source: token.id + ] + case Stripe.Cards.create customer.id, opts, Stripe.config_or_env_key do + {:ok, card} -> assert card.customer == customer.id + {:error, err} -> flunk err + end + end + +end diff --git a/test/test_helper.exs b/test/test_helper.exs index 1b1daecc..e930d2fb 100644 --- a/test/test_helper.exs +++ b/test/test_helper.exs @@ -19,6 +19,19 @@ defmodule Helper do Stripe.Plans.delete "test-dlx" end + def create_test_token do + params = [ + card: [ + number: "4242424242424242", + exp_month: 8, + exp_year: 2016, + cvc: "314" + ] + ] + {:ok, token} = Stripe.Tokens.create(params) + token + end + def create_test_customer( email ) do new_customer = [ email: "#{email}",