2018-03-30 04:57:55 -06:00
|
|
|
defmodule Pleroma.Web.TwitterAPI.ActivityViewTest do
|
|
|
|
use Pleroma.DataCase
|
|
|
|
|
|
|
|
alias Pleroma.Web.CommonAPI
|
|
|
|
alias Pleroma.Web.CommonAPI.Utils
|
|
|
|
alias Pleroma.Web.TwitterAPI.ActivityView
|
|
|
|
alias Pleroma.Web.TwitterAPI.UserView
|
|
|
|
alias Pleroma.Web.TwitterAPI.TwitterAPI
|
2018-03-30 06:46:36 -06:00
|
|
|
alias Pleroma.Repo
|
2018-11-25 15:49:39 -07:00
|
|
|
alias Pleroma.{Activity, Object}
|
2018-03-30 07:17:13 -06:00
|
|
|
alias Pleroma.User
|
|
|
|
alias Pleroma.Web.ActivityPub.ActivityPub
|
2018-04-02 06:46:56 -06:00
|
|
|
|
2018-03-30 04:57:55 -06:00
|
|
|
import Pleroma.Factory
|
2018-04-02 06:46:56 -06:00
|
|
|
import Mock
|
2018-03-30 04:57:55 -06:00
|
|
|
|
|
|
|
test "a create activity with a note" do
|
|
|
|
user = insert(:user)
|
|
|
|
other_user = insert(:user, %{nickname: "shp"})
|
|
|
|
|
2018-05-20 10:01:24 -06:00
|
|
|
{:ok, activity} = CommonAPI.post(user, %{"status" => "Hey @shp!", "visibility" => "direct"})
|
2018-11-25 15:49:39 -07:00
|
|
|
object = Object.normalize(activity.data["object"])
|
2018-03-30 04:57:55 -06:00
|
|
|
|
|
|
|
result = ActivityView.render("activity.json", activity: activity)
|
|
|
|
|
2018-11-25 15:49:39 -07:00
|
|
|
convo_id = TwitterAPI.context_to_conversation_id(object.data["context"])
|
2018-03-30 04:57:55 -06:00
|
|
|
|
|
|
|
expected = %{
|
|
|
|
"activity_type" => "post",
|
|
|
|
"attachments" => [],
|
|
|
|
"attentions" => [
|
|
|
|
UserView.render("show.json", %{user: other_user})
|
|
|
|
],
|
2018-11-25 15:49:39 -07:00
|
|
|
"created_at" => object.data["published"] |> Utils.date_to_asctime(),
|
|
|
|
"external_url" => object.data["id"],
|
2018-03-30 04:57:55 -06:00
|
|
|
"fave_num" => 0,
|
|
|
|
"favorited" => false,
|
|
|
|
"id" => activity.id,
|
|
|
|
"in_reply_to_status_id" => nil,
|
2018-10-24 21:03:44 -06:00
|
|
|
"in_reply_to_screen_name" => nil,
|
2018-10-24 22:06:42 -06:00
|
|
|
"in_reply_to_user_id" => nil,
|
|
|
|
"in_reply_to_profileurl" => nil,
|
|
|
|
"in_reply_to_ostatus_uri" => nil,
|
2018-03-30 04:57:55 -06:00
|
|
|
"is_local" => true,
|
|
|
|
"is_post_verb" => true,
|
|
|
|
"possibly_sensitive" => false,
|
|
|
|
"repeat_num" => 0,
|
|
|
|
"repeated" => false,
|
|
|
|
"statusnet_conversation_id" => convo_id,
|
|
|
|
"statusnet_html" =>
|
2018-03-30 05:49:09 -06:00
|
|
|
"Hey <span><a href=\"#{other_user.ap_id}\">@<span>shp</span></a></span>!",
|
2018-03-30 04:57:55 -06:00
|
|
|
"tags" => [],
|
|
|
|
"text" => "Hey @shp!",
|
2018-11-25 15:49:39 -07:00
|
|
|
"uri" => object.data["id"],
|
2018-05-20 10:01:24 -06:00
|
|
|
"user" => UserView.render("show.json", %{user: user}),
|
2018-06-24 00:23:19 -06:00
|
|
|
"visibility" => "direct",
|
|
|
|
"summary" => nil
|
2018-03-30 04:57:55 -06:00
|
|
|
}
|
|
|
|
|
|
|
|
assert result == expected
|
|
|
|
end
|
2018-03-30 05:49:09 -06:00
|
|
|
|
2018-04-02 06:46:56 -06:00
|
|
|
test "a list of activities" do
|
|
|
|
user = insert(:user)
|
|
|
|
other_user = insert(:user, %{nickname: "shp"})
|
|
|
|
{:ok, activity} = CommonAPI.post(user, %{"status" => "Hey @shp!"})
|
2018-11-25 15:49:39 -07:00
|
|
|
object = Object.normalize(activity.data["object"])
|
2018-04-02 06:46:56 -06:00
|
|
|
|
2018-11-25 15:49:39 -07:00
|
|
|
convo_id = TwitterAPI.context_to_conversation_id(object.data["context"])
|
2018-04-02 06:46:56 -06:00
|
|
|
|
|
|
|
mocks = [
|
|
|
|
{
|
|
|
|
TwitterAPI,
|
|
|
|
[],
|
2018-04-02 08:27:36 -06:00
|
|
|
[context_to_conversation_id: fn _ -> false end]
|
|
|
|
},
|
|
|
|
{
|
|
|
|
User,
|
|
|
|
[:passthrough],
|
|
|
|
[get_cached_by_ap_id: fn _ -> nil end]
|
2018-04-02 06:46:56 -06:00
|
|
|
}
|
|
|
|
]
|
|
|
|
|
|
|
|
with_mocks mocks do
|
|
|
|
[result] = ActivityView.render("index.json", activities: [activity])
|
|
|
|
|
|
|
|
assert result["statusnet_conversation_id"] == convo_id
|
|
|
|
assert result["user"]
|
2018-04-02 08:27:36 -06:00
|
|
|
refute called(TwitterAPI.context_to_conversation_id(:_))
|
|
|
|
refute called(User.get_cached_by_ap_id(user.ap_id))
|
|
|
|
refute called(User.get_cached_by_ap_id(other_user.ap_id))
|
2018-04-02 06:46:56 -06:00
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2018-03-30 05:49:09 -06:00
|
|
|
test "an activity that is a reply" do
|
|
|
|
user = insert(:user)
|
|
|
|
other_user = insert(:user, %{nickname: "shp"})
|
|
|
|
|
|
|
|
{:ok, activity} = CommonAPI.post(user, %{"status" => "Hey @shp!"})
|
|
|
|
|
|
|
|
{:ok, answer} =
|
|
|
|
CommonAPI.post(other_user, %{"status" => "Hi!", "in_reply_to_status_id" => activity.id})
|
|
|
|
|
|
|
|
result = ActivityView.render("activity.json", %{activity: answer})
|
|
|
|
|
|
|
|
assert result["in_reply_to_status_id"] == activity.id
|
|
|
|
end
|
|
|
|
|
|
|
|
test "a like activity" do
|
|
|
|
user = insert(:user)
|
|
|
|
other_user = insert(:user, %{nickname: "shp"})
|
|
|
|
|
|
|
|
{:ok, activity} = CommonAPI.post(user, %{"status" => "Hey @shp!"})
|
|
|
|
{:ok, like, _object} = CommonAPI.favorite(activity.id, other_user)
|
|
|
|
|
|
|
|
result = ActivityView.render("activity.json", activity: like)
|
|
|
|
|
|
|
|
expected = %{
|
|
|
|
"activity_type" => "like",
|
|
|
|
"created_at" => like.data["published"] |> Utils.date_to_asctime(),
|
|
|
|
"external_url" => like.data["id"],
|
|
|
|
"id" => like.id,
|
|
|
|
"in_reply_to_status_id" => activity.id,
|
|
|
|
"is_local" => true,
|
2018-08-27 08:07:26 -06:00
|
|
|
"is_post_verb" => false,
|
|
|
|
"statusnet_html" => "shp favorited a status.",
|
|
|
|
"text" => "shp favorited a status.",
|
|
|
|
"uri" => "tag:#{like.data["id"]}:objectType=Favourite",
|
|
|
|
"user" => UserView.render("show.json", user: other_user)
|
|
|
|
}
|
|
|
|
|
|
|
|
assert result == expected
|
|
|
|
end
|
|
|
|
|
|
|
|
test "a like activity for deleted post" do
|
|
|
|
user = insert(:user)
|
|
|
|
other_user = insert(:user, %{nickname: "shp"})
|
|
|
|
|
|
|
|
{:ok, activity} = CommonAPI.post(user, %{"status" => "Hey @shp!"})
|
|
|
|
{:ok, like, _object} = CommonAPI.favorite(activity.id, other_user)
|
|
|
|
CommonAPI.delete(activity.id, user)
|
|
|
|
|
|
|
|
result = ActivityView.render("activity.json", activity: like)
|
|
|
|
|
|
|
|
expected = %{
|
|
|
|
"activity_type" => "like",
|
|
|
|
"created_at" => like.data["published"] |> Utils.date_to_asctime(),
|
|
|
|
"external_url" => like.data["id"],
|
|
|
|
"id" => like.id,
|
|
|
|
"in_reply_to_status_id" => nil,
|
|
|
|
"is_local" => true,
|
2018-03-30 05:49:09 -06:00
|
|
|
"is_post_verb" => false,
|
|
|
|
"statusnet_html" => "shp favorited a status.",
|
|
|
|
"text" => "shp favorited a status.",
|
|
|
|
"uri" => "tag:#{like.data["id"]}:objectType=Favourite",
|
|
|
|
"user" => UserView.render("show.json", user: other_user)
|
|
|
|
}
|
|
|
|
|
|
|
|
assert result == expected
|
|
|
|
end
|
2018-03-30 06:46:36 -06:00
|
|
|
|
|
|
|
test "an announce activity" do
|
|
|
|
user = insert(:user)
|
|
|
|
other_user = insert(:user, %{nickname: "shp"})
|
|
|
|
|
|
|
|
{:ok, activity} = CommonAPI.post(user, %{"status" => "Hey @shp!"})
|
2018-11-25 15:49:39 -07:00
|
|
|
{:ok, announce, object} = CommonAPI.repeat(activity.id, other_user)
|
2018-03-30 06:46:36 -06:00
|
|
|
|
2018-11-25 15:49:39 -07:00
|
|
|
convo_id = TwitterAPI.context_to_conversation_id(object.data["context"])
|
2018-03-30 06:46:36 -06:00
|
|
|
|
|
|
|
activity = Repo.get(Activity, activity.id)
|
|
|
|
|
|
|
|
result = ActivityView.render("activity.json", activity: announce)
|
|
|
|
|
|
|
|
expected = %{
|
|
|
|
"activity_type" => "repeat",
|
|
|
|
"created_at" => announce.data["published"] |> Utils.date_to_asctime(),
|
|
|
|
"external_url" => announce.data["id"],
|
|
|
|
"id" => announce.id,
|
|
|
|
"is_local" => true,
|
|
|
|
"is_post_verb" => false,
|
|
|
|
"statusnet_html" => "shp retweeted a status.",
|
|
|
|
"text" => "shp retweeted a status.",
|
|
|
|
"uri" => "tag:#{announce.data["id"]}:objectType=note",
|
|
|
|
"user" => UserView.render("show.json", user: other_user),
|
|
|
|
"retweeted_status" => ActivityView.render("activity.json", activity: activity),
|
|
|
|
"statusnet_conversation_id" => convo_id
|
|
|
|
}
|
|
|
|
|
|
|
|
assert result == expected
|
|
|
|
end
|
2018-03-30 07:17:13 -06:00
|
|
|
|
|
|
|
test "A follow activity" do
|
|
|
|
user = insert(:user)
|
|
|
|
other_user = insert(:user, %{nickname: "shp"})
|
|
|
|
|
|
|
|
{:ok, follower} = User.follow(user, other_user)
|
|
|
|
{:ok, follow} = ActivityPub.follow(follower, other_user)
|
|
|
|
|
|
|
|
result = ActivityView.render("activity.json", activity: follow)
|
|
|
|
|
|
|
|
expected = %{
|
|
|
|
"activity_type" => "follow",
|
|
|
|
"attentions" => [],
|
|
|
|
"created_at" => follow.data["published"] |> Utils.date_to_asctime(),
|
|
|
|
"external_url" => follow.data["id"],
|
|
|
|
"id" => follow.id,
|
|
|
|
"in_reply_to_status_id" => nil,
|
|
|
|
"is_local" => true,
|
|
|
|
"is_post_verb" => false,
|
|
|
|
"statusnet_html" => "#{user.nickname} started following shp",
|
|
|
|
"text" => "#{user.nickname} started following shp",
|
|
|
|
"user" => UserView.render("show.json", user: user)
|
|
|
|
}
|
|
|
|
|
|
|
|
assert result == expected
|
|
|
|
end
|
2018-03-30 07:32:43 -06:00
|
|
|
|
|
|
|
test "a delete activity" do
|
|
|
|
user = insert(:user)
|
|
|
|
|
|
|
|
{:ok, activity} = CommonAPI.post(user, %{"status" => "Hey @shp!"})
|
|
|
|
{:ok, delete} = CommonAPI.delete(activity.id, user)
|
|
|
|
|
|
|
|
result = ActivityView.render("activity.json", activity: delete)
|
|
|
|
|
|
|
|
expected = %{
|
|
|
|
"activity_type" => "delete",
|
|
|
|
"attentions" => [],
|
|
|
|
"created_at" => delete.data["published"] |> Utils.date_to_asctime(),
|
|
|
|
"external_url" => delete.data["id"],
|
|
|
|
"id" => delete.id,
|
|
|
|
"in_reply_to_status_id" => nil,
|
|
|
|
"is_local" => true,
|
|
|
|
"is_post_verb" => false,
|
|
|
|
"statusnet_html" => "deleted notice {{tag",
|
|
|
|
"text" => "deleted notice {{tag",
|
|
|
|
"uri" => delete.data["object"],
|
|
|
|
"user" => UserView.render("show.json", user: user)
|
|
|
|
}
|
|
|
|
|
|
|
|
assert result == expected
|
|
|
|
end
|
2018-03-30 04:57:55 -06:00
|
|
|
end
|