Forgery
Forgery is a slim yet extensible data generator in Elixir.
Installation
def deps() do
[{:forgery, "~> 0.1"}]
endOverview
Full documentation can be found at https://hexdocs.pm/forgery.
Forgery provides a few simple APIs to work with:
defmodule User do
defstruct [:id, :name, :password]
end
defmodule MyFactory do
use Forgery
def make(:user, fields) do
fields
|> put_new_field(:id, lazy(make_unique_integer()))
|> put_new_field(:name, &("user#" <> Integer.to_string(&1.id)))
|> create_struct(User)
end
end
iex> import MyFactory
iex>
iex> %User{} = make(:user)
iex> %User{id: 42, name: "user#42"} = make(:user, id: 42)
iex> [%User{}, %User{}] = make_many(:user, 2)And just as simple as that!
Ecto integration
Forgery was built with easy Ecto integration in mind, though not limiting to it.
For example you use Ecto and have MyRepo. You can add a function, says insert! and insert_many!, into the factory:
defmodule MyFactory do
def insert!(factory_name, fields \\ %{}) do
factory_name
|> make(fields)
|> MyRepo.insert!()
end
def insert_many!(factory_name, amount, fields \\ %{}) when amount >= 1 do
[%schema{} | _] = entities = make_many(factory_name, amount, fields)
{^amount, persisted_entities} = MyRepo.insert_all(schema, entities, returning: true)
persisted_entities
end
end
user = insert!(:user)
users = insert_many!(:user, 10, %{password: "1234567890"})Licensing
This software is licensed under the ISC license.