From d0ad13c12e1410e7a11d5a5f7f5b84cad5f77732 Mon Sep 17 00:00:00 2001
From: csaurus <csaurus@mailbox.org>
Date: Mon, 14 May 2018 21:48:06 -0400
Subject: [PATCH] Add direct_note[_activity]_factory and a couple tests

---
 test/support/factory.ex                       | 27 +++++++++++++
 .../mastodon_api_controller_test.exs          | 40 ++++++++++++++-----
 2 files changed, 56 insertions(+), 11 deletions(-)

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 @@ def note_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 @@ test "posting a sensitive status", %{conn: conn} do
   end
 
   test "posting a direct status", %{conn: conn} do
-	user1 = insert(:user)
-	user2 = insert(:user)
-	content = "direct cofe @#{user2.nickname}"
+    user1 = insert(:user)
+    user2 = insert(:user)
+    content = "direct cofe @#{user2.nickname}"
 
-	conn =
-	  conn
-	|> assign(:user, user1)
-	|> post("api/v1/statuses", %{"status" => content,
-								 "visibility" => "direct"})
+    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"]
+    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