defmodule Stripe.TestClock do
@moduledoc """
Work with Stripe Test Clock object
You can:
- Create a Test Clock
- Retrieve a Test Clock
- Advance a Test Clock
- Delete a Test Clock
- List Test Clocks
Stripe API reference: https://stripe.com/docs/api/test_clocks
"""
use Stripe.Entity
import Stripe.Request
@type t :: %__MODULE__{
id: Stripe.id(),
object: String.t(),
created: Stripe.timestamp(),
deletes_after: Stripe.timestamp(),
frozen_time: Stripe.timestamp(),
livemode: boolean(),
name: String.t(),
status: String.t()
}
defstruct [
:id,
:object,
:created,
:deletes_after,
:frozen_time,
:livemode,
:name,
:status
]
@plural_endpoint "test_helpers/test_clocks"
@spec create(params, Stripe.options()) :: {:ok, t()} | {:error, Stripe.Error.t()}
when params: %{
:frozen_time => Stripe.timestamp(),
optional(:name) => String.t()
}
def create(params, opts \\ []) do
opts
|> new_request()
|> put_endpoint(@plural_endpoint)
|> put_params(params)
|> put_method(:post)
|> make_request()
end
@spec retrieve(Stripe.id() | t(), Stripe.options()) :: {:ok, t()} | {:error, Stripe.Error.t()}
def retrieve(id, opts \\ []) do
opts
|> new_request()
|> put_endpoint(@plural_endpoint <> "/#{get_id!(id)}")
|> put_method(:get)
|> make_request()
end
@spec advance(Stripe.id(), params, Stripe.options()) :: {:ok, t()} | {:error, Stripe.Error.t()}
when params: %{
:frozen_time => Stripe.timestamp()
}
def advance(id, params, opts \\ []) do
opts
|> new_request()
|> put_endpoint(@plural_endpoint <> "/#{get_id!(id)}/advance")
|> put_method(:post)
|> put_params(params)
|> make_request()
end
@spec delete(Stripe.id() | t(), Stripe.options()) :: {:ok, t()} | {:erorr, Stripe.Error.t()}
def delete(id, opts \\ []) do
opts
|> new_request()
|> put_endpoint(@plural_endpoint <> "/#{get_id!(id)}")
|> put_method(:delete)
|> make_request()
end
@spec list(params, Stripe.options()) :: {:ok, Stripe.List.t(t())} | {:error, Stripe.Error.t()}
when params: %{
optional(:ending_before) => Stripe.timestamp(),
optional(:limit) => 1..100,
optional(:starting_after) => t() | Stripe.id()
}
def list(params \\ %{}, opts \\ []) do
opts
|> new_request()
|> prefix_expansions()
|> put_endpoint(@plural_endpoint)
|> put_method(:get)
|> put_params(params)
|> cast_to_id([:ending_before, :starting_after])
|> make_request()
end
end