From 83bf6ce5580003a2d937f3ad8b675600bfe4a4e2 Mon Sep 17 00:00:00 2001 From: KKlochko Date: Sun, 1 Sep 2024 21:26:38 +0300 Subject: [PATCH] Add LinkFactory to create links. --- test/support/factories/link_factory.ex | 39 ++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 test/support/factories/link_factory.ex 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