+ describe "bubble" do
+ test "filtering" do
+ %{conn: conn, user: user} = oauth_access(["read:statuses"])
+ clear_config([:instance, :local_bubble], [])
+ # our endpoint host has a port in it so let's set the AP ID
+ local_user = insert(:user, %{ap_id: "https://localhost/users/user"})
+ remote_user = insert(:user, %{ap_id: "https://example.com/users/remote_user"})
+ {:ok, user, local_user} = User.follow(user, local_user)
+ {:ok, _user, remote_user} = User.follow(user, remote_user)
+
+ {:ok, local_activity} = CommonAPI.post(local_user, %{status: "Status"})
+ remote_activity = create_remote_activity(remote_user)
+
+ # If nothing, only include ours
+ clear_config([:instance, :local_bubble], [])
+
+ one_instance =
+ conn
+ |> get("/api/v1/timelines/bubble")
+ |> json_response_and_validate_schema(200)
+ |> Enum.map(& &1["id"])
+
+ assert local_activity.id in one_instance
+
+ # If we have others, also include theirs
+ clear_config([:instance, :local_bubble], ["example.com"])
+
+ two_instances =
+ conn
+ |> get("/api/v1/timelines/bubble")
+ |> json_response_and_validate_schema(200)
+ |> Enum.map(& &1["id"])
+
+ assert local_activity.id in two_instances
+ assert remote_activity.id in two_instances
+ end
+
+ test "restrict_unauthenticated with bubble timeline", %{conn: conn} do
+ clear_config([:restrict_unauthenticated, :timelines, :bubble], true)
+
+ conn
+ |> get("/api/v1/timelines/bubble")
+ |> json_response_and_validate_schema(:unauthorized)
+
+ clear_config([:restrict_unauthenticated, :timelines, :bubble], false)
+
+ conn
+ |> get("/api/v1/timelines/bubble")
+ |> json_response_and_validate_schema(200)
+ end
+ end
+