+ query = params_to_query(%{exclude_visibilities: ["public", "unlisted", "private"]})
+ conn_res = get(conn, "/api/v1/notifications?" <> query)
+
+ assert [%{"status" => %{"id" => id}}] = json_response_and_validate_schema(conn_res, 200)
+ assert id == direct_activity.id
+
+ query = params_to_query(%{exclude_visibilities: ["public", "unlisted", "direct"]})
+ conn_res = get(conn, "/api/v1/notifications?" <> query)
+
+ assert [%{"status" => %{"id" => id}}] = json_response_and_validate_schema(conn_res, 200)
+ assert id == private_activity.id
+
+ query = params_to_query(%{exclude_visibilities: ["public", "private", "direct"]})
+ conn_res = get(conn, "/api/v1/notifications?" <> query)
+
+ assert [%{"status" => %{"id" => id}}] = json_response_and_validate_schema(conn_res, 200)
+ assert id == unlisted_activity.id
+
+ query = params_to_query(%{exclude_visibilities: ["unlisted", "private", "direct"]})
+ conn_res = get(conn, "/api/v1/notifications?" <> query)
+
+ assert [%{"status" => %{"id" => id}}] = json_response_and_validate_schema(conn_res, 200)
+ assert id == public_activity.id
+ end
+
+ test "filters notifications for Like activities" do
+ user = insert(:user)
+ %{user: other_user, conn: conn} = oauth_access(["read:notifications"])
+
+ {:ok, public_activity} = CommonAPI.post(other_user, %{status: ".", visibility: "public"})
+
+ {:ok, direct_activity} =
+ CommonAPI.post(other_user, %{status: "@#{user.nickname}", visibility: "direct"})
+
+ {:ok, unlisted_activity} =
+ CommonAPI.post(other_user, %{status: ".", visibility: "unlisted"})
+
+ {:ok, private_activity} = CommonAPI.post(other_user, %{status: ".", visibility: "private"})
+
+ {:ok, _} = CommonAPI.favorite(user, public_activity.id)
+ {:ok, _} = CommonAPI.favorite(user, direct_activity.id)
+ {:ok, _} = CommonAPI.favorite(user, unlisted_activity.id)
+ {:ok, _} = CommonAPI.favorite(user, private_activity.id)
+
+ activity_ids =
+ conn
+ |> get("/api/v1/notifications?exclude_visibilities[]=direct")
+ |> json_response_and_validate_schema(200)
+ |> Enum.map(& &1["status"]["id"])
+
+ assert public_activity.id in activity_ids
+ assert unlisted_activity.id in activity_ids
+ assert private_activity.id in activity_ids
+ refute direct_activity.id in activity_ids
+
+ activity_ids =
+ conn
+ |> get("/api/v1/notifications?exclude_visibilities[]=unlisted")
+ |> json_response_and_validate_schema(200)
+ |> Enum.map(& &1["status"]["id"])