From 987a52cf6f987e5178194615637753c9619e2e5d Mon Sep 17 00:00:00 2001 From: csaurus Date: Sun, 13 May 2018 21:21:42 -0400 Subject: Post direct status test --- test/web/mastodon_api/mastodon_api_controller_test.exs | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) (limited to 'test') diff --git a/test/web/mastodon_api/mastodon_api_controller_test.exs b/test/web/mastodon_api/mastodon_api_controller_test.exs index 883ebc61e..71a6eed8d 100644 --- a/test/web/mastodon_api/mastodon_api_controller_test.exs +++ b/test/web/mastodon_api/mastodon_api_controller_test.exs @@ -124,6 +124,22 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIControllerTest do assert Repo.get(Activity, id) end + test "posting a direct status", %{conn: conn} do + user1 = insert(:user) + user2 = insert(:user) + content = "direct cofe @#{user2.nickname}" + + conn = + conn + |> assign(:user, user1) + |> post("api/v1/statuses", %{"status" => content, + "visibility" => "direct"}) + + assert %{"content" => content, "id" => id, "visibility" => "direct"} = json_response(conn, 200) + assert activity = Repo.get(Activity, id) + assert user2.follower_address not in activity.data["to"] + end + test "replying to a status", %{conn: conn} do user = insert(:user) -- cgit v1.2.3 From d0ad13c12e1410e7a11d5a5f7f5b84cad5f77732 Mon Sep 17 00:00:00 2001 From: csaurus Date: Mon, 14 May 2018 21:48:06 -0400 Subject: Add direct_note[_activity]_factory and a couple tests --- test/support/factory.ex | 27 +++++++++++++ .../mastodon_api/mastodon_api_controller_test.exs | 44 +++++++++++++++------- 2 files changed, 58 insertions(+), 13 deletions(-) (limited to 'test') diff --git a/test/support/factory.ex b/test/support/factory.ex index 8e21e2562..47626cb3e 100644 --- a/test/support/factory.ex +++ b/test/support/factory.ex @@ -45,6 +45,33 @@ defmodule Pleroma.Factory do } end + def direct_note_factory do + user2 = insert(:user) + + %Pleroma.Object{data: data} = note_factory() + %Pleroma.Object{data: Map.merge(data, %{"to" => [user2.ap_id]})} + end + + def direct_note_activity_factory do + dm = insert(:direct_note) + + data = %{ + "id" => Pleroma.Web.ActivityPub.Utils.generate_activity_id(), + "type" => "Create", + "actor" => dm.data["actor"], + "to" => dm.data["to"], + "object" => dm.data, + "published" => DateTime.utc_now() |> DateTime.to_iso8601(), + "context" => dm.data["context"] + } + + %Pleroma.Activity{ + data: data, + actor: data["actor"], + recipients: data["to"] + } + end + def note_activity_factory do note = insert(:note) diff --git a/test/web/mastodon_api/mastodon_api_controller_test.exs b/test/web/mastodon_api/mastodon_api_controller_test.exs index 71a6eed8d..94131dcb3 100644 --- a/test/web/mastodon_api/mastodon_api_controller_test.exs +++ b/test/web/mastodon_api/mastodon_api_controller_test.exs @@ -125,19 +125,37 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIControllerTest do end test "posting a direct status", %{conn: conn} do - user1 = insert(:user) - user2 = insert(:user) - content = "direct cofe @#{user2.nickname}" - - conn = - conn - |> assign(:user, user1) - |> post("api/v1/statuses", %{"status" => content, - "visibility" => "direct"}) - - assert %{"content" => content, "id" => id, "visibility" => "direct"} = json_response(conn, 200) - assert activity = Repo.get(Activity, id) - assert user2.follower_address not in activity.data["to"] + user1 = insert(:user) + user2 = insert(:user) + content = "direct cofe @#{user2.nickname}" + + conn = + conn + |> assign(:user, user1) + |> post("api/v1/statuses", %{"status" => content, "visibility" => "direct"}) + + assert %{"id" => id, "visibility" => "direct"} = json_response(conn, 200) + assert activity = Repo.get(Activity, id) + assert user2.follower_address not in activity.data["to"] + end + + test "direct timeline", %{conn: conn} do + dm = insert(:direct_note_activity) + reg_note = insert(:note_activity) + + recipient = User.get_by_ap_id(hd(dm.recipients)) + + conn = + conn + |> assign(:user, recipient) + |> get("api/v1/timelines/direct") + + resp = json_response(conn, 200) + first_status = hd(resp) + + assert length(resp) == 1 + assert %{"visibility" => "direct"} = first_status + assert first_status["url"] != reg_note.data["id"] end test "replying to a status", %{conn: conn} do -- cgit v1.2.3 From 841ee8e3e4d31d4236a022d46fe18f7751605c74 Mon Sep 17 00:00:00 2001 From: lain Date: Sat, 26 May 2018 16:25:32 +0200 Subject: Simplify DM query. Should also use indexes better. --- .../mastodon_api/mastodon_api_controller_test.exs | 43 ++++++++++++++++------ 1 file changed, 32 insertions(+), 11 deletions(-) (limited to 'test') diff --git a/test/web/mastodon_api/mastodon_api_controller_test.exs b/test/web/mastodon_api/mastodon_api_controller_test.exs index 553581be4..2abcf0dfe 100644 --- a/test/web/mastodon_api/mastodon_api_controller_test.exs +++ b/test/web/mastodon_api/mastodon_api_controller_test.exs @@ -136,26 +136,47 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIControllerTest do assert %{"id" => id, "visibility" => "direct"} = json_response(conn, 200) assert activity = Repo.get(Activity, id) - assert user2.follower_address not in activity.data["to"] + assert activity.recipients == [user2.ap_id] + assert activity.data["to"] == [user2.ap_id] + assert activity.data["cc"] == [] end test "direct timeline", %{conn: conn} do - dm = insert(:direct_note_activity) - reg_note = insert(:note_activity) + user_one = insert(:user) + user_two = insert(:user) - recipient = User.get_by_ap_id(hd(dm.recipients)) + {:ok, user_two} = User.follow(user_two, user_one) - conn = + {:ok, direct} = + CommonAPI.post(user_one, %{ + "status" => "Hi @#{user_two.nickname}!", + "visibility" => "direct" + }) + + {:ok, _follower_only} = + CommonAPI.post(user_one, %{ + "status" => "Hi @#{user_two.nickname}!", + "visibility" => "private" + }) + + # Only direct should be visible here + res_conn = conn - |> assign(:user, recipient) + |> assign(:user, user_two) |> get("api/v1/timelines/direct") - resp = json_response(conn, 200) - first_status = hd(resp) + [status] = json_response(res_conn, 200) + + assert %{"visibility" => "direct"} = status + assert status["url"] != direct.data["id"] + + # Both should be visible here + res_conn = + conn + |> assign(:user, user_two) + |> get("api/v1/timelines/home") - assert length(resp) == 1 - assert %{"visibility" => "direct"} = first_status - assert first_status["url"] != reg_note.data["id"] + [_s1, _s2] = json_response(res_conn, 200) end test "replying to a status", %{conn: conn} do -- cgit v1.2.3