lib/mock_stripe/plan.ex

defmodule MockStripe.Plan do
  defstruct [
    :active,
    :amount,
    :amount_decimal,
    :currency,
    :deleted,
    :id,
    :interval,
    :interval_count,
    :name,
    :nickname,
    :object,
    :product,
    :usage_type
  ]

  alias MockStripe.List
  alias MockStripe.Plan

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

  def retrieve("price_" <> _ = stripe_id) do
    %Plan{
      active: true,
      amount: 9900,
      amount_decimal: "9900",
      currency: "usd",
      id: stripe_id,
      interval: "year",
      interval_count: 1,
      nickname: "One year membership",
      object: "plan",
      product: "prod_I2TE8siyANz84p",
      usage_type: "licensed"
    }
  end

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

  def create(attrs \\ %{}) do
    {:ok,
     %Plan{
       id: "price_#{MockStripe.token()}",
       nickname: Map.get(attrs, :nickname, "Plan Name"),
       object: "plan",
     }}
  end

  def update(stripe_id, attrs \\ %{}) do
    {:ok,
     %Plan{
       id: stripe_id,
       nickname: Map.get(attrs, :nickname, "Plan Name"),
       object: "plan",
     }}
  end
end