added only_media flag to home timeline
authorAlexander Strizhakov <alex.strizhakov@gmail.com>
Tue, 26 Jan 2021 11:35:31 +0000 (14:35 +0300)
committerAlexander Strizhakov <alex.strizhakov@gmail.com>
Mon, 1 Feb 2021 11:11:11 +0000 (14:11 +0300)
lib/pleroma/web/api_spec/operations/timeline_operation.ex
test/pleroma/web/mastodon_api/controllers/timeline_controller_test.exs

index 2f44cb70d9c2bd88f7d3fb72d11c5d19b5fdf7a4..7b2fe48a5a4d11a98b513a397f1c151870261f37 100644 (file)
@@ -26,6 +26,7 @@ defmodule Pleroma.Web.ApiSpec.TimelineOperation do
       parameters: [
         local_param(),
         remote_param(),
+        only_media_param(),
         with_muted_param(),
         exclude_visibilities_param(),
         reply_visibility_param() | pagination_params()
index 30118f74eaa0f53a3a22ee7d2f1d73201f221e05..d8cc3c9b92140a0987beb680ac3ecb44c0ea1472 100644 (file)
@@ -166,6 +166,66 @@ defmodule Pleroma.Web.MastodonAPI.TimelineControllerTest do
 
       assert resp4 == []
     end
+
+    test "only_media flag", %{conn: conn, user: user} do
+      other = insert(:user)
+      {:ok, _, other} = User.follow(user, other)
+
+      without_media =
+        insert(:note_activity,
+          user: other,
+          recipients: ["https://www.w3.org/ns/activitystreams#Public", User.ap_followers(other)]
+        )
+
+      obj =
+        insert(:note, %{
+          data: %{
+            "attachment" => [
+              %{
+                "mediaType" => "image/jpeg",
+                "name" => "an_image.jpg",
+                "type" => "Document",
+                "url" => [
+                  %{
+                    "href" =>
+                      "http://localhost:4001/media/8270697e-104f-4a54-a7c1-514bb6713f2c/some_image.jpg",
+                    "mediaType" => "image/jpeg",
+                    "type" => "Link"
+                  }
+                ]
+              }
+            ]
+          },
+          user: other
+        })
+
+      with_media =
+        insert(:note_activity, %{
+          note: obj,
+          recipients: ["https://www.w3.org/ns/activitystreams#Public", User.ap_followers(other)],
+          user: other
+        })
+
+      resp1 =
+        conn
+        |> get("/api/v1/timelines/home")
+        |> json_response_and_validate_schema(200)
+
+      without_filter_ids = Enum.map(resp1, & &1["id"])
+
+      assert without_media.id in without_filter_ids
+      assert with_media.id in without_filter_ids
+
+      resp2 =
+        conn
+        |> get("/api/v1/timelines/home?only_media=true")
+        |> json_response_and_validate_schema(200)
+
+      only_media_ids = Enum.map(resp2, & &1["id"])
+
+      refute without_media.id in only_media_ids
+      assert with_media.id in only_media_ids
+    end
   end
 
   describe "public" do