[WIP] Test transmogrifier
Introduce MobilizonWeb.API namespace Signed-off-by: Thomas Citharel <tcit@tcit.fr> Format Signed-off-by: Thomas Citharel <tcit@tcit.fr> WIP Signed-off-by: Thomas Citharel <tcit@tcit.fr> remove unneeded code Signed-off-by: Thomas Citharel <tcit@tcit.fr> Fix tests Signed-off-by: Thomas Citharel <tcit@tcit.fr> Fix warnings Signed-off-by: Thomas Citharel <tcit@tcit.fr>
This commit is contained in:
@@ -167,6 +167,7 @@ defmodule Mobilizon.Actors.Actor do
|
||||
])
|
||||
|> build_urls(:Group)
|
||||
|> put_change(:domain, nil)
|
||||
|> put_change(:keys, Actors.create_keys())
|
||||
|> put_change(:type, :Group)
|
||||
|> validate_required([:url, :outbox_url, :inbox_url, :type, :preferred_username])
|
||||
|> unique_constraint(:preferred_username, name: :actors_preferred_username_domain_type_index)
|
||||
@@ -292,7 +293,7 @@ defmodule Mobilizon.Actors.Actor do
|
||||
{:already_following, false} <- {:already_following, following?(follower, followed)} do
|
||||
do_follow(follower, followed, approved)
|
||||
else
|
||||
{:already_following, _} ->
|
||||
{:already_following, %Follower{}} ->
|
||||
{:error,
|
||||
"Could not follow actor: you are already following #{followed.preferred_username}"}
|
||||
|
||||
@@ -301,6 +302,17 @@ defmodule Mobilizon.Actors.Actor do
|
||||
end
|
||||
end
|
||||
|
||||
@spec unfollow(struct(), struct()) :: {:ok, Follower.t()} | {:error, Ecto.Changeset.t()}
|
||||
def unfollow(%Actor{} = followed, %Actor{} = follower) do
|
||||
with {:already_following, %Follower{} = follow} <-
|
||||
{:already_following, following?(follower, followed)} do
|
||||
Actors.delete_follower(follow)
|
||||
else
|
||||
{:already_following, false} ->
|
||||
{:error, "Could not unfollow actor: you are not following #{followed.preferred_username}"}
|
||||
end
|
||||
end
|
||||
|
||||
defp do_follow(%Actor{} = follower, %Actor{} = followed, approved) do
|
||||
Actors.create_follower(%{
|
||||
"actor_id" => follower.id,
|
||||
@@ -311,12 +323,13 @@ defmodule Mobilizon.Actors.Actor do
|
||||
|
||||
@spec following?(struct(), struct()) :: boolean()
|
||||
def following?(
|
||||
%Actor{id: follower_actor_id} = _follower_actor,
|
||||
%Actor{followers: followers} = _followed
|
||||
%Actor{} = follower_actor,
|
||||
%Actor{} = followed_actor
|
||||
) do
|
||||
followers
|
||||
|> Enum.map(& &1.actor_id)
|
||||
|> Enum.member?(follower_actor_id)
|
||||
case Actors.get_follower(followed_actor, follower_actor) do
|
||||
nil -> false
|
||||
%Follower{} = follow -> follow
|
||||
end
|
||||
end
|
||||
|
||||
@spec actor_acct_from_actor(struct()) :: String.t()
|
||||
|
||||
Reference in New Issue
Block a user