added test
[akkoma] / test / scheduled_activity_test.exs
1 # Pleroma: A lightweight social networking server
2 # Copyright © 2017-2019 Pleroma Authors <https://pleroma.social/>
3 # SPDX-License-Identifier: AGPL-3.0-only
4
5 defmodule Pleroma.ScheduledActivityTest do
6 use Pleroma.DataCase
7 alias Pleroma.DataCase
8 alias Pleroma.ScheduledActivity
9 import Pleroma.Factory
10
11 clear_config([ScheduledActivity, :enabled])
12
13 setup context do
14 DataCase.ensure_local_uploader(context)
15 end
16
17 describe "creation" do
18 test "when daily user limit is exceeded" do
19 user = insert(:user)
20
21 today =
22 NaiveDateTime.utc_now()
23 |> NaiveDateTime.add(:timer.minutes(6), :millisecond)
24 |> NaiveDateTime.to_iso8601()
25
26 attrs = %{params: %{}, scheduled_at: today}
27 {:ok, sa1} = ScheduledActivity.create(user, attrs)
28 {:ok, sa2} = ScheduledActivity.create(user, attrs)
29
30 jobs =
31 Repo.all(from(j in Oban.Job, where: j.queue == "scheduled_activities", select: j.args))
32
33 assert jobs == [%{"activity_id" => sa1.id}, %{"activity_id" => sa2.id}]
34 {:error, changeset} = ScheduledActivity.create(user, attrs)
35 assert changeset.errors == [scheduled_at: {"daily limit exceeded", []}]
36 end
37
38 test "when total user limit is exceeded" do
39 user = insert(:user)
40
41 today =
42 NaiveDateTime.utc_now()
43 |> NaiveDateTime.add(:timer.minutes(6), :millisecond)
44 |> NaiveDateTime.to_iso8601()
45
46 tomorrow =
47 NaiveDateTime.utc_now()
48 |> NaiveDateTime.add(:timer.hours(36), :millisecond)
49 |> NaiveDateTime.to_iso8601()
50
51 {:ok, _} = ScheduledActivity.create(user, %{params: %{}, scheduled_at: today})
52 {:ok, _} = ScheduledActivity.create(user, %{params: %{}, scheduled_at: today})
53 {:ok, _} = ScheduledActivity.create(user, %{params: %{}, scheduled_at: tomorrow})
54 {:error, changeset} = ScheduledActivity.create(user, %{params: %{}, scheduled_at: tomorrow})
55 assert changeset.errors == [scheduled_at: {"total limit exceeded", []}]
56 end
57
58 test "when scheduled_at is earlier than 5 minute from now" do
59 user = insert(:user)
60
61 scheduled_at =
62 NaiveDateTime.utc_now()
63 |> NaiveDateTime.add(:timer.minutes(4), :millisecond)
64 |> NaiveDateTime.to_iso8601()
65
66 attrs = %{params: %{}, scheduled_at: scheduled_at}
67 {:error, changeset} = ScheduledActivity.create(user, attrs)
68 assert changeset.errors == [scheduled_at: {"must be at least 5 minutes from now", []}]
69 end
70 end
71
72 test "creates a status from the scheduled activity" do
73 Pleroma.Config.put([ScheduledActivity, :enabled], true)
74 user = insert(:user)
75
76 naive_datetime =
77 NaiveDateTime.add(
78 NaiveDateTime.utc_now(),
79 -:timer.minutes(2),
80 :millisecond
81 )
82
83 scheduled_activity =
84 insert(
85 :scheduled_activity,
86 scheduled_at: naive_datetime,
87 user: user,
88 params: %{status: "hi"}
89 )
90
91 Pleroma.Workers.ScheduledActivityWorker.perform(
92 %{"activity_id" => scheduled_activity.id},
93 :pid
94 )
95
96 refute Repo.get(ScheduledActivity, scheduled_activity.id)
97 activity = Repo.all(Pleroma.Activity) |> Enum.find(&(&1.actor == user.ap_id))
98 assert Pleroma.Object.normalize(activity).data["content"] == "hi"
99 end
100 end