Introduce comments below events

Also add tomstones

Signed-off-by: Thomas Citharel <tcit@tcit.fr>
This commit is contained in:
Thomas Citharel
2019-11-15 18:36:47 +01:00
parent 45155a3bde
commit dc07f34d78
71 changed files with 2642 additions and 879 deletions

View File

@@ -7,7 +7,6 @@ defmodule MobilizonWeb.API.ReportTest do
alias Mobilizon.Events.{Comment, Event}
alias Mobilizon.Reports.{Note, Report}
alias Mobilizon.Service.ActivityPub.Activity
alias Mobilizon.Service.Formatter
alias Mobilizon.Users
alias Mobilizon.Users.User
@@ -24,11 +23,12 @@ defmodule MobilizonWeb.API.ReportTest do
assert {:ok, %Activity{} = flag_activity, _} =
Reports.report(%{
reporter_actor_id: reporter_id,
reported_actor_id: reported_id,
reporter_id: reporter_id,
reported_id: reported_id,
content: comment,
event_id: event_id,
comments_ids: []
comments_ids: [],
local: true
})
assert %Activity{
@@ -37,8 +37,7 @@ defmodule MobilizonWeb.API.ReportTest do
"type" => "Flag",
"cc" => [],
"content" => ^comment,
"object" => [^reported_url, ^event_url],
"state" => "open"
"object" => [^reported_url, ^event_url]
}
} = flag_activity
end
@@ -57,8 +56,8 @@ defmodule MobilizonWeb.API.ReportTest do
assert {:ok, %Activity{} = flag_activity, _} =
Reports.report(%{
reporter_actor_id: reporter_id,
reported_actor_id: reported_id,
reporter_id: reporter_id,
reported_id: reported_id,
content: comment,
event_id: nil,
comments_ids: [comment_1_id, comment_2_id]
@@ -68,10 +67,11 @@ defmodule MobilizonWeb.API.ReportTest do
actor: ^reporter_url,
data: %{
"type" => "Flag",
"cc" => [],
"content" => ^comment,
"object" => [^reported_url, ^comment_1_url, ^comment_2_url],
"state" => "open"
"to" => ["https://www.w3.org/ns/activitystreams#Public"],
"cc" => [],
"actor" => ^reporter_url
}
} = flag_activity
end
@@ -87,16 +87,16 @@ defmodule MobilizonWeb.API.ReportTest do
_comment_2 = insert(:comment, actor: reported)
comment = "This is really not acceptable, remote admin I don't know"
encoded_comment = Formatter.html_escape(comment, "text/plain")
encoded_comment = HtmlSanitizeEx.strip_tags(comment)
assert {:ok, %Activity{} = flag_activity, _} =
Reports.report(%{
reporter_actor_id: reporter_id,
reported_actor_id: reported_id,
reporter_id: reporter_id,
reported_id: reported_id,
content: comment,
event_id: nil,
comments_ids: [comment_1_id, comment_2_id],
forward: true
local: false
})
assert %Activity{
@@ -107,8 +107,10 @@ defmodule MobilizonWeb.API.ReportTest do
"cc" => [^reported_url],
"content" => ^encoded_comment,
"object" => [^reported_url, ^comment_1_url, ^comment_2_url],
"state" => "open"
}
"to" => ["https://www.w3.org/ns/activitystreams#Public"]
},
local: true,
recipients: ["https://www.w3.org/ns/activitystreams#Public", ^reported_url]
} = flag_activity
end
@@ -120,8 +122,8 @@ defmodule MobilizonWeb.API.ReportTest do
assert {:ok, %Activity{} = flag_activity, %Report{id: report_id} = _report} =
Reports.report(%{
reporter_actor_id: reporter_id,
reported_actor_id: reported_id,
reporter_id: reporter_id,
reported_id: reported_id,
content: "This is not a nice thing",
event_id: nil,
comments_ids: [comment_1_id],
@@ -146,8 +148,8 @@ defmodule MobilizonWeb.API.ReportTest do
assert {:ok, %Activity{} = flag_activity, %Report{id: report_id} = _report} =
Reports.report(%{
reporter_actor_id: reporter_id,
reported_actor_id: reported_id,
reporter_id: reporter_id,
reported_id: reported_id,
content: "This is not a nice thing",
event_id: nil,
comments_ids: [comment_1_id],

View File

@@ -8,12 +8,42 @@ defmodule MobilizonWeb.Resolvers.CommentResolverTest do
setup %{conn: conn} do
user = insert(:user)
actor = insert(:actor, user: user)
event = insert(:event)
{:ok, conn: conn, actor: actor, user: user}
{:ok, conn: conn, actor: actor, user: user, event: event}
end
describe "Comment Resolver" do
test "create_comment/3 creates a comment", %{conn: conn, actor: actor, user: user} do
test "create_comment/3 creates a comment", %{
conn: conn,
actor: actor,
user: user,
event: event
} do
mutation = """
mutation {
createComment(
text: "#{@comment.text}",
actor_id: "#{actor.id}",
event_id: "#{event.id}"
) {
text,
uuid
}
}
"""
res =
conn
|> auth_conn(user)
|> AbsintheHelpers.graphql_query(query: mutation, variables: %{})
assert res["data"]["createComment"]["text"] == @comment.text
end
test "create_comment/3 checks that user owns actor", %{conn: conn, user: user} do
actor = insert(:actor)
mutation = """
mutation {
createComment(
@@ -29,9 +59,202 @@ defmodule MobilizonWeb.Resolvers.CommentResolverTest do
res =
conn
|> auth_conn(user)
|> post("/api", AbsintheHelpers.mutation_skeleton(mutation))
|> AbsintheHelpers.graphql_query(query: mutation, variables: %{})
assert json_response(res, 200)["data"]["createComment"]["text"] == @comment.text
assert hd(res["errors"])["message"] ==
"Actor id is not owned by authenticated user"
end
test "create_comment/3 requires that the user needs to be authenticated", %{conn: conn} do
actor = insert(:actor)
mutation = """
mutation {
createComment(
text: "#{@comment.text}",
actor_id: "#{actor.id}"
) {
text,
uuid
}
}
"""
res =
conn
|> AbsintheHelpers.graphql_query(query: mutation, variables: %{})
assert hd(res["errors"])["message"] ==
"You are not allowed to create a comment if not connected"
end
test "create_comment/3 creates a reply to a comment", %{
conn: conn,
actor: actor,
user: user,
event: event
} do
comment = insert(:comment)
mutation = """
mutation {
createComment(
text: "#{@comment.text}",
actor_id: "#{actor.id}",
event_id: "#{event.id}",
in_reply_to_comment_id: "#{comment.id}"
) {
id,
text,
uuid,
in_reply_to_comment {
id,
text
}
}
}
"""
res =
conn
|> auth_conn(user)
|> AbsintheHelpers.graphql_query(query: mutation, variables: %{})
assert res["errors"] == nil
assert res["data"]["createComment"]["text"] == @comment.text
uuid = res["data"]["createComment"]["uuid"]
assert res["data"]["createComment"]["in_reply_to_comment"]["id"] ==
to_string(comment.id)
query = """
query {
thread(id: #{comment.id}) {
text,
uuid
}
}
"""
res =
conn
|> auth_conn(user)
|> AbsintheHelpers.graphql_query(query: query, variables: %{})
assert res["errors"] == nil
assert res["data"]["thread"] == [%{"uuid" => uuid, "text" => @comment.text}]
end
@delete_comment """
mutation DeleteComment($commentId: ID!, $actorId: ID!) {
deleteComment(commentId: $commentId, actorId: $actorId) {
id,
deletedAt
}
}
"""
test "deletes a comment", %{conn: conn, user: user, actor: actor} do
comment = insert(:comment, actor: actor)
res =
conn
|> AbsintheHelpers.graphql_query(
query: @delete_comment,
variables: %{commentId: comment.id, actorId: actor.id}
)
assert hd(res["errors"])["message"] ==
"You are not allowed to delete a comment if not connected"
actor2 = insert(:actor, user: user)
res =
conn
|> auth_conn(user)
|> AbsintheHelpers.graphql_query(
query: @delete_comment,
variables: %{commentId: comment.id, actorId: actor2.id}
)
assert hd(res["errors"])["message"] ==
"You cannot delete this comment"
res =
conn
|> auth_conn(user)
|> AbsintheHelpers.graphql_query(
query: @delete_comment,
variables: %{commentId: comment.id, actorId: actor.id}
)
assert res["errors"] == nil
assert res["data"]["deleteComment"]["id"] == to_string(comment.id)
refute is_nil(res["data"]["deleteComment"]["deletedAt"])
end
test "delete_comment/3 allows a comment being deleted by a moderator and creates a entry in actionLogs",
%{
conn: conn,
user: _user,
actor: _actor
} do
user_moderator = insert(:user, role: :moderator)
actor_moderator = insert(:actor, user: user_moderator)
actor2 = insert(:actor)
comment = insert(:comment, actor: actor2)
res =
conn
|> auth_conn(user_moderator)
|> AbsintheHelpers.graphql_query(
query: @delete_comment,
variables: %{commentId: comment.id, actorId: actor_moderator.id}
)
assert res["data"]["deleteComment"]["id"] == to_string(comment.id)
query = """
{
actionLogs {
action,
actor {
preferredUsername
},
object {
... on Report {
id,
status
},
... on ReportNote {
content
}
... on Event {
id,
title
},
... on Comment {
id,
text
}
}
}
}
"""
res =
conn
|> auth_conn(user_moderator)
|> get("/api", AbsintheHelpers.query_skeleton(query, "actionLogs"))
refute json_response(res, 200)["errors"]
assert hd(json_response(res, 200)["data"]["actionLogs"]) == %{
"action" => "COMMENT_DELETION",
"actor" => %{"preferredUsername" => actor_moderator.preferred_username},
"object" => %{"text" => comment.text, "id" => to_string(comment.id)}
}
end
end
end

View File

@@ -20,8 +20,8 @@ defmodule MobilizonWeb.Resolvers.ReportResolverTest do
mutation = """
mutation {
createReport(
reporter_actor_id: #{reporter.id},
reported_actor_id: #{reported.id},
reporter_id: #{reporter.id},
reported_id: #{reported.id},
event_id: #{event.id},
content: "This is an issue"
) {
@@ -57,8 +57,8 @@ defmodule MobilizonWeb.Resolvers.ReportResolverTest do
mutation = """
mutation {
createReport(
reported_actor_id: #{reported.id},
reporter_actor_id: 5,
reported_id: #{reported.id},
reporter_id: 5,
content: "This is an issue"
) {
content