diff --git a/lib/pleroma/web/api_spec/operations/pleroma_account_operation.ex b/lib/pleroma/web/api_spec/operations/pleroma_account_operation.ex index 14f0f41302..6f8c8904c5 100644 --- a/lib/pleroma/web/api_spec/operations/pleroma_account_operation.ex +++ b/lib/pleroma/web/api_spec/operations/pleroma_account_operation.ex @@ -9,6 +9,7 @@ defmodule Pleroma.Web.ApiSpec.PleromaAccountOperation do alias Pleroma.Web.ApiSpec.Schemas.AccountRelationship alias Pleroma.Web.ApiSpec.Schemas.ApiError alias Pleroma.Web.ApiSpec.Schemas.FlakeID + alias Pleroma.Web.ApiSpec.Schemas.VisibilityScope alias Pleroma.Web.ApiSpec.StatusOperation import Pleroma.Web.ApiSpec.Helpers diff --git a/lib/pleroma/web/pleroma_api/views/event_view.ex b/lib/pleroma/web/pleroma_api/views/event_view.ex index 9eb7a90d94..f47b728cfd 100644 --- a/lib/pleroma/web/pleroma_api/views/event_view.ex +++ b/lib/pleroma/web/pleroma_api/views/event_view.ex @@ -33,7 +33,7 @@ defmodule Pleroma.Web.PleromaAPI.EventView do } end - def render("index.json", %{activities: activities}) do + def render("index.ics", %{activities: activities}) do %ICalendar{events: [activities |> Enum.map(&activity_to_ics/1)]} end diff --git a/test/pleroma/web/pleroma_api/controllers/account_controller_test.exs b/test/pleroma/web/pleroma_api/controllers/account_controller_test.exs index 38a928f30e..4b26783da5 100644 --- a/test/pleroma/web/pleroma_api/controllers/account_controller_test.exs +++ b/test/pleroma/web/pleroma_api/controllers/account_controller_test.exs @@ -334,4 +334,50 @@ defmodule Pleroma.Web.PleromaAPI.AccountControllerTest do |> json_response_and_validate_schema(:ok) end end + + describe "account events ics feed" do + test "returns ics of given user's visible events" do + %{user: user, conn: conn} = oauth_access(["read:statuses"]) + other_user = insert(:user) + + {:ok, _activity} = + CommonAPI.event(other_user, %{ + name: "test event 1", + status: "", + start_time: DateTime.from_iso8601("2023-01-01T01:00:00.000Z") |> elem(1) + }) + + {:ok, _activity} = + CommonAPI.event(user, %{ + name: "test event 2", + status: "", + start_time: DateTime.from_iso8601("2023-01-01T01:00:00.000Z") |> elem(1) + }) + + {:ok, _activity} = + CommonAPI.event(other_user, %{ + name: "test event 3", + status: "", + start_time: DateTime.from_iso8601("2023-01-01T01:00:00.000Z") |> elem(1) + }) + + {:ok, _activity} = + CommonAPI.event(other_user, %{ + name: "test event 4", + status: "", + start_time: DateTime.from_iso8601("2023-01-01T01:00:00.000Z") |> elem(1), + visibility: "private" + }) + + conn = get(conn, "/api/v1/pleroma/accounts/#{other_user.id}/events_ics") + + assert conn.status == 200 + + assert conn.resp_body =~ "BEGIN:VCALENDAR" + assert conn.resp_body =~ "SUMMARY:test event 1" + assert conn.resp_body =~ "SUMMARY:test event 3" + refute conn.resp_body =~ "SUMMARY:test event 2" + refute conn.resp_body =~ "SUMMARY:test event 4" + end + end end