defmodule Plausible.PaddleApi.Mock do def get_subscription(_) do {:ok, %{ "next_payment" => %{ "date" => "2019-07-10", "amount" => 6 }, "last_payment" => %{ "date" => "2019-06-10", "amount" => 6 } }} end def update_subscription(_, %{plan_id: new_plan_id}) do new_plan_id = String.to_integer(new_plan_id) {:ok, %{ "plan_id" => new_plan_id, "next_payment" => %{ "date" => "2019-07-10", "amount" => 6 } }} end def get_invoices(nil), do: {:error, :no_invoices} def get_invoices(%{paddle_subscription_id: nil}), do: {:error, :no_invoices} def get_invoices(subscription) do case subscription.paddle_subscription_id do "invalid_subscription_id" -> {:error, :request_failed} _ -> {:ok, [ %{ "amount" => 11.11, "currency" => "EUR", "payout_date" => "2020-12-24", "receipt_url" => "https://some-receipt-url.com" }, %{ "amount" => 22, "currency" => "USD", "payout_date" => "2020-11-24", "receipt_url" => "https://other-receipt-url.com" } ]} end end # to give a reasonable testing structure for monthly and yearly plan # prices, this function returns prices with the following logic: # 10, 100, 20, 200, 30, 300, ...and so on. def fetch_prices([_ | _] = product_ids) do {prices, _index} = Enum.reduce(product_ids, {%{}, 1}, fn p, {acc, i} -> price = if rem(i, 2) == 1, do: ceil(i / 2.0) * 10.0, else: ceil(i / 2.0) * 100.0 {Map.put(acc, p, Money.from_float!(:EUR, price)), i + 1} end) {:ok, prices} end end