diff options
Diffstat (limited to 'test/web/twitter_api')
-rw-r--r-- | test/web/twitter_api/twitter_api_controller_test.exs | 52 | ||||
-rw-r--r-- | test/web/twitter_api/views/activity_view_test.exs | 33 | ||||
-rw-r--r-- | test/web/twitter_api/views/notification_view_test.exs | 108 |
3 files changed, 180 insertions, 13 deletions
diff --git a/test/web/twitter_api/twitter_api_controller_test.exs b/test/web/twitter_api/twitter_api_controller_test.exs index 5abdc2e0e..406dace1c 100644 --- a/test/web/twitter_api/twitter_api_controller_test.exs +++ b/test/web/twitter_api/twitter_api_controller_test.exs @@ -2,9 +2,10 @@ defmodule Pleroma.Web.TwitterAPI.ControllerTest do use Pleroma.Web.ConnCase alias Pleroma.Web.TwitterAPI.Representers.ActivityRepresenter alias Pleroma.Builders.{ActivityBuilder, UserBuilder} - alias Pleroma.{Repo, Activity, User, Object} + alias Pleroma.{Repo, Activity, User, Object, Notification} alias Pleroma.Web.ActivityPub.ActivityPub alias Pleroma.Web.TwitterAPI.UserView + alias Pleroma.Web.TwitterAPI.NotificationView alias Pleroma.Web.CommonAPI alias Pleroma.Web.TwitterAPI.TwitterAPI @@ -160,15 +161,13 @@ defmodule Pleroma.Web.TwitterAPI.ControllerTest do describe "GET /statusnet/conversation/:id.json" do test "returns the statuses in the conversation", %{conn: conn} do {:ok, _user} = UserBuilder.insert() - {:ok, _activity} = ActivityBuilder.insert(%{"type" => "Create", "context" => "2hu"}) + {:ok, activity} = ActivityBuilder.insert(%{"type" => "Create", "context" => "2hu"}) {:ok, _activity_two} = ActivityBuilder.insert(%{"type" => "Create", "context" => "2hu"}) {:ok, _activity_three} = ActivityBuilder.insert(%{"type" => "Create", "context" => "3hu"}) - {:ok, object} = Object.context_mapping("2hu") |> Repo.insert() - conn = conn - |> get("/api/statusnet/conversation/#{object.id}.json") + |> get("/api/statusnet/conversation/#{activity.data["context_id"]}.json") response = json_response(conn, 200) @@ -249,6 +248,35 @@ defmodule Pleroma.Web.TwitterAPI.ControllerTest do end end + describe "GET /api/qvitter/statuses/notifications.json" do + setup [:valid_user] + + test "without valid credentials", %{conn: conn} do + conn = get(conn, "/api/qvitter/statuses/notifications.json") + assert json_response(conn, 403) == %{"error" => "Invalid credentials."} + end + + test "with credentials", %{conn: conn, user: current_user} do + {:ok, activity} = + ActivityBuilder.insert(%{"to" => [current_user.ap_id]}, %{user: current_user}) + + conn = + conn + |> with_credentials(current_user.nickname, "test") + |> get("/api/qvitter/statuses/notifications.json") + + response = json_response(conn, 200) + + assert length(response) == 1 + + assert response == + NotificationView.render("notification.json", %{ + notifications: Notification.for_user(current_user), + for: current_user + }) + end + end + describe "GET /statuses/user_timeline.json" do setup [:valid_user] @@ -600,8 +628,9 @@ defmodule Pleroma.Web.TwitterAPI.ControllerTest do |> assign(:user, user) |> get("/api/statuses/followers") - assert json_response(conn, 200) == - UserView.render("index.json", %{users: [follower_one, follower_two], for: user}) + expected = UserView.render("index.json", %{users: [follower_one, follower_two], for: user}) + result = json_response(conn, 200) + assert Enum.sort(expected) == Enum.sort(result) end end @@ -620,12 +649,9 @@ defmodule Pleroma.Web.TwitterAPI.ControllerTest do |> assign(:user, user) |> get("/api/statuses/friends") - assert MapSet.equal?( - MapSet.new(json_response(conn, 200)), - MapSet.new( - UserView.render("index.json", %{users: [followed_one, followed_two], for: user}) - ) - ) + expected = UserView.render("index.json", %{users: [followed_one, followed_two], for: user}) + result = json_response(conn, 200) + assert Enum.sort(expected) == Enum.sort(result) end test "it returns a given user's friends with user_id", %{conn: conn} do diff --git a/test/web/twitter_api/views/activity_view_test.exs b/test/web/twitter_api/views/activity_view_test.exs index cb8f60fcf..7f2017d3c 100644 --- a/test/web/twitter_api/views/activity_view_test.exs +++ b/test/web/twitter_api/views/activity_view_test.exs @@ -10,7 +10,9 @@ defmodule Pleroma.Web.TwitterAPI.ActivityViewTest do 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) @@ -51,6 +53,37 @@ defmodule Pleroma.Web.TwitterAPI.ActivityViewTest do 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"}) 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 |