Introduce activity filters

Signed-off-by: Thomas Citharel <tcit@tcit.fr>
This commit is contained in:
Thomas Citharel
2021-03-09 16:20:58 +01:00
parent aa2c79d312
commit d8e4d6c24f
9 changed files with 243 additions and 11 deletions

View File

@@ -21,6 +21,7 @@ defmodule Mobilizon.GraphQL.Resolvers.ActivityTest do
query GroupTimeline(
$preferredUsername: String!
$type: ActivityType
$author: ActivityAuthor
$page: Int
$limit: Int
) {
@@ -29,7 +30,7 @@ defmodule Mobilizon.GraphQL.Resolvers.ActivityTest do
preferredUsername
domain
name
activity(type: $type, page: $page, limit: $limit) {
activity(type: $type, author: $author, page: $page, limit: $limit) {
total
elements {
id
@@ -210,6 +211,92 @@ defmodule Mobilizon.GraphQL.Resolvers.ActivityTest do
event.uuid
end
test "group_activity/3 list group activities filtered by type", %{
conn: conn,
group: %Actor{preferred_username: preferred_username, id: group_id} = group
} do
user = insert(:user)
actor = insert(:actor, user: user)
insert(:member,
parent: group,
actor: actor,
role: :member,
member_since: DateTime.truncate(DateTime.utc_now(), :second)
)
event = insert(:event, attributed_to: group, organizer_actor: actor)
post = insert(:post, author: actor, attributed_to: group)
EventActivity.insert_activity(event, subject: "event_created")
PostActivity.insert_activity(post, subject: "post_created")
assert %{success: 2, failure: 0} == Oban.drain_queue(queue: :activity)
assert Activities.list_activities() |> length() == 2
res =
conn
|> auth_conn(user)
|> AbsintheHelpers.graphql_query(
query: @group_activities_query,
variables: %{preferredUsername: preferred_username, type: "POST"}
)
assert res["errors"] == nil
assert res["data"]["group"]["id"] == to_string(group_id)
assert res["data"]["group"]["activity"]["total"] == 1
activity = hd(res["data"]["group"]["activity"]["elements"])
assert activity["object"]["id"] == to_string(post.id)
assert activity["subject"] == "post_created"
assert Enum.find(activity["subjectParams"], &(&1["key"] == "post_title"))["value"] ==
post.title
assert Enum.find(activity["subjectParams"], &(&1["key"] == "post_slug"))["value"] ==
post.slug
end
test "group_activity/3 list group activities filtered by author", %{
conn: conn,
group: %Actor{preferred_username: preferred_username, id: group_id} = group
} do
user = insert(:user)
actor = insert(:actor, user: user)
insert(:member,
parent: group,
actor: actor,
role: :member,
member_since: DateTime.truncate(DateTime.utc_now(), :second)
)
event = insert(:event, attributed_to: group, organizer_actor: actor)
post = insert(:post, attributed_to: group)
EventActivity.insert_activity(event, subject: "event_created")
PostActivity.insert_activity(post, subject: "post_created")
assert %{success: 2, failure: 0} == Oban.drain_queue(queue: :activity)
assert Activities.list_activities() |> length() == 2
res =
conn
|> auth_conn(user)
|> AbsintheHelpers.graphql_query(
query: @group_activities_query,
variables: %{preferredUsername: preferred_username, author: "BY"}
)
assert res["errors"] == nil
assert res["data"]["group"]["id"] == to_string(group_id)
assert res["data"]["group"]["activity"]["total"] == 1
activity = hd(res["data"]["group"]["activity"]["elements"])
assert activity["object"]["id"] == to_string(post.id)
assert activity["subject"] == "post_created"
assert Enum.find(activity["subjectParams"], &(&1["key"] == "post_title"))["value"] ==
post.title
assert Enum.find(activity["subjectParams"], &(&1["key"] == "post_slug"))["value"] ==
post.slug
end
test "group_activity/3 list group activities from deleted object", %{
conn: conn,
group: %Actor{preferred_username: preferred_username, id: group_id} = group