Happy with friend tests for now
This commit is contained in:
parent
f49092a08a
commit
82e86de969
@ -100,12 +100,28 @@ defmodule Friends.Friend do
|
||||
}
|
||||
end
|
||||
|
||||
def commit(friend) do
|
||||
friend
|
||||
def commit(changeset) do
|
||||
changeset
|
||||
|> generate_slug
|
||||
|> @repo.insert!
|
||||
|> load_user
|
||||
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
|
||||
case params.id do
|
||||
:new ->
|
||||
@ -165,7 +181,24 @@ defmodule Friends.Friend do
|
||||
model
|
||||
|> @repo.preload(:user)
|
||||
end
|
||||
|
||||
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
|
||||
|
||||
@ -31,6 +31,8 @@ defmodule Helpers do
|
||||
|> String.replace(~r/[\(\)]/, "")
|
||||
end
|
||||
|
||||
def to_slug(nil), do: nil
|
||||
|
||||
def to_slug(name) when is_binary(name) do
|
||||
name
|
||||
|> String.replace(" ", "-")
|
||||
|
||||
@ -1,34 +1,114 @@
|
||||
defmodule Friends.FriendTest do
|
||||
use Friends.DataCase
|
||||
|
||||
# alias Friends.Accounts
|
||||
alias Friends.Friend
|
||||
|
||||
import Friends.{AccountsFixtures,FriendsFixtures}
|
||||
# alias Friends.Accounts.{User, UserToken}
|
||||
|
||||
|
||||
describe "assign_user/1" do
|
||||
setup do
|
||||
friend = friend_fixture()
|
||||
%{
|
||||
friend: friend,
|
||||
user: user_fixture(%{email: friend.email})
|
||||
}
|
||||
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
|
||||
test "links a user to a friend", %{user: user, friend: friend} do
|
||||
assert user.profile == nil
|
||||
assert friend.user == nil
|
||||
|
||||
%{
|
||||
friend: new_friend,
|
||||
user: new_user
|
||||
} = friend |> Friends.Friend.assign_user
|
||||
describe "commit/1" do
|
||||
test "changes id" do
|
||||
f = valid_friend_attributes()
|
||||
|> Friend.create()
|
||||
|> Friend.commit()
|
||||
|
||||
assert new_user.profile.id == friend.id
|
||||
assert new_friend.user.id == user.id
|
||||
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
|
||||
setup do
|
||||
friend = friend_fixture()
|
||||
%{
|
||||
friend: friend,
|
||||
user: user_fixture(%{email: friend.email})
|
||||
}
|
||||
end
|
||||
end
|
||||
test "links a user to a friend", %{user: user, friend: friend} do
|
||||
assert user.profile == nil
|
||||
assert friend.user == nil
|
||||
|
||||
%{
|
||||
friend: new_friend,
|
||||
user: new_user
|
||||
} = friend |> Friends.Friend.assign_user
|
||||
|
||||
assert new_user.profile.id == friend.id
|
||||
assert new_friend.user.id == user.id
|
||||
|
||||
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
|
||||
|
||||
@ -5,9 +5,9 @@ defmodule Friends.FriendsFixtures do
|
||||
"""
|
||||
def random_string(length) do
|
||||
:crypto.strong_rand_bytes(length)
|
||||
|> String.replace("-", "")
|
||||
|> Base.url_encode64
|
||||
|> binary_part(0, length)
|
||||
|> String.replace(~r/-/, "")
|
||||
end
|
||||
|
||||
def unique_friend_email, do: "user#{System.unique_integer()}@example.com"
|
||||
|
||||
Loading…
Reference in New Issue
Block a user