Merge branch 'fix/2498-expires_in-scheduled-posts' into 'develop'

expires_in in scheduled status params

Closes #2498

See merge request pleroma/pleroma!3315
This commit is contained in:
feld 2021-02-26 16:49:11 +00:00
commit 840686ecd5
6 changed files with 40 additions and 4 deletions

View file

@ -74,6 +74,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
- Mastodon API: Home, public, hashtag & list timelines accept `only_media`, `remote` & `local` parameters for filtration. - Mastodon API: Home, public, hashtag & list timelines accept `only_media`, `remote` & `local` parameters for filtration.
- Mastodon API: `/api/v1/accounts/:id` & `/api/v1/mutes` endpoints accept `with_relationships` parameter and return filled `pleroma.relationship` field. - Mastodon API: `/api/v1/accounts/:id` & `/api/v1/mutes` endpoints accept `with_relationships` parameter and return filled `pleroma.relationship` field.
- Mastodon API: Endpoint to remove a conversation (`DELETE /api/v1/conversations/:id`). - Mastodon API: Endpoint to remove a conversation (`DELETE /api/v1/conversations/:id`).
- Mastodon API: `expires_in` in the scheduled post `params` field on `/api/v1/statuses` and `/api/v1/scheduled_statuses/:id` endpoints.
</details> </details>
### Fixed ### Fixed

View file

@ -39,6 +39,12 @@ Has these additional fields under the `pleroma` object:
- `emoji_reactions`: A list with emoji / reaction maps. The format is `{name: "☕", count: 1, me: true}`. Contains no information about the reacting users, for that use the `/statuses/:id/reactions` endpoint. - `emoji_reactions`: A list with emoji / reaction maps. The format is `{name: "☕", count: 1, me: true}`. Contains no information about the reacting users, for that use the `/statuses/:id/reactions` endpoint.
- `parent_visible`: If the parent of this post is visible to the user or not. - `parent_visible`: If the parent of this post is visible to the user or not.
## Scheduled statuses
Has these additional fields in `params`:
- `expires_in`: the number of seconds the posted activity should expire in.
## Media Attachments ## Media Attachments
Has these additional fields under the `pleroma` object: Has these additional fields under the `pleroma` object:

View file

@ -30,7 +30,8 @@ defmodule Pleroma.Web.ApiSpec.Schemas.ScheduledStatus do
visibility: %Schema{allOf: [VisibilityScope], nullable: true}, visibility: %Schema{allOf: [VisibilityScope], nullable: true},
scheduled_at: %Schema{type: :string, format: :"date-time", nullable: true}, scheduled_at: %Schema{type: :string, format: :"date-time", nullable: true},
poll: StatusOperation.poll_params(), poll: StatusOperation.poll_params(),
in_reply_to_id: %Schema{type: :string, nullable: true} in_reply_to_id: %Schema{type: :string, nullable: true},
expires_in: %Schema{type: :integer, nullable: true}
} }
} }
}, },
@ -46,7 +47,8 @@ defmodule Pleroma.Web.ApiSpec.Schemas.ScheduledStatus do
scheduled_at: nil, scheduled_at: nil,
poll: nil, poll: nil,
idempotency: nil, idempotency: nil,
in_reply_to_id: nil in_reply_to_id: nil,
expires_in: nil
}, },
media_attachments: [Attachment.schema().example] media_attachments: [Attachment.schema().example]
} }

View file

@ -37,7 +37,8 @@ defp status_params(params) do
visibility: params["visibility"], visibility: params["visibility"],
scheduled_at: params["scheduled_at"], scheduled_at: params["scheduled_at"],
poll: params["poll"], poll: params["poll"],
in_reply_to_id: params["in_reply_to_id"] in_reply_to_id: params["in_reply_to_id"],
expires_in: params["expires_in"]
} }
|> Pleroma.Maps.put_if_present(:media_ids, params["media_ids"]) |> Pleroma.Maps.put_if_present(:media_ids, params["media_ids"])
end end

View file

@ -383,6 +383,31 @@ test "creates a scheduled activity", %{conn: conn} do
assert [] == Repo.all(Activity) assert [] == Repo.all(Activity)
end end
test "with expiration" do
%{conn: conn} = oauth_access(["write:statuses", "read:statuses"])
scheduled_at =
NaiveDateTime.add(NaiveDateTime.utc_now(), :timer.minutes(6), :millisecond)
|> NaiveDateTime.to_iso8601()
|> Kernel.<>("Z")
assert %{"id" => status_id, "params" => %{"expires_in" => 300}} =
conn
|> put_req_header("content-type", "application/json")
|> post("/api/v1/statuses", %{
"status" => "scheduled",
"scheduled_at" => scheduled_at,
"expires_in" => 300
})
|> json_response_and_validate_schema(200)
assert %{"id" => ^status_id, "params" => %{"expires_in" => 300}} =
conn
|> put_req_header("content-type", "application/json")
|> get("/api/v1/scheduled_statuses/#{status_id}")
|> json_response_and_validate_schema(200)
end
test "ignores nil values", %{conn: conn} do test "ignores nil values", %{conn: conn} do
conn = conn =
conn conn

View file

@ -58,7 +58,8 @@ test "A scheduled activity with a media attachment" do
sensitive: true, sensitive: true,
spoiler_text: "spoiler", spoiler_text: "spoiler",
text: "hi", text: "hi",
visibility: "unlisted" visibility: "unlisted",
expires_in: nil
}, },
scheduled_at: Utils.to_masto_date(scheduled_activity.scheduled_at) scheduled_at: Utils.to_masto_date(scheduled_activity.scheduled_at)
} }