diff options
Diffstat (limited to 'test/web/twitter_api/views')
-rw-r--r-- | test/web/twitter_api/views/activity_view_test.exs | 209 | ||||
-rw-r--r-- | test/web/twitter_api/views/notification_view_test.exs | 108 | ||||
-rw-r--r-- | test/web/twitter_api/views/user_view_test.exs | 10 |
3 files changed, 322 insertions, 5 deletions
diff --git a/test/web/twitter_api/views/activity_view_test.exs b/test/web/twitter_api/views/activity_view_test.exs new file mode 100644 index 000000000..7f2017d3c --- /dev/null +++ b/test/web/twitter_api/views/activity_view_test.exs @@ -0,0 +1,209 @@ +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 + alias Pleroma.Repo + alias Pleroma.Activity + alias Pleroma.User + alias Pleroma.Web.ActivityPub.ActivityPub + + import Pleroma.Factory + import Mock + + test "a create activity with a note" do + user = insert(:user) + other_user = insert(:user, %{nickname: "shp"}) + + {:ok, activity} = CommonAPI.post(user, %{"status" => "Hey @shp!"}) + + result = ActivityView.render("activity.json", activity: activity) + + convo_id = TwitterAPI.context_to_conversation_id(activity.data["object"]["context"]) + + expected = %{ + "activity_type" => "post", + "attachments" => [], + "attentions" => [ + UserView.render("show.json", %{user: other_user}) + ], + "created_at" => activity.data["object"]["published"] |> Utils.date_to_asctime(), + "external_url" => activity.data["object"]["id"], + "fave_num" => 0, + "favorited" => false, + "id" => activity.id, + "in_reply_to_status_id" => nil, + "is_local" => true, + "is_post_verb" => true, + "possibly_sensitive" => false, + "repeat_num" => 0, + "repeated" => false, + "statusnet_conversation_id" => convo_id, + "statusnet_html" => + "Hey <span><a href=\"#{other_user.ap_id}\">@<span>shp</span></a></span>!", + "tags" => [], + "text" => "Hey @shp!", + "uri" => activity.data["object"]["id"], + "user" => UserView.render("show.json", %{user: user}) + } + + assert result == expected + end + + test "a list of activities" do + user = insert(:user) + other_user = insert(:user, %{nickname: "shp"}) + {:ok, activity} = CommonAPI.post(user, %{"status" => "Hey @shp!"}) + + convo_id = TwitterAPI.context_to_conversation_id(activity.data["object"]["context"]) + + mocks = [ + { + TwitterAPI, + [], + [context_to_conversation_id: fn _ -> false end] + }, + { + User, + [:passthrough], + [get_cached_by_ap_id: fn _ -> nil end] + } + ] + + with_mocks mocks do + [result] = ActivityView.render("index.json", activities: [activity]) + + assert result["statusnet_conversation_id"] == convo_id + assert result["user"] + 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)) + end + end + + 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, + "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 "an announce activity" do + user = insert(:user) + other_user = insert(:user, %{nickname: "shp"}) + + {:ok, activity} = CommonAPI.post(user, %{"status" => "Hey @shp!"}) + {:ok, announce, _object} = CommonAPI.repeat(activity.id, other_user) + + convo_id = TwitterAPI.context_to_conversation_id(activity.data["object"]["context"]) + + 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 + + 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 + + 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 +end diff --git a/test/web/twitter_api/views/notification_view_test.exs b/test/web/twitter_api/views/notification_view_test.exs new file mode 100644 index 000000000..e3b140657 --- /dev/null +++ b/test/web/twitter_api/views/notification_view_test.exs @@ -0,0 +1,108 @@ +defmodule Pleroma.Web.TwitterAPI.NotificationViewTest do + use Pleroma.DataCase + + alias Pleroma.{User, Notification} + alias Pleroma.Web.TwitterAPI.TwitterAPI + alias Pleroma.Web.TwitterAPI.NotificationView + alias Pleroma.Web.TwitterAPI.UserView + alias Pleroma.Web.TwitterAPI.ActivityView + alias Pleroma.Web.CommonAPI.Utils + alias Pleroma.Web.ActivityPub.ActivityPub + alias Pleroma.Builders.UserBuilder + + import Pleroma.Factory + + setup do + user = insert(:user, bio: "<span>Here's some html</span>") + [user: user] + end + + test "A follow notification" do + note_activity = insert(:note_activity) + user = User.get_cached_by_ap_id(note_activity.data["actor"]) + follower = insert(:user) + + {:ok, follower} = User.follow(follower, user) + {:ok, activity} = ActivityPub.follow(follower, user) + Cachex.set(:user_cache, "user_info:#{user.id}", User.user_info(Repo.get!(User, user.id))) + [follow_notif] = Notification.for_user(user) + + represented = %{ + "created_at" => follow_notif.inserted_at |> Utils.format_naive_asctime(), + "from_profile" => UserView.render("show.json", %{user: follower, for: user}), + "id" => follow_notif.id, + "is_seen" => 0, + "notice" => ActivityView.render("activity.json", %{activity: activity, for: user}), + "ntype" => "follow" + } + + assert represented == + NotificationView.render("notification.json", %{notification: follow_notif, for: user}) + end + + test "A mention notification" do + user = insert(:user) + other_user = insert(:user) + + {:ok, activity} = + TwitterAPI.create_status(other_user, %{"status" => "Päivää, @#{user.nickname}"}) + + [notification] = Notification.for_user(user) + + represented = %{ + "created_at" => notification.inserted_at |> Utils.format_naive_asctime(), + "from_profile" => UserView.render("show.json", %{user: other_user, for: user}), + "id" => notification.id, + "is_seen" => 0, + "notice" => ActivityView.render("activity.json", %{activity: activity, for: user}), + "ntype" => "mention" + } + + assert represented == + NotificationView.render("notification.json", %{notification: notification, for: user}) + end + + test "A retweet notification" do + note_activity = insert(:note_activity) + user = User.get_cached_by_ap_id(note_activity.data["actor"]) + repeater = insert(:user) + + {:ok, activity} = TwitterAPI.repeat(repeater, note_activity.id) + [notification] = Notification.for_user(user) + + represented = %{ + "created_at" => notification.inserted_at |> Utils.format_naive_asctime(), + "from_profile" => UserView.render("show.json", %{user: repeater, for: user}), + "id" => notification.id, + "is_seen" => 0, + "notice" => + ActivityView.render("activity.json", %{activity: notification.activity, for: user}), + "ntype" => "repeat" + } + + assert represented == + NotificationView.render("notification.json", %{notification: notification, for: user}) + end + + test "A like notification" do + note_activity = insert(:note_activity) + user = User.get_cached_by_ap_id(note_activity.data["actor"]) + liker = insert(:user) + + {:ok, activity} = TwitterAPI.fav(liker, note_activity.id) + [notification] = Notification.for_user(user) + + represented = %{ + "created_at" => notification.inserted_at |> Utils.format_naive_asctime(), + "from_profile" => UserView.render("show.json", %{user: liker, for: user}), + "id" => notification.id, + "is_seen" => 0, + "notice" => + ActivityView.render("activity.json", %{activity: notification.activity, for: user}), + "ntype" => "like" + } + + assert represented == + NotificationView.render("notification.json", %{notification: notification, for: user}) + end +end diff --git a/test/web/twitter_api/views/user_view_test.exs b/test/web/twitter_api/views/user_view_test.exs index 9e0a8a532..dd55c0b7e 100644 --- a/test/web/twitter_api/views/user_view_test.exs +++ b/test/web/twitter_api/views/user_view_test.exs @@ -15,7 +15,7 @@ defmodule Pleroma.Web.TwitterAPI.UserViewTest do test "A user with an avatar object", %{user: user} do image = "image" - user = %{ user | avatar: %{ "url" => [%{"href" => image}] }} + user = %{user | avatar: %{"url" => [%{"href" => image}]}} represented = UserView.render("show.json", %{user: user}) assert represented["profile_image_url"] == image end @@ -41,7 +41,7 @@ defmodule Pleroma.Web.TwitterAPI.UserViewTest do "name" => user.name, "screen_name" => user.nickname, "description" => HtmlSanitizeEx.strip_tags(user.bio), - "created_at" => user.inserted_at |> Utils.format_naive_asctime, + "created_at" => user.inserted_at |> Utils.format_naive_asctime(), "favourites_count" => 0, "statuses_count" => 1, "friends_count" => 1, @@ -76,7 +76,7 @@ defmodule Pleroma.Web.TwitterAPI.UserViewTest do "name" => user.name, "screen_name" => user.nickname, "description" => HtmlSanitizeEx.strip_tags(user.bio), - "created_at" => user.inserted_at |> Utils.format_naive_asctime, + "created_at" => user.inserted_at |> Utils.format_naive_asctime(), "favourites_count" => 0, "statuses_count" => 0, "friends_count" => 0, @@ -112,7 +112,7 @@ defmodule Pleroma.Web.TwitterAPI.UserViewTest do "name" => follower.name, "screen_name" => follower.nickname, "description" => HtmlSanitizeEx.strip_tags(follower.bio), - "created_at" => follower.inserted_at |> Utils.format_naive_asctime, + "created_at" => follower.inserted_at |> Utils.format_naive_asctime(), "favourites_count" => 0, "statuses_count" => 0, "friends_count" => 1, @@ -155,7 +155,7 @@ defmodule Pleroma.Web.TwitterAPI.UserViewTest do "name" => user.name, "screen_name" => user.nickname, "description" => HtmlSanitizeEx.strip_tags(user.bio), - "created_at" => user.inserted_at |> Utils.format_naive_asctime, + "created_at" => user.inserted_at |> Utils.format_naive_asctime(), "favourites_count" => 0, "statuses_count" => 0, "friends_count" => 0, |