From 00cd7eec976255263f87b657de10f4e74c54a822 Mon Sep 17 00:00:00 2001 From: Maxime MENAGER Date: Thu, 30 Dec 2021 10:50:35 +0100 Subject: [PATCH 1/2] chore: format code MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Maxime Ménager --- lib/chargebee_elixir.ex | 1 - lib/chargebee_elixir/hosted_page.ex | 9 +- lib/chargebee_elixir/interface.ex | 89 +++++--- lib/chargebee_elixir/invoice.ex | 7 +- lib/chargebee_elixir/resource.ex | 6 +- test/chargebee_elixir/addon_test.exs | 64 ++++-- test/chargebee_elixir/hosted_page_test.exs | 71 +++--- test/chargebee_elixir/interface_test.exs | 211 +++++++++--------- test/chargebee_elixir/invoice_test.exs | 56 +++-- test/chargebee_elixir/portal_session_test.exs | 40 ++-- test/chargebee_elixir/subscription_test.exs | 58 +++-- 11 files changed, 351 insertions(+), 261 deletions(-) diff --git a/lib/chargebee_elixir.ex b/lib/chargebee_elixir.ex index 94d97e2..b81c143 100644 --- a/lib/chargebee_elixir.ex +++ b/lib/chargebee_elixir.ex @@ -1,3 +1,2 @@ defmodule ChargebeeElixir do - end diff --git a/lib/chargebee_elixir/hosted_page.ex b/lib/chargebee_elixir/hosted_page.ex index cd3d937..ac5a3c3 100644 --- a/lib/chargebee_elixir/hosted_page.ex +++ b/lib/chargebee_elixir/hosted_page.ex @@ -1,6 +1,11 @@ defmodule ChargebeeElixir.HostedPage do use ChargebeeElixir.Resource, "hosted_page" - def checkout_new(params) do create(params, "/checkout_new") end - def checkout_existing(params) do create(params, "/checkout_existing") end + def checkout_new(params) do + create(params, "/checkout_new") + end + + def checkout_existing(params) do + create(params, "/checkout_existing") + end end diff --git a/lib/chargebee_elixir/interface.ex b/lib/chargebee_elixir/interface.ex index 6715fe6..0559135 100644 --- a/lib/chargebee_elixir/interface.ex +++ b/lib/chargebee_elixir/interface.ex @@ -1,42 +1,47 @@ defmodule ChargebeeElixir.Interface do - def get(path) do get(path, %{}) end def get(path, params) do - params_string = params + params_string = + params |> URI.encode_query() - url = [fullpath(path), params_string] - |> Enum.filter(fn(s) -> String.length(s) > 0 end) + url = + [fullpath(path), params_string] + |> Enum.filter(fn s -> String.length(s) > 0 end) |> Enum.join("?") - http_client().get!(url,headers()) - |> handle_response() + http_client().get!(url, headers()) + |> handle_response() end def post(path, data) do - body = data + body = + data |> transform_arrays_for_chargebee |> Plug.Conn.Query.encode() + http_client().post!( fullpath(path), body, headers() ++ [{"Content-Type", "application/x-www-form-urlencoded"}] ) - |> handle_response() + |> handle_response() end defp handle_response(%{body: body, status_code: 200}) do body - |> Jason.decode! + |> Jason.decode!() end defp handle_response(%{body: body, status_code: 400}) do - message = body - |> Jason.decode! + message = + body + |> Jason.decode!() |> Map.get("message") + raise ChargebeeElixir.InvalidRequestError, message: message end @@ -63,8 +68,9 @@ defmodule ChargebeeElixir.Interface do defp headers() do api_key = Application.get_env(:chargebee_elixir, :api_key) + [ - {"Authorization", "Basic #{"#{api_key}:" |> Base.encode64}"} + {"Authorization", "Basic #{"#{api_key}:" |> Base.encode64()}"} ] end @@ -72,34 +78,43 @@ defmodule ChargebeeElixir.Interface do case data do map_data when is_map(map_data) -> map_data - |> Enum.map(fn {k, v} -> - {k, transform_arrays_for_chargebee(v)} - end) - |> Enum.into(%{}) + |> Enum.map(fn {k, v} -> + {k, transform_arrays_for_chargebee(v)} + end) + |> Enum.into(%{}) + list_data when is_list(list_data) -> - transformed_list_data = list_data + transformed_list_data = + list_data |> Enum.map(fn item -> transform_arrays_for_chargebee(item) end) + transformed_list_data - |> Enum.map(fn (item) -> case item do - map_item when is_map(map_item) -> Map.keys(map_item) - _ -> raise ChargebeeElixir.IncorrectDataFormatError, - message: "Unsupported data: lists should contains objects only" - end - end) - |> List.flatten - |> Enum.uniq - |> Enum.map(fn (key) -> - { - key, - transformed_list_data - |> Enum.with_index - |> Enum.map(fn {item, index} -> {index, item[key]} end) - |> Enum.filter(fn {_index, item} -> !is_nil(item) end) - |> Enum.into(%{}) - } - end) - |> Enum.into(%{}) - other_data -> other_data + |> Enum.map(fn item -> + case item do + map_item when is_map(map_item) -> + Map.keys(map_item) + + _ -> + raise ChargebeeElixir.IncorrectDataFormatError, + message: "Unsupported data: lists should contains objects only" + end + end) + |> List.flatten() + |> Enum.uniq() + |> Enum.map(fn key -> + { + key, + transformed_list_data + |> Enum.with_index() + |> Enum.map(fn {item, index} -> {index, item[key]} end) + |> Enum.filter(fn {_index, item} -> !is_nil(item) end) + |> Enum.into(%{}) + } + end) + |> Enum.into(%{}) + + other_data -> + other_data end end end diff --git a/lib/chargebee_elixir/invoice.ex b/lib/chargebee_elixir/invoice.ex index 0da2230..b24b81d 100644 --- a/lib/chargebee_elixir/invoice.ex +++ b/lib/chargebee_elixir/invoice.ex @@ -1,6 +1,7 @@ defmodule ChargebeeElixir.Invoice do use ChargebeeElixir.Resource, "invoice" - def close(id, params \\ %{}) do post_endpoint(id, "/close", params) end -end - + def close(id, params \\ %{}) do + post_endpoint(id, "/close", params) + end +end diff --git a/lib/chargebee_elixir/resource.ex b/lib/chargebee_elixir/resource.ex index 37a1837..05cceb9 100644 --- a/lib/chargebee_elixir/resource.ex +++ b/lib/chargebee_elixir/resource.ex @@ -18,9 +18,11 @@ defmodule ChargebeeElixir.Resource do def list(params) do case Interface.get(resource_base_path(), params) do %{"list" => current_list, "next_offset" => next_offset} -> - Enum.map(current_list, fn(hash) -> hash[@resource] end) ++ __MODULE__.list(Map.merge(params, %{"offset" => next_offset})) + Enum.map(current_list, fn hash -> hash[@resource] end) ++ + __MODULE__.list(Map.merge(params, %{"offset" => next_offset})) + %{"list" => current_list} -> - Enum.map(current_list, fn(hash) -> hash[@resource] end) + Enum.map(current_list, fn hash -> hash[@resource] end) end end diff --git a/test/chargebee_elixir/addon_test.exs b/test/chargebee_elixir/addon_test.exs index 95d0955..a5aceb6 100644 --- a/test/chargebee_elixir/addon_test.exs +++ b/test/chargebee_elixir/addon_test.exs @@ -9,9 +9,10 @@ defmodule ChargebeeElixir.AddonTest do expect( ChargebeeElixir.HTTPoisonMock, :get!, - fn (url, headers) -> + fn url, headers -> assert url == "https://test-namespace.chargebee.com/api/v2/addons/1234" assert headers == [{"Authorization", "Basic dGVzdF9jaGFyZ2VlYmVlX2FwaV9rZXk6"}] + %{ status_code: 401 } @@ -27,9 +28,10 @@ defmodule ChargebeeElixir.AddonTest do expect( ChargebeeElixir.HTTPoisonMock, :get!, - fn (url, headers) -> + fn url, headers -> assert url == "https://test-namespace.chargebee.com/api/v2/addons/1234" assert headers == [{"Authorization", "Basic dGVzdF9jaGFyZ2VlYmVlX2FwaV9rZXk6"}] + %{ status_code: 404 } @@ -43,9 +45,10 @@ defmodule ChargebeeElixir.AddonTest do expect( ChargebeeElixir.HTTPoisonMock, :get!, - fn (url, headers) -> + fn url, headers -> assert url == "https://test-namespace.chargebee.com/api/v2/addons/1234" assert headers == [{"Authorization", "Basic dGVzdF9jaGFyZ2VlYmVlX2FwaV9rZXk6"}] + %{ status_code: 200, body: '{"addon": {"id": 1234}}' @@ -62,9 +65,10 @@ defmodule ChargebeeElixir.AddonTest do expect( ChargebeeElixir.HTTPoisonMock, :get!, - fn (url, headers) -> + fn url, headers -> assert url == "https://test-namespace.chargebee.com/api/v2/addons" assert headers == [{"Authorization", "Basic dGVzdF9jaGFyZ2VlYmVlX2FwaV9rZXk6"}] + %{ status_code: 401 } @@ -80,9 +84,10 @@ defmodule ChargebeeElixir.AddonTest do expect( ChargebeeElixir.HTTPoisonMock, :get!, - fn (url, headers) -> + fn url, headers -> assert url == "https://test-namespace.chargebee.com/api/v2/addons" assert headers == [{"Authorization", "Basic dGVzdF9jaGFyZ2VlYmVlX2FwaV9rZXk6"}] + %{ status_code: 200, body: '{"list": [{"addon": {"id": 1234}}]}' @@ -97,9 +102,12 @@ defmodule ChargebeeElixir.AddonTest do expect( ChargebeeElixir.HTTPoisonMock, :get!, - fn (url, headers) -> - assert url == "https://test-namespace.chargebee.com/api/v2/addons?id%5Bin%5D=%5B1234%2C1235%5D" + fn url, headers -> + assert url == + "https://test-namespace.chargebee.com/api/v2/addons?id%5Bin%5D=%5B1234%2C1235%5D" + assert headers == [{"Authorization", "Basic dGVzdF9jaGFyZ2VlYmVlX2FwaV9rZXk6"}] + %{ status_code: 200, body: '{ @@ -113,9 +121,12 @@ defmodule ChargebeeElixir.AddonTest do expect( ChargebeeElixir.HTTPoisonMock, :get!, - fn (url, headers) -> - assert url == "https://test-namespace.chargebee.com/api/v2/addons?id%5Bin%5D=%5B1234%2C1235%5D&offset=1235" + fn url, headers -> + assert url == + "https://test-namespace.chargebee.com/api/v2/addons?id%5Bin%5D=%5B1234%2C1235%5D&offset=1235" + assert headers == [{"Authorization", "Basic dGVzdF9jaGFyZ2VlYmVlX2FwaV9rZXk6"}] + %{ status_code: 200, body: '{ @@ -125,7 +136,10 @@ defmodule ChargebeeElixir.AddonTest do end ) - assert ChargebeeElixir.Addon.list(%{"id[in]": "[1234,1235]"}) == [%{"id" => 1234}, %{"id" => 1235}] + assert ChargebeeElixir.Addon.list(%{"id[in]": "[1234,1235]"}) == [ + %{"id" => 1234}, + %{"id" => 1235} + ] end end @@ -134,13 +148,15 @@ defmodule ChargebeeElixir.AddonTest do expect( ChargebeeElixir.HTTPoisonMock, :post!, - fn (url, data, headers) -> + fn url, data, headers -> assert url == "https://test-namespace.chargebee.com/api/v2/addons" assert data == "id=addon-a" + assert headers == [ - {"Authorization", "Basic dGVzdF9jaGFyZ2VlYmVlX2FwaV9rZXk6"}, - {"Content-Type", "application/x-www-form-urlencoded"} - ] + {"Authorization", "Basic dGVzdF9jaGFyZ2VlYmVlX2FwaV9rZXk6"}, + {"Content-Type", "application/x-www-form-urlencoded"} + ] + %{ status_code: 401 } @@ -156,13 +172,15 @@ defmodule ChargebeeElixir.AddonTest do expect( ChargebeeElixir.HTTPoisonMock, :post!, - fn (url, data, headers) -> + fn url, data, headers -> assert url == "https://test-namespace.chargebee.com/api/v2/addons" assert data == "id=addon-a" + assert headers == [ - {"Authorization", "Basic dGVzdF9jaGFyZ2VlYmVlX2FwaV9rZXk6"}, - {"Content-Type", "application/x-www-form-urlencoded"} - ] + {"Authorization", "Basic dGVzdF9jaGFyZ2VlYmVlX2FwaV9rZXk6"}, + {"Content-Type", "application/x-www-form-urlencoded"} + ] + %{ status_code: 400, body: '{"message": "Unknown"}' @@ -179,13 +197,15 @@ defmodule ChargebeeElixir.AddonTest do expect( ChargebeeElixir.HTTPoisonMock, :post!, - fn (url, data, headers) -> + fn url, data, headers -> assert url == "https://test-namespace.chargebee.com/api/v2/addons" assert data == "id=addon-a" + assert headers == [ - {"Authorization", "Basic dGVzdF9jaGFyZ2VlYmVlX2FwaV9rZXk6"}, - {"Content-Type", "application/x-www-form-urlencoded"} - ] + {"Authorization", "Basic dGVzdF9jaGFyZ2VlYmVlX2FwaV9rZXk6"}, + {"Content-Type", "application/x-www-form-urlencoded"} + ] + %{ status_code: 200, body: '{"addon": {"id": "addon-a"}}' diff --git a/test/chargebee_elixir/hosted_page_test.exs b/test/chargebee_elixir/hosted_page_test.exs index 440278b..f42c6e1 100644 --- a/test/chargebee_elixir/hosted_page_test.exs +++ b/test/chargebee_elixir/hosted_page_test.exs @@ -9,13 +9,17 @@ defmodule ChargebeeElixir.HostedPageTest do expect( ChargebeeElixir.HTTPoisonMock, :post!, - fn (url, data, headers) -> + fn url, data, headers -> assert url == "https://test-namespace.chargebee.com/api/v2/hosted_pages/checkout_new" - assert data == "addons[id][0]=addon-a&addons[id][1]=addon-b&subscription[plan_id]=plan-a" + + assert data == + "addons[id][0]=addon-a&addons[id][1]=addon-b&subscription[plan_id]=plan-a" + assert headers == [ - {"Authorization", "Basic dGVzdF9jaGFyZ2VlYmVlX2FwaV9rZXk6"}, - {"Content-Type", "application/x-www-form-urlencoded"} - ] + {"Authorization", "Basic dGVzdF9jaGFyZ2VlYmVlX2FwaV9rZXk6"}, + {"Content-Type", "application/x-www-form-urlencoded"} + ] + %{ status_code: 200, body: '{"hosted_page": {"url": "https://doe.com"}}' @@ -24,14 +28,14 @@ defmodule ChargebeeElixir.HostedPageTest do ) assert ChargebeeElixir.HostedPage.checkout_new(%{ - subscription: %{ - plan_id: "plan-a", - }, - addons: [ - %{ id: "addon-a"}, - %{ id: "addon-b"} - ] - }) == %{"url" => "https://doe.com"} + subscription: %{ + plan_id: "plan-a" + }, + addons: [ + %{id: "addon-a"}, + %{id: "addon-b"} + ] + }) == %{"url" => "https://doe.com"} end end @@ -40,13 +44,18 @@ defmodule ChargebeeElixir.HostedPageTest do expect( ChargebeeElixir.HTTPoisonMock, :post!, - fn (url, data, headers) -> - assert url == "https://test-namespace.chargebee.com/api/v2/hosted_pages/checkout_existing" - assert data == "addons[id][0]=addon-a&addons[id][1]=addon-b&customer[id]=cus-a&subscription[id]=subscription-a&subscription[plan_id]=plan-a" + fn url, data, headers -> + assert url == + "https://test-namespace.chargebee.com/api/v2/hosted_pages/checkout_existing" + + assert data == + "addons[id][0]=addon-a&addons[id][1]=addon-b&customer[id]=cus-a&subscription[id]=subscription-a&subscription[plan_id]=plan-a" + assert headers == [ - {"Authorization", "Basic dGVzdF9jaGFyZ2VlYmVlX2FwaV9rZXk6"}, - {"Content-Type", "application/x-www-form-urlencoded"} - ] + {"Authorization", "Basic dGVzdF9jaGFyZ2VlYmVlX2FwaV9rZXk6"}, + {"Content-Type", "application/x-www-form-urlencoded"} + ] + %{ status_code: 200, body: '{"hosted_page": {"url": "https://doe.com"}}' @@ -55,18 +64,18 @@ defmodule ChargebeeElixir.HostedPageTest do ) assert ChargebeeElixir.HostedPage.checkout_existing(%{ - subscription: %{ - id: "subscription-a", - plan_id: "plan-a", - }, - customer: %{ - id: "cus-a" - }, - addons: [ - %{ id: "addon-a"}, - %{ id: "addon-b"} - ] - }) == %{"url" => "https://doe.com"} + subscription: %{ + id: "subscription-a", + plan_id: "plan-a" + }, + customer: %{ + id: "cus-a" + }, + addons: [ + %{id: "addon-a"}, + %{id: "addon-b"} + ] + }) == %{"url" => "https://doe.com"} end end end diff --git a/test/chargebee_elixir/interface_test.exs b/test/chargebee_elixir/interface_test.exs index 30c755a..149c982 100644 --- a/test/chargebee_elixir/interface_test.exs +++ b/test/chargebee_elixir/interface_test.exs @@ -4,127 +4,128 @@ defmodule ChargebeeElixir.InterfaceTest do describe "transform_arrays_for_chargebee" do test "simple list" do assert ChargebeeElixir.Interface.transform_arrays_for_chargebee([ - %{id: "object-a"}, - %{id: "object-b"} - ]) == %{ - id: %{ - 0 => "object-a", - 1 => "object-b" - } - } + %{id: "object-a"}, + %{id: "object-b"} + ]) == %{ + id: %{ + 0 => "object-a", + 1 => "object-b" + } + } end test "deep nesting, no lists" do assert ChargebeeElixir.Interface.transform_arrays_for_chargebee(%{ - addon: %{ - id: "addon-a", - nested: %{ - object: %{ - id: "object-a" - } - } - } - }) == %{ - addon: %{ - id: "addon-a", - nested: %{ - object: %{ - id: "object-a" - } - } - } - } + addon: %{ + id: "addon-a", + nested: %{ + object: %{ + id: "object-a" + } + } + } + }) == %{ + addon: %{ + id: "addon-a", + nested: %{ + object: %{ + id: "object-a" + } + } + } + } end test "simple nesting" do assert ChargebeeElixir.Interface.transform_arrays_for_chargebee(%{ - addons: [ - %{ - id: "addon-a", - price: 10 - }, - %{ - id: "addon-b", - quantity: 2 - } - ] - }) == %{ - addons: %{ - id: %{ - 0 => "addon-a", - 1 => "addon-b" - }, - price: %{ - 0 => 10 - }, - quantity: %{ - 1 => 2 - } - } - } + addons: [ + %{ + id: "addon-a", + price: 10 + }, + %{ + id: "addon-b", + quantity: 2 + } + ] + }) == %{ + addons: %{ + id: %{ + 0 => "addon-a", + 1 => "addon-b" + }, + price: %{ + 0 => 10 + }, + quantity: %{ + 1 => 2 + } + } + } end test "incorrect nesting" do assert_raise ChargebeeElixir.IncorrectDataFormatError, - "Unsupported data: lists should contains objects only", fn -> - ChargebeeElixir.Interface.transform_arrays_for_chargebee(%{ - addons: [ - %{ - id: "addon-a", - price: 10 - }, - %{ - id: "addon-b", - quantity: 2 - }, - "a" - ] - }) - end + "Unsupported data: lists should contains objects only", + fn -> + ChargebeeElixir.Interface.transform_arrays_for_chargebee(%{ + addons: [ + %{ + id: "addon-a", + price: 10 + }, + %{ + id: "addon-b", + quantity: 2 + }, + "a" + ] + }) + end end test "complex nesting" do assert ChargebeeElixir.Interface.transform_arrays_for_chargebee(%{ - addons: [ - %{ - id: "addon-a", - price: 10, - nested_objects: [ - %{ - id: "object-a" - }, - %{ - id: "object-b" - } - ] - }, - %{ - id: "addon-b", - quantity: 2 - } - ] - }) == %{ - addons: %{ - id: %{ - 0 => "addon-a", - 1 => "addon-b" - }, - price: %{ - 0 => 10 - }, - quantity: %{ - 1 => 2 - }, - nested_objects: %{ - 0 => %{ - id: %{ - 0 => "object-a", - 1 => "object-b" - } - } - } - } - } + addons: [ + %{ + id: "addon-a", + price: 10, + nested_objects: [ + %{ + id: "object-a" + }, + %{ + id: "object-b" + } + ] + }, + %{ + id: "addon-b", + quantity: 2 + } + ] + }) == %{ + addons: %{ + id: %{ + 0 => "addon-a", + 1 => "addon-b" + }, + price: %{ + 0 => 10 + }, + quantity: %{ + 1 => 2 + }, + nested_objects: %{ + 0 => %{ + id: %{ + 0 => "object-a", + 1 => "object-b" + } + } + } + } + } end end end diff --git a/test/chargebee_elixir/invoice_test.exs b/test/chargebee_elixir/invoice_test.exs index d9b078b..0429da6 100644 --- a/test/chargebee_elixir/invoice_test.exs +++ b/test/chargebee_elixir/invoice_test.exs @@ -18,13 +18,17 @@ defmodule ChargebeeElixir.InvoiceTest do expect( ChargebeeElixir.HTTPoisonMock, :post!, - fn (url, data, headers) -> - assert url == "https://test-namespace.chargebee.com/api/v2/invoices/draft_inv_abcde/close" + fn url, data, headers -> + assert url == + "https://test-namespace.chargebee.com/api/v2/invoices/draft_inv_abcde/close" + assert data == "invoice_note=This+is+a+note" + assert headers == [ - {"Authorization", "Basic dGVzdF9jaGFyZ2VlYmVlX2FwaV9rZXk6"}, - {"Content-Type", "application/x-www-form-urlencoded"} - ] + {"Authorization", "Basic dGVzdF9jaGFyZ2VlYmVlX2FwaV9rZXk6"}, + {"Content-Type", "application/x-www-form-urlencoded"} + ] + %{ status_code: 401 } @@ -40,13 +44,17 @@ defmodule ChargebeeElixir.InvoiceTest do expect( ChargebeeElixir.HTTPoisonMock, :post!, - fn (url, data, headers) -> - assert url == "https://test-namespace.chargebee.com/api/v2/invoices/draft_inv_abcde/close" + fn url, data, headers -> + assert url == + "https://test-namespace.chargebee.com/api/v2/invoices/draft_inv_abcde/close" + assert data == "invoice_note=This+is+a+note" + assert headers == [ - {"Authorization", "Basic dGVzdF9jaGFyZ2VlYmVlX2FwaV9rZXk6"}, - {"Content-Type", "application/x-www-form-urlencoded"} - ] + {"Authorization", "Basic dGVzdF9jaGFyZ2VlYmVlX2FwaV9rZXk6"}, + {"Content-Type", "application/x-www-form-urlencoded"} + ] + %{ status_code: 404 } @@ -62,13 +70,17 @@ defmodule ChargebeeElixir.InvoiceTest do expect( ChargebeeElixir.HTTPoisonMock, :post!, - fn (url, data, headers) -> - assert url == "https://test-namespace.chargebee.com/api/v2/invoices/draft_inv_abcde/close" + fn url, data, headers -> + assert url == + "https://test-namespace.chargebee.com/api/v2/invoices/draft_inv_abcde/close" + assert data == "invoice_note=This+is+a+note" + assert headers == [ - {"Authorization", "Basic dGVzdF9jaGFyZ2VlYmVlX2FwaV9rZXk6"}, - {"Content-Type", "application/x-www-form-urlencoded"} - ] + {"Authorization", "Basic dGVzdF9jaGFyZ2VlYmVlX2FwaV9rZXk6"}, + {"Content-Type", "application/x-www-form-urlencoded"} + ] + %{ status_code: 400, body: '{"message": "Unknown"}' @@ -85,13 +97,17 @@ defmodule ChargebeeElixir.InvoiceTest do expect( ChargebeeElixir.HTTPoisonMock, :post!, - fn (url, data, headers) -> - assert url == "https://test-namespace.chargebee.com/api/v2/invoices/draft_inv_abcde/close" + fn url, data, headers -> + assert url == + "https://test-namespace.chargebee.com/api/v2/invoices/draft_inv_abcde/close" + assert data == "invoice_note=This+is+a+note" + assert headers == [ - {"Authorization", "Basic dGVzdF9jaGFyZ2VlYmVlX2FwaV9rZXk6"}, - {"Content-Type", "application/x-www-form-urlencoded"} - ] + {"Authorization", "Basic dGVzdF9jaGFyZ2VlYmVlX2FwaV9rZXk6"}, + {"Content-Type", "application/x-www-form-urlencoded"} + ] + %{ status_code: 200, body: '{"invoice": {"id": "abcde"}}' diff --git a/test/chargebee_elixir/portal_session_test.exs b/test/chargebee_elixir/portal_session_test.exs index 6cb08e7..ee8b948 100644 --- a/test/chargebee_elixir/portal_session_test.exs +++ b/test/chargebee_elixir/portal_session_test.exs @@ -9,13 +9,15 @@ defmodule ChargebeeElixir.PortalSessionTest do expect( ChargebeeElixir.HTTPoisonMock, :post!, - fn (url, data, headers) -> + fn url, data, headers -> assert url == "https://test-namespace.chargebee.com/api/v2/portal_sessions" assert data == "" + assert headers == [ - {"Authorization", "Basic dGVzdF9jaGFyZ2VlYmVlX2FwaV9rZXk6"}, - {"Content-Type", "application/x-www-form-urlencoded"} - ] + {"Authorization", "Basic dGVzdF9jaGFyZ2VlYmVlX2FwaV9rZXk6"}, + {"Content-Type", "application/x-www-form-urlencoded"} + ] + %{ status_code: 401 } @@ -31,13 +33,15 @@ defmodule ChargebeeElixir.PortalSessionTest do expect( ChargebeeElixir.HTTPoisonMock, :post!, - fn (url, data, headers) -> + fn url, data, headers -> assert url == "https://test-namespace.chargebee.com/api/v2/portal_sessions" assert data == "" + assert headers == [ - {"Authorization", "Basic dGVzdF9jaGFyZ2VlYmVlX2FwaV9rZXk6"}, - {"Content-Type", "application/x-www-form-urlencoded"} - ] + {"Authorization", "Basic dGVzdF9jaGFyZ2VlYmVlX2FwaV9rZXk6"}, + {"Content-Type", "application/x-www-form-urlencoded"} + ] + %{ status_code: 400, body: '{"message": "Unknown"}' @@ -54,13 +58,15 @@ defmodule ChargebeeElixir.PortalSessionTest do expect( ChargebeeElixir.HTTPoisonMock, :post!, - fn (url, data, headers) -> + fn url, data, headers -> assert url == "https://test-namespace.chargebee.com/api/v2/portal_sessions" assert data == "customer[id]=cus_1234&redirect_url=https%3A%2F%2Fredirect.com" + assert headers == [ - {"Authorization", "Basic dGVzdF9jaGFyZ2VlYmVlX2FwaV9rZXk6"}, - {"Content-Type", "application/x-www-form-urlencoded"} - ] + {"Authorization", "Basic dGVzdF9jaGFyZ2VlYmVlX2FwaV9rZXk6"}, + {"Content-Type", "application/x-www-form-urlencoded"} + ] + %{ status_code: 200, body: '{"portal_session": {"url": "https://doe.com"}}' @@ -69,11 +75,11 @@ defmodule ChargebeeElixir.PortalSessionTest do ) assert ChargebeeElixir.PortalSession.create(%{ - redirect_url: "https://redirect.com", - customer: %{ - id: "cus_1234" - } - }) == %{"url" => "https://doe.com"} + redirect_url: "https://redirect.com", + customer: %{ + id: "cus_1234" + } + }) == %{"url" => "https://doe.com"} end end end diff --git a/test/chargebee_elixir/subscription_test.exs b/test/chargebee_elixir/subscription_test.exs index 170ec50..439e36e 100644 --- a/test/chargebee_elixir/subscription_test.exs +++ b/test/chargebee_elixir/subscription_test.exs @@ -11,7 +11,7 @@ defmodule ChargebeeElixir.SubscriptionTest do plan_id: "plan-a", addons: [ %{id: "addon-a"}, - %{id: "addon-b"}, + %{id: "addon-b"} ] } ) @@ -22,13 +22,17 @@ defmodule ChargebeeElixir.SubscriptionTest do expect( ChargebeeElixir.HTTPoisonMock, :post!, - fn (url, data, headers) -> - assert url == "https://test-namespace.chargebee.com/api/v2/customers/cus_1/subscriptions" + fn url, data, headers -> + assert url == + "https://test-namespace.chargebee.com/api/v2/customers/cus_1/subscriptions" + assert data == "addons[id][0]=addon-a&addons[id][1]=addon-b&plan_id=plan-a" + assert headers == [ - {"Authorization", "Basic dGVzdF9jaGFyZ2VlYmVlX2FwaV9rZXk6"}, - {"Content-Type", "application/x-www-form-urlencoded"} - ] + {"Authorization", "Basic dGVzdF9jaGFyZ2VlYmVlX2FwaV9rZXk6"}, + {"Content-Type", "application/x-www-form-urlencoded"} + ] + %{ status_code: 401 } @@ -44,13 +48,17 @@ defmodule ChargebeeElixir.SubscriptionTest do expect( ChargebeeElixir.HTTPoisonMock, :post!, - fn (url, data, headers) -> - assert url == "https://test-namespace.chargebee.com/api/v2/customers/cus_1/subscriptions" + fn url, data, headers -> + assert url == + "https://test-namespace.chargebee.com/api/v2/customers/cus_1/subscriptions" + assert data == "addons[id][0]=addon-a&addons[id][1]=addon-b&plan_id=plan-a" + assert headers == [ - {"Authorization", "Basic dGVzdF9jaGFyZ2VlYmVlX2FwaV9rZXk6"}, - {"Content-Type", "application/x-www-form-urlencoded"} - ] + {"Authorization", "Basic dGVzdF9jaGFyZ2VlYmVlX2FwaV9rZXk6"}, + {"Content-Type", "application/x-www-form-urlencoded"} + ] + %{ status_code: 404 } @@ -66,13 +74,17 @@ defmodule ChargebeeElixir.SubscriptionTest do expect( ChargebeeElixir.HTTPoisonMock, :post!, - fn (url, data, headers) -> - assert url == "https://test-namespace.chargebee.com/api/v2/customers/cus_1/subscriptions" + fn url, data, headers -> + assert url == + "https://test-namespace.chargebee.com/api/v2/customers/cus_1/subscriptions" + assert data == "addons[id][0]=addon-a&addons[id][1]=addon-b&plan_id=plan-a" + assert headers == [ - {"Authorization", "Basic dGVzdF9jaGFyZ2VlYmVlX2FwaV9rZXk6"}, - {"Content-Type", "application/x-www-form-urlencoded"} - ] + {"Authorization", "Basic dGVzdF9jaGFyZ2VlYmVlX2FwaV9rZXk6"}, + {"Content-Type", "application/x-www-form-urlencoded"} + ] + %{ status_code: 400, body: '{"message": "Unknown"}' @@ -89,13 +101,17 @@ defmodule ChargebeeElixir.SubscriptionTest do expect( ChargebeeElixir.HTTPoisonMock, :post!, - fn (url, data, headers) -> - assert url == "https://test-namespace.chargebee.com/api/v2/customers/cus_1/subscriptions" + fn url, data, headers -> + assert url == + "https://test-namespace.chargebee.com/api/v2/customers/cus_1/subscriptions" + assert data == "addons[id][0]=addon-a&addons[id][1]=addon-b&plan_id=plan-a" + assert headers == [ - {"Authorization", "Basic dGVzdF9jaGFyZ2VlYmVlX2FwaV9rZXk6"}, - {"Content-Type", "application/x-www-form-urlencoded"} - ] + {"Authorization", "Basic dGVzdF9jaGFyZ2VlYmVlX2FwaV9rZXk6"}, + {"Content-Type", "application/x-www-form-urlencoded"} + ] + %{ status_code: 200, body: '{"subscription": {"id": "sub-a"}}' From ec7a3fd1e84840846b1928bc67080d772877cc40 Mon Sep 17 00:00:00 2001 From: Maxime MENAGER Date: Thu, 30 Dec 2021 10:51:48 +0100 Subject: [PATCH 2/2] chore: bump dependencies MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Maxime Ménager --- mix.lock | 33 +++++++++++++++++---------------- 1 file changed, 17 insertions(+), 16 deletions(-) diff --git a/mix.lock b/mix.lock index 5a778c1..3b84c18 100644 --- a/mix.lock +++ b/mix.lock @@ -1,22 +1,23 @@ %{ - "certifi": {:hex, :certifi, "2.5.2", "b7cfeae9d2ed395695dd8201c57a2d019c0c43ecaf8b8bcb9320b40d6662f340", [:rebar3], [{:parse_trans, "~>3.3", [hex: :parse_trans, repo: "hexpm", optional: false]}], "hexpm", "3b3b5f36493004ac3455966991eaf6e768ce9884693d9968055aeeeb1e575040"}, - "earmark_parser": {:hex, :earmark_parser, "1.4.12", "b245e875ec0a311a342320da0551da407d9d2b65d98f7a9597ae078615af3449", [:mix], [], "hexpm", "711e2cc4d64abb7d566d43f54b78f7dc129308a63bc103fbd88550d2174b3160"}, - "ex_doc": {:hex, :ex_doc, "0.23.0", "a069bc9b0bf8efe323ecde8c0d62afc13d308b1fa3d228b65bca5cf8703a529d", [:mix], [{:earmark_parser, "~> 1.4.0", [hex: :earmark_parser, repo: "hexpm", optional: false]}, {:makeup_elixir, "~> 0.14", [hex: :makeup_elixir, repo: "hexpm", optional: false]}], "hexpm", "f5e2c4702468b2fd11b10d39416ddadd2fcdd173ba2a0285ebd92c39827a5a16"}, - "hackney": {:hex, :hackney, "1.16.0", "5096ac8e823e3a441477b2d187e30dd3fff1a82991a806b2003845ce72ce2d84", [:rebar3], [{:certifi, "2.5.2", [hex: :certifi, repo: "hexpm", optional: false]}, {:idna, "6.0.1", [hex: :idna, repo: "hexpm", optional: false]}, {:metrics, "1.0.1", [hex: :metrics, repo: "hexpm", optional: false]}, {:mimerl, "~>1.1", [hex: :mimerl, repo: "hexpm", optional: false]}, {:parse_trans, "3.3.0", [hex: :parse_trans, repo: "hexpm", optional: false]}, {:ssl_verify_fun, "1.1.6", [hex: :ssl_verify_fun, repo: "hexpm", optional: false]}], "hexpm", "3bf0bebbd5d3092a3543b783bf065165fa5d3ad4b899b836810e513064134e18"}, - "httpoison": {:hex, :httpoison, "1.7.0", "abba7d086233c2d8574726227b6c2c4f6e53c4deae7fe5f6de531162ce9929a0", [:mix], [{:hackney, "~> 1.16", [hex: :hackney, repo: "hexpm", optional: false]}], "hexpm", "975cc87c845a103d3d1ea1ccfd68a2700c211a434d8428b10c323dc95dc5b980"}, - "idna": {:hex, :idna, "6.0.1", "1d038fb2e7668ce41fbf681d2c45902e52b3cb9e9c77b55334353b222c2ee50c", [:rebar3], [{:unicode_util_compat, "0.5.0", [hex: :unicode_util_compat, repo: "hexpm", optional: false]}], "hexpm", "a02c8a1c4fd601215bb0b0324c8a6986749f807ce35f25449ec9e69758708122"}, - "jason": {:hex, :jason, "1.2.2", "ba43e3f2709fd1aa1dce90aaabfd039d000469c05c56f0b8e31978e03fa39052", [:mix], [{:decimal, "~> 1.0 or ~> 2.0", [hex: :decimal, repo: "hexpm", optional: true]}], "hexpm", "18a228f5f0058ee183f29f9eae0805c6e59d61c3b006760668d8d18ff0d12179"}, + "certifi": {:hex, :certifi, "2.8.0", "d4fb0a6bb20b7c9c3643e22507e42f356ac090a1dcea9ab99e27e0376d695eba", [:rebar3], [], "hexpm", "6ac7efc1c6f8600b08d625292d4bbf584e14847ce1b6b5c44d983d273e1097ea"}, + "earmark_parser": {:hex, :earmark_parser, "1.4.18", "e1b2be73eb08a49fb032a0208bf647380682374a725dfb5b9e510def8397f6f2", [:mix], [], "hexpm", "114a0e85ec3cf9e04b811009e73c206394ffecfcc313e0b346de0d557774ee97"}, + "ex_doc": {:hex, :ex_doc, "0.26.0", "1922164bac0b18b02f84d6f69cab1b93bc3e870e2ad18d5dacb50a9e06b542a3", [:mix], [{:earmark_parser, "~> 1.4.0", [hex: :earmark_parser, repo: "hexpm", optional: false]}, {:makeup_elixir, "~> 0.14", [hex: :makeup_elixir, repo: "hexpm", optional: false]}, {:makeup_erlang, "~> 0.1", [hex: :makeup_erlang, repo: "hexpm", optional: false]}], "hexpm", "2775d66e494a9a48355db7867478ffd997864c61c65a47d31c4949459281c78d"}, + "hackney": {:hex, :hackney, "1.18.0", "c4443d960bb9fba6d01161d01cd81173089686717d9490e5d3606644c48d121f", [:rebar3], [{:certifi, "~>2.8.0", [hex: :certifi, repo: "hexpm", optional: false]}, {:idna, "~>6.1.0", [hex: :idna, repo: "hexpm", optional: false]}, {:metrics, "~>1.0.0", [hex: :metrics, repo: "hexpm", optional: false]}, {:mimerl, "~>1.1", [hex: :mimerl, repo: "hexpm", optional: false]}, {:parse_trans, "3.3.1", [hex: :parse_trans, repo: "hexpm", optional: false]}, {:ssl_verify_fun, "~>1.1.0", [hex: :ssl_verify_fun, repo: "hexpm", optional: false]}, {:unicode_util_compat, "~>0.7.0", [hex: :unicode_util_compat, repo: "hexpm", optional: false]}], "hexpm", "9afcda620704d720db8c6a3123e9848d09c87586dc1c10479c42627b905b5c5e"}, + "httpoison": {:hex, :httpoison, "1.8.0", "6b85dea15820b7804ef607ff78406ab449dd78bed923a49c7160e1886e987a3d", [:mix], [{:hackney, "~> 1.17", [hex: :hackney, repo: "hexpm", optional: false]}], "hexpm", "28089eaa98cf90c66265b6b5ad87c59a3729bea2e74e9d08f9b51eb9729b3c3a"}, + "idna": {:hex, :idna, "6.1.1", "8a63070e9f7d0c62eb9d9fcb360a7de382448200fbbd1b106cc96d3d8099df8d", [:rebar3], [{:unicode_util_compat, "~>0.7.0", [hex: :unicode_util_compat, repo: "hexpm", optional: false]}], "hexpm", "92376eb7894412ed19ac475e4a86f7b413c1b9fbb5bd16dccd57934157944cea"}, + "jason": {:hex, :jason, "1.3.0", "fa6b82a934feb176263ad2df0dbd91bf633d4a46ebfdffea0c8ae82953714946", [:mix], [{:decimal, "~> 1.0 or ~> 2.0", [hex: :decimal, repo: "hexpm", optional: true]}], "hexpm", "53fc1f51255390e0ec7e50f9cb41e751c260d065dcba2bf0d08dc51a4002c2ac"}, "makeup": {:hex, :makeup, "1.0.5", "d5a830bc42c9800ce07dd97fa94669dfb93d3bf5fcf6ea7a0c67b2e0e4a7f26c", [:mix], [{:nimble_parsec, "~> 0.5 or ~> 1.0", [hex: :nimble_parsec, repo: "hexpm", optional: false]}], "hexpm", "cfa158c02d3f5c0c665d0af11512fed3fba0144cf1aadee0f2ce17747fba2ca9"}, - "makeup_elixir": {:hex, :makeup_elixir, "0.15.0", "98312c9f0d3730fde4049985a1105da5155bfe5c11e47bdc7406d88e01e4219b", [:mix], [{:makeup, "~> 1.0", [hex: :makeup, repo: "hexpm", optional: false]}, {:nimble_parsec, "~> 1.1", [hex: :nimble_parsec, repo: "hexpm", optional: false]}], "hexpm", "75ffa34ab1056b7e24844c90bfc62aaf6f3a37a15faa76b07bc5eba27e4a8b4a"}, + "makeup_elixir": {:hex, :makeup_elixir, "0.15.2", "dc72dfe17eb240552857465cc00cce390960d9a0c055c4ccd38b70629227e97c", [:mix], [{:makeup, "~> 1.0", [hex: :makeup, repo: "hexpm", optional: false]}, {:nimble_parsec, "~> 1.1", [hex: :nimble_parsec, repo: "hexpm", optional: false]}], "hexpm", "fd23ae48d09b32eff49d4ced2b43c9f086d402ee4fd4fcb2d7fad97fa8823e75"}, + "makeup_erlang": {:hex, :makeup_erlang, "0.1.1", "3fcb7f09eb9d98dc4d208f49cc955a34218fc41ff6b84df7c75b3e6e533cc65f", [:mix], [{:makeup, "~> 1.0", [hex: :makeup, repo: "hexpm", optional: false]}], "hexpm", "174d0809e98a4ef0b3309256cbf97101c6ec01c4ab0b23e926a9e17df2077cbb"}, "metrics": {:hex, :metrics, "1.0.1", "25f094dea2cda98213cecc3aeff09e940299d950904393b2a29d191c346a8486", [:rebar3], [], "hexpm", "69b09adddc4f74a40716ae54d140f93beb0fb8978d8636eaded0c31b6f099f16"}, - "mime": {:hex, :mime, "1.5.0", "203ef35ef3389aae6d361918bf3f952fa17a09e8e43b5aa592b93eba05d0fb8d", [:mix], [], "hexpm", "55a94c0f552249fc1a3dd9cd2d3ab9de9d3c89b559c2bd01121f824834f24746"}, + "mime": {:hex, :mime, "2.0.2", "0b9e1a4c840eafb68d820b0e2158ef5c49385d17fb36855ac6e7e087d4b1dcc5", [:mix], [], "hexpm", "e6a3f76b4c277739e36c2e21a2c640778ba4c3846189d5ab19f97f126df5f9b7"}, "mimerl": {:hex, :mimerl, "1.2.0", "67e2d3f571088d5cfd3e550c383094b47159f3eee8ffa08e64106cdf5e981be3", [:rebar3], [], "hexpm", "f278585650aa581986264638ebf698f8bb19df297f66ad91b18910dfc6e19323"}, - "mox": {:hex, :mox, "1.0.0", "4b3c7005173f47ff30641ba044eb0fe67287743eec9bd9545e37f3002b0a9f8b", [:mix], [], "hexpm", "201b0a20b7abdaaab083e9cf97884950f8a30a1350a1da403b3145e213c6f4df"}, - "nimble_parsec": {:hex, :nimble_parsec, "1.1.0", "3a6fca1550363552e54c216debb6a9e95bd8d32348938e13de5eda962c0d7f89", [:mix], [], "hexpm", "08eb32d66b706e913ff748f11694b17981c0b04a33ef470e33e11b3d3ac8f54b"}, - "parse_trans": {:hex, :parse_trans, "3.3.0", "09765507a3c7590a784615cfd421d101aec25098d50b89d7aa1d66646bc571c1", [:rebar3], [], "hexpm", "17ef63abde837ad30680ea7f857dd9e7ced9476cdd7b0394432af4bfc241b960"}, - "plug": {:hex, :plug, "1.11.0", "f17217525597628298998bc3baed9f8ea1fa3f1160aa9871aee6df47a6e4d38e", [:mix], [{:mime, "~> 1.0", [hex: :mime, repo: "hexpm", optional: false]}, {:plug_crypto, "~> 1.1.1 or ~> 1.2", [hex: :plug_crypto, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "2d9c633f0499f9dc5c2fd069161af4e2e7756890b81adcbb2ceaa074e8308876"}, - "plug_crypto": {:hex, :plug_crypto, "1.2.0", "1cb20793aa63a6c619dd18bb33d7a3aa94818e5fd39ad357051a67f26dfa2df6", [:mix], [], "hexpm", "a48b538ae8bf381ffac344520755f3007cc10bd8e90b240af98ea29b69683fc2"}, + "mox": {:hex, :mox, "1.0.1", "b651bf0113265cda0ba3a827fcb691f848b683c373b77e7d7439910a8d754d6e", [:mix], [], "hexpm", "35bc0dea5499d18db4ef7fe4360067a59b06c74376eb6ab3bd67e6295b133469"}, + "nimble_parsec": {:hex, :nimble_parsec, "1.2.0", "b44d75e2a6542dcb6acf5d71c32c74ca88960421b6874777f79153bbbbd7dccc", [:mix], [], "hexpm", "52b2871a7515a5ac49b00f214e4165a40724cf99798d8e4a65e4fd64ebd002c1"}, + "parse_trans": {:hex, :parse_trans, "3.3.1", "16328ab840cc09919bd10dab29e431da3af9e9e7e7e6f0089dd5a2d2820011d8", [:rebar3], [], "hexpm", "07cd9577885f56362d414e8c4c4e6bdf10d43a8767abb92d24cbe8b24c54888b"}, + "plug": {:hex, :plug, "1.12.1", "645678c800601d8d9f27ad1aebba1fdb9ce5b2623ddb961a074da0b96c35187d", [:mix], [{:mime, "~> 1.0 or ~> 2.0", [hex: :mime, repo: "hexpm", optional: false]}, {:plug_crypto, "~> 1.1.1 or ~> 1.2", [hex: :plug_crypto, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4.3 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "d57e799a777bc20494b784966dc5fbda91eb4a09f571f76545b72a634ce0d30b"}, + "plug_crypto": {:hex, :plug_crypto, "1.2.2", "05654514ac717ff3a1843204b424477d9e60c143406aa94daf2274fdd280794d", [:mix], [], "hexpm", "87631c7ad914a5a445f0a3809f99b079113ae4ed4b867348dd9eec288cecb6db"}, "ssl_verify_fun": {:hex, :ssl_verify_fun, "1.1.6", "cf344f5692c82d2cd7554f5ec8fd961548d4fd09e7d22f5b62482e5aeaebd4b0", [:make, :mix, :rebar3], [], "hexpm", "bdb0d2471f453c88ff3908e7686f86f9be327d065cc1ec16fa4540197ea04680"}, - "telemetry": {:hex, :telemetry, "0.4.2", "2808c992455e08d6177322f14d3bdb6b625fbcfd233a73505870d8738a2f4599", [:rebar3], [], "hexpm", "2d1419bd9dda6a206d7b5852179511722e2b18812310d304620c7bd92a13fcef"}, - "unicode_util_compat": {:hex, :unicode_util_compat, "0.5.0", "8516502659002cec19e244ebd90d312183064be95025a319a6c7e89f4bccd65b", [:rebar3], [], "hexpm", "d48d002e15f5cc105a696cf2f1bbb3fc72b4b770a184d8420c8db20da2674b38"}, + "telemetry": {:hex, :telemetry, "1.0.0", "0f453a102cdf13d506b7c0ab158324c337c41f1cc7548f0bc0e130bbf0ae9452", [:rebar3], [], "hexpm", "73bc09fa59b4a0284efb4624335583c528e07ec9ae76aca96ea0673850aec57a"}, + "unicode_util_compat": {:hex, :unicode_util_compat, "0.7.0", "bc84380c9ab48177092f43ac89e4dfa2c6d62b40b8bd132b1059ecc7232f9a78", [:rebar3], [], "hexpm", "25eee6d67df61960cf6a794239566599b09e17e668d3700247bc498638152521"}, }