Compare commits

..

No commits in common. '74136c7fa747225364bc1b8b92a3064678e86532' and '00467d249ac1f4df11d80718f6fe28067c61dda0' have entirely different histories.

@ -7,28 +7,8 @@ defmodule LinkShortener.Generators.LinkWithRandomShorten do
@doc """
Generate a Link with random shorten with the length.
## Options
:is_atom_based (boolean, true by default) - if a map is
atom-based, then a key for shorten will be :shorten, else
"shorten".
:length (integer, 10 by default) - the length for
the shorten.
:generator (function) - the shorten is generated by the
generator function.
LinkShortener.Generators.SafeString.generate/1 by default.
"""
@spec generate_one(map(), is_atom_based: boolean(), length: integer(), generator: function()) ::
[map()]
def generate_one(attrs, opts \\ []) do
is_atom_based = Keyword.get(opts, :is_atom_based, true)
length = Keyword.get(opts, :length, 10)
generator = Keyword.get(opts, :generator, &SafeString.generate/1)
if is_atom_based do
Map.put(attrs, :shorten, generator.(length))
else
Map.put(attrs, "shorten", generator.(length))
end
def generate_one(attrs, length \\ 10, generator \\ &SafeString.generate/1) do
Map.put(attrs, :shorten, generator.(length))
end
end

@ -9,28 +9,8 @@ defmodule LinkShortener.Links do
def new_one(), do: Link.changeset(%Link{}, %{})
@doc """
Create a Link with random shorten with the length.
## Options
:is_atom_based (boolean, true by default) - if a map is
atom-based, then a key for shorten will be :shorten, else
"shorten".
:length (integer, 10 by default) - the length for
the shorten.
:generator (function) - the shorten is generated by the
generator function.
LinkShortener.Generators.LinkWithRandomShorten.generate_one/2 by
default.
"""
@spec create_one(map(), [is_atom_based: boolean(), length: integer(), generator: function()]) ::
[map()]
def create_one(attrs, opts \\ []) do
is_atom_based = Keyword.get(opts, :is_atom_based, true)
length = Keyword.get(opts, :length, 10)
generator = Keyword.get(opts, :generator, &LinkGenerator.generate_one/2)
generator.(attrs, is_atom_based: is_atom_based, length: length)
def create_one(attrs, length \\ 10, generator \\ &LinkGenerator.generate_one/2) do
generator.(attrs, length)
|> insert_one()
end

@ -10,9 +10,9 @@ defmodule LinkShortener.Generators.LinkWithRandomShortenTest do
test "generate/1 returns random safe string with 10 as length" do
assert %{
name: @name,
shorten: shorten
} = LinkWithRandomShorten.generate_one(@attrs)
name: @name,
shorten: shorten
} = LinkWithRandomShorten.generate_one(@attrs)
assert String.length(shorten) == 10
end
@ -21,13 +21,9 @@ defmodule LinkShortener.Generators.LinkWithRandomShortenTest do
expected_length = 5
assert %{
name: @name,
shorten: shorten
} =
LinkWithRandomShorten.generate_one(@attrs,
is_atom_based: true,
length: expected_length
)
name: @name,
shorten: shorten
} = LinkWithRandomShorten.generate_one(@attrs, expected_length)
assert String.length(shorten) == expected_length
end
@ -38,15 +34,9 @@ defmodule LinkShortener.Generators.LinkWithRandomShortenTest do
expected_length = expected_shorten |> String.length()
assert %{
name: @name,
shorten: shorten
} =
LinkWithRandomShorten.generate_one(
@attrs,
is_atom_based: true,
length: expected_length,
generator: random_generator
)
name: @name,
shorten: shorten
} = LinkWithRandomShorten.generate_one(@attrs, expected_length, random_generator)
assert String.length(shorten) == expected_length
assert shorten == expected_shorten

@ -7,10 +7,11 @@ defmodule LinkShortener.Generators.SafeStringTest do
test "generate/1 returns random safe string with same length" do
for expected_length <- @lengths do
assert ^expected_length =
expected_length
|> SafeString.generate()
|> String.length()
length = expected_length
|> SafeString.generate()
|> String.length()
assert length = expected_length
end
end
end

@ -50,7 +50,7 @@ defmodule LinkShortener.LinksTest do
test "create_one/2 with valid data creates a link", %{user: user} do
assert {:ok, %Link{} = link} =
with_user(@create_generated_attrs, user)
|> Links.create_one(length: 5)
|> Links.create_one(5)
assert link.name == "some link name"
assert link.url == "https://gitlab.com/KKlochko/link_shortener"

Loading…
Cancel
Save