Moar coverage

Signed-off-by: Thomas Citharel <tcit@tcit.fr>
This commit is contained in:
Thomas Citharel
2018-11-27 17:54:54 +01:00
parent b99625afab
commit da378633ac
13 changed files with 287 additions and 84 deletions

View File

@@ -222,13 +222,17 @@ defmodule Mobilizon.Actors.Actor do
If actor A and C both follow actor B, actor B's followers are A and C
"""
def get_followers(%Actor{id: actor_id} = _actor) do
def get_followers(%Actor{id: actor_id} = _actor, page \\ 1, limit \\ 10) do
start = (page - 1) * limit
Repo.all(
from(
a in Actor,
join: f in Follower,
on: a.id == f.actor_id,
where: f.target_actor_id == ^actor_id
where: f.target_actor_id == ^actor_id,
limit: ^limit,
offset: ^start
)
)
end
@@ -238,13 +242,17 @@ defmodule Mobilizon.Actors.Actor do
If actor A follows actor B and C, actor A's followings are B and B
"""
def get_followings(%Actor{id: actor_id} = _actor) do
def get_followings(%Actor{id: actor_id} = _actor, page \\ 1, limit \\ 10) do
start = (page - 1) * limit
Repo.all(
from(
a in Actor,
join: f in Follower,
on: a.id == f.target_actor_id,
where: f.actor_id == ^actor_id
where: f.actor_id == ^actor_id,
limit: ^limit,
offset: ^start
)
)
end
@@ -271,10 +279,8 @@ defmodule Mobilizon.Actors.Actor do
)
end
@spec follow(struct(), struct(), boolean()) :: Follower.t() | {:error, String.t()}
def follow(%Actor{} = follower, %Actor{} = followed, approved \\ true) do
def follow(%Actor{} = followed, %Actor{} = follower, approved \\ true) do
with {:suspended, false} <- {:suspended, followed.suspended},
# Check if followed has blocked follower
{:already_following, false} <- {:already_following, following?(follower, followed)} do
@@ -298,9 +304,12 @@ defmodule Mobilizon.Actors.Actor do
end
@spec following?(struct(), struct()) :: boolean()
def following?(%Actor{id: follower_actor_id} = _follower_actor, %Actor{followers: followers} = _followed) do
def following?(
%Actor{id: follower_actor_id} = _follower_actor,
%Actor{followers: followers} = _followed
) do
followers
|> Enum.map(&(&1.actor_id))
|> Enum.map(& &1.actor_id)
|> Enum.member?(follower_actor_id)
end
end

View File

@@ -367,7 +367,7 @@ defmodule Mobilizon.Actors do
def get_local_actor_by_name_with_everything(name) do
actor = Repo.one(from(a in Actor, where: a.preferred_username == ^name and is_nil(a.domain)))
Repo.preload(actor, :organized_events)
Repo.preload(actor, [:organized_events, :followers, :followings])
end
@spec get_actor_by_name_with_everything(String.t(), atom() | nil) :: Actor.t()

View File

@@ -23,7 +23,10 @@ defmodule Mobilizon.Actors.Service.ResetPassword do
) do
{:ok, user}
else
_err ->
{:error, %Ecto.Changeset{errors: [password: {"registration.error.password_too_short", _}]}} ->
{:error, :password_too_short}
err ->
{:error, :invalid_token}
end
end

View File

@@ -889,7 +889,7 @@ defmodule Mobilizon.Events do
def get_comment_full_from_uuid(uuid) do
with %Comment{} = comment <- Repo.get_by!(Comment, uuid: uuid) do
Repo.preload(comment, [:actor, :attributed_to])
Repo.preload(comment, [:actor, :attributed_to, :in_reply_to_comment])
end
end