Happy with friend tests for now
This commit is contained in:
parent
aa0c43aeb1
commit
d331da9e17
@ -100,12 +100,28 @@ defmodule Friends.Friend do
|
|||||||
}
|
}
|
||||||
end
|
end
|
||||||
|
|
||||||
def commit(friend) do
|
def commit(changeset) do
|
||||||
friend
|
changeset
|
||||||
|
|> generate_slug
|
||||||
|> @repo.insert!
|
|> @repo.insert!
|
||||||
|> load_user
|
|> load_user
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
|
def generate_slug(%Ecto.Changeset{} = changeset) do
|
||||||
|
slug = changeset.changes.name |> to_slug
|
||||||
|
|
||||||
|
changeset |> changeset(%{
|
||||||
|
slug: slug
|
||||||
|
})
|
||||||
|
end
|
||||||
|
|
||||||
|
def generate_slug(%Friend{} = friend) do
|
||||||
|
%{
|
||||||
|
friend | slug: friend.name |> to_slug
|
||||||
|
}
|
||||||
|
end
|
||||||
|
|
||||||
def create_or_update(params) do
|
def create_or_update(params) do
|
||||||
case params.id do
|
case params.id do
|
||||||
:new ->
|
:new ->
|
||||||
@ -165,7 +181,24 @@ defmodule Friends.Friend do
|
|||||||
model
|
model
|
||||||
|> @repo.preload(:user)
|
|> @repo.preload(:user)
|
||||||
end
|
end
|
||||||
|
|
||||||
def load_user(%Friends.Friend{} = friend), do: friend
|
def load_user(%Friends.Friend{} = friend), do: friend
|
||||||
|
|
||||||
|
def load_relationships(%Friends.Friend{
|
||||||
|
relationships: %Ecto.Association.NotLoaded{},
|
||||||
|
reverse_relationships: %Ecto.Association.NotLoaded{}
|
||||||
|
} = model) do
|
||||||
|
model
|
||||||
|
|> @repo.preload([:relationships, :reverse_relationships])
|
||||||
|
end
|
||||||
|
def load_relationships(%Friends.Friend{} = friend), do: friend
|
||||||
|
|
||||||
|
def load_preloads(%Friends.Friend{
|
||||||
|
relationships: %Ecto.Association.NotLoaded{},
|
||||||
|
reverse_relationships: %Ecto.Association.NotLoaded{},
|
||||||
|
user: %Ecto.Association.NotLoaded{}} = model) do
|
||||||
|
model
|
||||||
|
|> @repo.preload([:user,:relationships, :reverse_relationships])
|
||||||
|
end
|
||||||
|
def load_preloads(%Friends.Friend{} = friend), do: friend
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|||||||
@ -31,6 +31,8 @@ defmodule Helpers do
|
|||||||
|> String.replace(~r/[\(\)]/, "")
|
|> String.replace(~r/[\(\)]/, "")
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def to_slug(nil), do: nil
|
||||||
|
|
||||||
def to_slug(name) when is_binary(name) do
|
def to_slug(name) when is_binary(name) do
|
||||||
name
|
name
|
||||||
|> String.replace(" ", "-")
|
|> String.replace(" ", "-")
|
||||||
|
|||||||
@ -1,11 +1,63 @@
|
|||||||
defmodule Friends.FriendTest do
|
defmodule Friends.FriendTest do
|
||||||
use Friends.DataCase
|
use Friends.DataCase
|
||||||
|
|
||||||
# alias Friends.Accounts
|
alias Friends.Friend
|
||||||
|
|
||||||
import Friends.{AccountsFixtures,FriendsFixtures}
|
import Friends.{AccountsFixtures,FriendsFixtures}
|
||||||
# alias Friends.Accounts.{User, UserToken}
|
# alias Friends.Accounts.{User, UserToken}
|
||||||
|
|
||||||
|
describe "new/1" do
|
||||||
|
test "no params" do
|
||||||
|
f = Friend.new()
|
||||||
|
assert f.id == :new
|
||||||
|
end
|
||||||
|
test "with params" do
|
||||||
|
attrs = valid_friend_attributes()
|
||||||
|
f = attrs |> Friend.new()
|
||||||
|
assert f.id == :new
|
||||||
|
assert f.name == attrs |> Map.get(:name)
|
||||||
|
end
|
||||||
|
test "has no loaded preloads" do
|
||||||
|
f = Friend.new()
|
||||||
|
assert %Ecto.Association.NotLoaded{} = f.user
|
||||||
|
assert %Ecto.Association.NotLoaded{} = f.relationships
|
||||||
|
assert %Ecto.Association.NotLoaded{} = f.reverse_relationships
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
describe "commit/1" do
|
||||||
|
test "changes id" do
|
||||||
|
f = valid_friend_attributes()
|
||||||
|
|> Friend.create()
|
||||||
|
|> Friend.commit()
|
||||||
|
|
||||||
|
assert f.id != :new
|
||||||
|
end
|
||||||
|
test "generates slug" do
|
||||||
|
f = valid_friend_attributes()
|
||||||
|
|> Friend.create()
|
||||||
|
|> Friend.commit()
|
||||||
|
|
||||||
|
assert f.slug != :nil
|
||||||
|
assert f.slug == f.name |> Helpers.to_slug
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
describe "generate_slug/1" do
|
||||||
|
test "a new friend has no slug" do
|
||||||
|
f = valid_friend_attributes() |> Friend.new()
|
||||||
|
assert f.slug == nil
|
||||||
|
end
|
||||||
|
test "generate_slug generates a slug, returns a friend" do
|
||||||
|
f = valid_friend_attributes() |> Friend.new() |> Friend.generate_slug
|
||||||
|
assert f.slug == f.name |> Helpers.to_slug
|
||||||
|
end
|
||||||
|
test "generate_slug generates a slug, returns a changeset" do
|
||||||
|
c = valid_friend_attributes() |> Friend.create() |> Friend.generate_slug
|
||||||
|
f = c.data
|
||||||
|
assert f.slug == f.name |> Helpers.to_slug
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
describe "assign_user/1" do
|
describe "assign_user/1" do
|
||||||
setup do
|
setup do
|
||||||
@ -30,5 +82,33 @@ defmodule Friends.FriendTest do
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
describe "preloads" do
|
||||||
|
setup do
|
||||||
|
%{friend:
|
||||||
|
%{
|
||||||
|
Friend.new | id: 123
|
||||||
|
}
|
||||||
|
}
|
||||||
|
end
|
||||||
|
|
||||||
|
test "load user", %{friend: friend} do
|
||||||
|
f = friend |> Friend.load_user
|
||||||
|
refute f.user == %Ecto.Association.NotLoaded{}
|
||||||
|
end
|
||||||
|
|
||||||
|
test "load relationships", %{friend: friend} do
|
||||||
|
f = friend |> Friend.load_relationships
|
||||||
|
refute f.relationships == %Ecto.Association.NotLoaded{}
|
||||||
|
refute f.reverse_relationships == %Ecto.Association.NotLoaded{}
|
||||||
|
end
|
||||||
|
|
||||||
|
test "load all", %{friend: friend} do
|
||||||
|
f = friend |> Friend.load_preloads
|
||||||
|
refute f.user == %Ecto.Association.NotLoaded{}
|
||||||
|
refute f.relationships == %Ecto.Association.NotLoaded{}
|
||||||
|
refute f.reverse_relationships == %Ecto.Association.NotLoaded{}
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|||||||
@ -5,9 +5,9 @@ defmodule Friends.FriendsFixtures do
|
|||||||
"""
|
"""
|
||||||
def random_string(length) do
|
def random_string(length) do
|
||||||
:crypto.strong_rand_bytes(length)
|
:crypto.strong_rand_bytes(length)
|
||||||
|> String.replace("-", "")
|
|
||||||
|> Base.url_encode64
|
|> Base.url_encode64
|
||||||
|> binary_part(0, length)
|
|> binary_part(0, length)
|
||||||
|
|> String.replace(~r/-/, "")
|
||||||
end
|
end
|
||||||
|
|
||||||
def unique_friend_email, do: "user#{System.unique_integer()}@example.com"
|
def unique_friend_email, do: "user#{System.unique_integer()}@example.com"
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user