Improve member adding and excluding flow
Allow to exclude a member Send emails to the member when it's excluded Signed-off-by: Thomas Citharel <tcit@tcit.fr>
This commit is contained in:
@@ -90,9 +90,7 @@ defmodule Mobilizon.Federation.ActivityPub.Transmogrifier.JoinTest do
|
||||
assert capture_log([level: :warn], fn ->
|
||||
assert :error == Transmogrifier.handle_incoming(reject_data)
|
||||
end) =~
|
||||
"Unable to process Reject activity \"http://mastodon.example.org/users/admin#rejects/follows/4\". Object \"#{
|
||||
join_activity.data["id"]
|
||||
}\" wasn't found."
|
||||
"Tried to handle an Reject activity on a Join activity with a event object but the participant is already rejected"
|
||||
|
||||
# Organiser is not present since we use factories directly
|
||||
assert event.id
|
||||
|
||||
@@ -39,7 +39,7 @@ defmodule Mobilizon.Federation.ActivityPub.Transmogrifier.UndoTest do
|
||||
|
||||
assert data["type"] == "Undo"
|
||||
assert data["object"]["type"] == "Announce"
|
||||
assert data["object"]["object"] == comment.url
|
||||
assert data["object"]["object"]["id"] == comment.url
|
||||
|
||||
assert data["object"]["id"] ==
|
||||
"https://framapiaf.org/users/peertube/statuses/104584600044284729/activity"
|
||||
|
||||
@@ -33,7 +33,8 @@ defmodule Mobilizon.Federation.ActivityPub.UtilsTest do
|
||||
"id" => Routes.page_url(Endpoint, :comment, reply.uuid),
|
||||
"inReplyTo" => comment.url,
|
||||
"attributedTo" => reply.actor.url,
|
||||
"mediaType" => "text/html"
|
||||
"mediaType" => "text/html",
|
||||
"published" => reply.published_at |> DateTime.to_iso8601()
|
||||
} == Converter.Comment.model_to_as(reply)
|
||||
end
|
||||
|
||||
|
||||
@@ -3,6 +3,7 @@ defmodule Mobilizon.GraphQL.Resolvers.MemberTest do
|
||||
|
||||
import Mobilizon.Factory
|
||||
|
||||
alias Mobilizon.Actors.Member
|
||||
alias Mobilizon.GraphQL.AbsintheHelpers
|
||||
|
||||
setup %{conn: conn} do
|
||||
@@ -145,22 +146,17 @@ defmodule Mobilizon.GraphQL.Resolvers.MemberTest do
|
||||
actor: actor
|
||||
} do
|
||||
group = insert(:group)
|
||||
insert(:member, %{actor: actor, parent: group})
|
||||
insert(:member, role: :administrator, parent: group)
|
||||
%Member{id: member_id} = insert(:member, %{actor: actor, parent: group})
|
||||
|
||||
mutation = """
|
||||
mutation {
|
||||
leaveGroup(
|
||||
actor_id: #{actor.id},
|
||||
group_id: #{group.id}
|
||||
) {
|
||||
actor {
|
||||
id
|
||||
},
|
||||
parent {
|
||||
id
|
||||
}
|
||||
}
|
||||
id
|
||||
}
|
||||
}
|
||||
"""
|
||||
|
||||
res =
|
||||
@@ -169,8 +165,7 @@ defmodule Mobilizon.GraphQL.Resolvers.MemberTest do
|
||||
|> post("/api", AbsintheHelpers.mutation_skeleton(mutation))
|
||||
|
||||
assert json_response(res, 200)["errors"] == nil
|
||||
assert json_response(res, 200)["data"]["leaveGroup"]["parent"]["id"] == to_string(group.id)
|
||||
assert json_response(res, 200)["data"]["leaveGroup"]["actor"]["id"] == to_string(actor.id)
|
||||
assert json_response(res, 200)["data"]["leaveGroup"]["id"] == to_string(member_id)
|
||||
end
|
||||
|
||||
test "leave_group/3 should check if the member is the only administrator", %{
|
||||
@@ -185,15 +180,9 @@ defmodule Mobilizon.GraphQL.Resolvers.MemberTest do
|
||||
mutation = """
|
||||
mutation {
|
||||
leaveGroup(
|
||||
actor_id: #{actor.id},
|
||||
group_id: #{group.id}
|
||||
) {
|
||||
actor {
|
||||
id
|
||||
},
|
||||
parent {
|
||||
id
|
||||
}
|
||||
id
|
||||
}
|
||||
}
|
||||
"""
|
||||
@@ -213,12 +202,9 @@ defmodule Mobilizon.GraphQL.Resolvers.MemberTest do
|
||||
mutation = """
|
||||
mutation {
|
||||
leaveGroup(
|
||||
actor_id: #{actor.id},
|
||||
group_id: #{group.id}
|
||||
) {
|
||||
actor {
|
||||
id
|
||||
}
|
||||
id
|
||||
}
|
||||
}
|
||||
"""
|
||||
@@ -230,7 +216,7 @@ defmodule Mobilizon.GraphQL.Resolvers.MemberTest do
|
||||
assert hd(json_response(res, 200)["errors"])["message"] =~ "logged-in"
|
||||
end
|
||||
|
||||
test "leave_group/3 should check the actor is owned by the user", %{
|
||||
test "leave_group/3 should check the group exists", %{
|
||||
conn: conn,
|
||||
user: user,
|
||||
actor: actor
|
||||
@@ -241,41 +227,9 @@ defmodule Mobilizon.GraphQL.Resolvers.MemberTest do
|
||||
mutation = """
|
||||
mutation {
|
||||
leaveGroup(
|
||||
actor_id: 1042,
|
||||
group_id: #{group.id}
|
||||
) {
|
||||
actor {
|
||||
id
|
||||
}
|
||||
}
|
||||
}
|
||||
"""
|
||||
|
||||
res =
|
||||
conn
|
||||
|> auth_conn(user)
|
||||
|> post("/api", AbsintheHelpers.mutation_skeleton(mutation))
|
||||
|
||||
assert hd(json_response(res, 200)["errors"])["message"] =~ "not owned"
|
||||
end
|
||||
|
||||
test "leave_group/3 should check the member exists", %{
|
||||
conn: conn,
|
||||
user: user,
|
||||
actor: actor
|
||||
} do
|
||||
group = insert(:group)
|
||||
insert(:member, %{actor: actor, parent: group})
|
||||
|
||||
mutation = """
|
||||
mutation {
|
||||
leaveGroup(
|
||||
actor_id: #{actor.id},
|
||||
group_id: 1042
|
||||
) {
|
||||
actor {
|
||||
id
|
||||
}
|
||||
id
|
||||
}
|
||||
}
|
||||
"""
|
||||
@@ -285,7 +239,7 @@ defmodule Mobilizon.GraphQL.Resolvers.MemberTest do
|
||||
|> auth_conn(user)
|
||||
|> post("/api", AbsintheHelpers.mutation_skeleton(mutation))
|
||||
|
||||
assert hd(json_response(res, 200)["errors"])["message"] =~ "Member not found"
|
||||
assert hd(json_response(res, 200)["errors"])["message"] =~ "Group not found"
|
||||
end
|
||||
end
|
||||
|
||||
@@ -366,7 +320,6 @@ defmodule Mobilizon.GraphQL.Resolvers.MemberTest do
|
||||
test "invite_member/3 fails to invite a local actor to a group that invitor isn't in", %{
|
||||
conn: conn,
|
||||
user: user,
|
||||
actor: actor,
|
||||
group: group,
|
||||
target_actor: target_actor
|
||||
} do
|
||||
@@ -431,7 +384,6 @@ defmodule Mobilizon.GraphQL.Resolvers.MemberTest do
|
||||
test "invite_member/3 fails to invite a actor for a non-existing group", %{
|
||||
conn: conn,
|
||||
user: user,
|
||||
actor: actor,
|
||||
target_actor: target_actor
|
||||
} do
|
||||
res =
|
||||
|
||||
@@ -649,18 +649,33 @@ defmodule Mobilizon.ActorsTest do
|
||||
assert %Page{elements: [actor], total: 1} = Actors.list_members_for_group(group)
|
||||
end
|
||||
|
||||
test "create_member/1 with valid data but same actors fails to create a member", %{
|
||||
test "create_member/1 with valid data but same actors just updates the member", %{
|
||||
actor: actor,
|
||||
group: group
|
||||
} do
|
||||
create_test_member(%{actor: actor, group: group})
|
||||
%Member{id: member_id, url: member_url} = create_test_member(%{actor: actor, group: group})
|
||||
|
||||
valid_attrs =
|
||||
@valid_attrs
|
||||
attrs =
|
||||
%{}
|
||||
|> Map.put(:actor_id, actor.id)
|
||||
|> Map.put(:parent_id, group.id)
|
||||
|> Map.put(:role, :member)
|
||||
|
||||
assert {:error, _member} = Actors.create_member(valid_attrs)
|
||||
assert {:ok,
|
||||
%Member{
|
||||
id: updated_member_id,
|
||||
role: updated_member_role,
|
||||
actor_id: actor_id,
|
||||
parent_id: parent_id,
|
||||
url: url
|
||||
}} = Actors.create_member(attrs)
|
||||
|
||||
assert updated_member_role == :member
|
||||
assert actor_id == actor.id
|
||||
assert parent_id == group.id
|
||||
|
||||
assert url == member_url
|
||||
assert updated_member_id == member_id
|
||||
end
|
||||
|
||||
test "create_member/1 with invalid data returns error changeset" do
|
||||
|
||||
@@ -129,6 +129,7 @@ defmodule Mobilizon.Factory do
|
||||
deleted_at: nil,
|
||||
tags: build_list(3, :tag),
|
||||
in_reply_to_comment: nil,
|
||||
published_at: DateTime.utc_now(),
|
||||
url: Routes.page_url(Endpoint, :comment, uuid)
|
||||
}
|
||||
end
|
||||
@@ -285,7 +286,8 @@ defmodule Mobilizon.Factory do
|
||||
title: sequence("todo list"),
|
||||
actor: build(:group),
|
||||
id: uuid,
|
||||
url: Routes.page_url(Endpoint, :todo_list, uuid)
|
||||
url: Routes.page_url(Endpoint, :todo_list, uuid),
|
||||
published_at: DateTime.utc_now()
|
||||
}
|
||||
end
|
||||
|
||||
@@ -300,7 +302,8 @@ defmodule Mobilizon.Factory do
|
||||
due_date: Timex.shift(DateTime.utc_now(), hours: 2),
|
||||
assigned_to: build(:actor),
|
||||
url: Routes.page_url(Endpoint, :todo, uuid),
|
||||
creator: build(:actor)
|
||||
creator: build(:actor),
|
||||
published_at: DateTime.utc_now()
|
||||
}
|
||||
end
|
||||
|
||||
@@ -317,6 +320,7 @@ defmodule Mobilizon.Factory do
|
||||
creator: build(:actor),
|
||||
parent: nil,
|
||||
url: Routes.page_url(Endpoint, :resource, uuid),
|
||||
published_at: DateTime.utc_now(),
|
||||
path: "/#{title}"
|
||||
}
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user