lib/mock_stripe/invoice.ex

defmodule MockStripe.Invoice do
  defstruct [
    :amount,
    :currency,
    :id,
    :status
  ]

  alias MockStripe.List
  alias MockStripe.Invoice

  def retrieve() do
    stripe_id = "in_#{MockStripe.token()}"
    retrieve(stripe_id)
  end

  def retrieve("in_" <> _ = stripe_id) do
    %Invoice{
      amount: 9900,
      currency: "usd",
      id: stripe_id,
      status: "paid",
    }
  end

  def list(_attrs \\ %{}) do
    {:ok,
     %List{
       data: [
         retrieve()
       ],
       has_more: false,
       object: "list",
       total_count: nil,
       url: "/v1/invoices"
     }}
  end
end