blob: 316d765aa8b4c1d8e6420e7b072e770b397979b2 [file] [log] [blame]
defmodule Couch.Test.Setup.Step do
@moduledoc """
A behaviour module for implementing custom setup steps for future reuse.
Every module implementing this behaviour must implement following three functions:
- new
- setup
- teardown
Here is an example of a custom step
```
defmodule Couch.Test.Setup.Step.Foo do
alias Couch.Test.Setup
defstruct [:foo_data, :foo_arg]
def new(setup, id, arg: arg) do
setup |> Setup.step(id, %__MODULE__{foo_arg: arg})
end
def setup(_setup, %__MODULE__{foo_arg: arg} = step) do
...
foo_data = ...
%{step | foo_data: foo_data}
end
def teardown(_setup, _step) do
end
def get_data(%__MODULE__{foo_data: data}) do
data
end
end
```
"""
@type t :: struct()
@callback new(setup :: %Couch.Test.Setup{}, id :: atom(), args: Keyword.t()) ::
%Couch.Test.Setup{}
@callback setup(setup :: %Couch.Test.Setup{}, step :: t()) ::
t()
@callback teardown(setup :: %Couch.Test.Setup{}, step :: t()) ::
any()
end