total rebase
[anni] / test / pleroma / web / mastodon_api / views / scheduled_activity_view_test.exs
1 # Pleroma: A lightweight social networking server
2 # Copyright © 2017-2022 Pleroma Authors <https://pleroma.social/>
3 # SPDX-License-Identifier: AGPL-3.0-only
4
5 defmodule Pleroma.Web.MastodonAPI.ScheduledActivityViewTest do
6   use Pleroma.DataCase, async: true
7
8   alias Pleroma.ScheduledActivity
9   alias Pleroma.UnstubbedConfigMock, as: ConfigMock
10   alias Pleroma.Web.ActivityPub.ActivityPub
11   alias Pleroma.Web.CommonAPI
12   alias Pleroma.Web.CommonAPI.Utils
13   alias Pleroma.Web.MastodonAPI.ScheduledActivityView
14   alias Pleroma.Web.MastodonAPI.StatusView
15
16   import Mox
17   import Pleroma.Factory
18
19   test "A scheduled activity with a media attachment" do
20     user = insert(:user)
21     {:ok, activity} = CommonAPI.post(user, %{status: "hi"})
22
23     scheduled_at =
24       NaiveDateTime.utc_now()
25       |> NaiveDateTime.add(:timer.minutes(10), :millisecond)
26       |> NaiveDateTime.to_iso8601()
27
28     file = %Plug.Upload{
29       content_type: "image/jpeg",
30       path: Path.absname("test/fixtures/image.jpg"),
31       filename: "an_image.jpg"
32     }
33
34     ConfigMock
35     |> stub_with(Pleroma.Test.StaticConfig)
36
37     {:ok, upload} = ActivityPub.upload(file, actor: user.ap_id)
38
39     attrs = %{
40       params: %{
41         "media_ids" => [upload.id],
42         "status" => "hi",
43         "sensitive" => true,
44         "spoiler_text" => "spoiler",
45         "visibility" => "unlisted",
46         "in_reply_to_id" => to_string(activity.id)
47       },
48       scheduled_at: scheduled_at
49     }
50
51     {:ok, scheduled_activity} = ScheduledActivity.create(user, attrs)
52     result = ScheduledActivityView.render("show.json", %{scheduled_activity: scheduled_activity})
53
54     expected = %{
55       id: to_string(scheduled_activity.id),
56       media_attachments:
57         %{media_ids: [upload.id]}
58         |> Utils.attachments_from_ids(user)
59         |> Enum.map(&StatusView.render("attachment.json", %{attachment: &1})),
60       params: %{
61         in_reply_to_id: to_string(activity.id),
62         media_ids: [upload.id],
63         poll: nil,
64         scheduled_at: nil,
65         sensitive: true,
66         spoiler_text: "spoiler",
67         text: "hi",
68         visibility: "unlisted",
69         expires_in: nil
70       },
71       scheduled_at: Utils.to_masto_date(scheduled_activity.scheduled_at)
72     }
73
74     assert expected == result
75   end
76 end