[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:
Thomas Citharel
2018-12-14 17:41:55 +01:00
parent e3a8343112
commit c1e6612405
41 changed files with 2961 additions and 246 deletions

View File

@@ -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()