diff --git a/test/support/factories/link_factory.ex b/test/support/factories/link_factory.ex new file mode 100644 index 0000000..a4898d4 --- /dev/null +++ b/test/support/factories/link_factory.ex @@ -0,0 +1,39 @@ +defmodule LinkShortener.Factories.LinkFactory do + use ExMachina + + alias LinkShortener.Links + alias LinkShortener.Factories.UserFactory + + def link_attrs_factory() do + %{ + name: sequence(:name, &"name-#{&1}"), + url: "https://gitlab.com/KKlochko/link_shortener", + shorten: sequence(:shorten, &"shorten#{&1}"), + } + end + + @doc """ + Create a link that has a static url, a random name and a random shorten. + If there are no user_id in attrs, then a new user will be created. + """ + def create_link(attrs \\ %{}) do + {:ok, link} = + link_attrs_factory() + |> put_new_user_id() + |> Map.merge(attrs) + |> Links.create_one() + + link + end + + defp put_new_user_id(attrs) do + if Map.has_key?(attrs, :user_id) do + attrs + else + user = UserFactory.create_user() + + attrs + |> Map.put(:user_id, user.id) + end + end +end