1 # Pleroma: A lightweight social networking server
2 # Copyright © 2017-2019 Pleroma Authors <https://pleroma.social/>
3 # SPDX-License-Identifier: AGPL-3.0-only
5 defmodule Pleroma.ScheduledActivityTest do
8 alias Pleroma.ScheduledActivity
11 clear_config([ScheduledActivity, :enabled])
14 DataCase.ensure_local_uploader(context)
17 describe "creation" do
18 test "when daily user limit is exceeded" do
22 NaiveDateTime.utc_now()
23 |> NaiveDateTime.add(:timer.minutes(6), :millisecond)
24 |> NaiveDateTime.to_iso8601()
26 attrs = %{params: %{}, scheduled_at: today}
27 {:ok, _} = ScheduledActivity.create(user, attrs)
28 {:ok, _} = ScheduledActivity.create(user, attrs)
30 {:error, changeset} = ScheduledActivity.create(user, attrs)
31 assert changeset.errors == [scheduled_at: {"daily limit exceeded", []}]
34 test "when total user limit is exceeded" do
38 NaiveDateTime.utc_now()
39 |> NaiveDateTime.add(:timer.minutes(6), :millisecond)
40 |> NaiveDateTime.to_iso8601()
43 NaiveDateTime.utc_now()
44 |> NaiveDateTime.add(:timer.hours(36), :millisecond)
45 |> NaiveDateTime.to_iso8601()
47 {:ok, _} = ScheduledActivity.create(user, %{params: %{}, scheduled_at: today})
48 {:ok, _} = ScheduledActivity.create(user, %{params: %{}, scheduled_at: today})
49 {:ok, _} = ScheduledActivity.create(user, %{params: %{}, scheduled_at: tomorrow})
50 {:error, changeset} = ScheduledActivity.create(user, %{params: %{}, scheduled_at: tomorrow})
51 assert changeset.errors == [scheduled_at: {"total limit exceeded", []}]
54 test "when scheduled_at is earlier than 5 minute from now" do
58 NaiveDateTime.utc_now()
59 |> NaiveDateTime.add(:timer.minutes(4), :millisecond)
60 |> NaiveDateTime.to_iso8601()
62 attrs = %{params: %{}, scheduled_at: scheduled_at}
63 {:error, changeset} = ScheduledActivity.create(user, attrs)
64 assert changeset.errors == [scheduled_at: {"must be at least 5 minutes from now", []}]
68 test "creates a status from the scheduled activity" do
69 Pleroma.Config.put([ScheduledActivity, :enabled], true)
74 NaiveDateTime.utc_now(),
82 scheduled_at: naive_datetime,
84 params: %{status: "hi"}
87 Pleroma.Workers.ScheduledActivityWorker.perform(
88 %{"activity_id" => scheduled_activity.id},
92 refute Repo.get(ScheduledActivity, scheduled_activity.id)
93 activity = Repo.all(Pleroma.Activity) |> Enum.find(&(&1.actor == user.ap_id))
94 assert Pleroma.Object.normalize(activity).data["content"] == "hi"