From 19516af74e9cc8bacc3edf473eab0f54955368f4 Mon Sep 17 00:00:00 2001
From: Egor Kislitsyn <egor@kislitsyn.com>
Date: Wed, 12 Feb 2020 19:43:07 +0400
Subject: [PATCH] Fix `status.expires_in` validation

---
 lib/pleroma/activity_expiration.ex            |  2 +-
 .../controllers/status_controller_test.exs    | 26 +++++++++++++++++++
 2 files changed, 27 insertions(+), 1 deletion(-)

diff --git a/lib/pleroma/activity_expiration.ex b/lib/pleroma/activity_expiration.ex
index 7ea5c48ca..a58a493f7 100644
--- a/lib/pleroma/activity_expiration.ex
+++ b/lib/pleroma/activity_expiration.ex
@@ -62,6 +62,6 @@ def validate_scheduled_at(changeset) do
   def expires_late_enough?(scheduled_at) do
     now = NaiveDateTime.utc_now()
     diff = NaiveDateTime.diff(scheduled_at, now, :millisecond)
-    diff >= @min_activity_lifetime
+    diff > @min_activity_lifetime
   end
 end
diff --git a/test/web/mastodon_api/controllers/status_controller_test.exs b/test/web/mastodon_api/controllers/status_controller_test.exs
index 83138d7ef..810f371cb 100644
--- a/test/web/mastodon_api/controllers/status_controller_test.exs
+++ b/test/web/mastodon_api/controllers/status_controller_test.exs
@@ -121,6 +121,32 @@ test "posting a status", %{conn: conn} do
                NaiveDateTime.to_iso8601(expiration.scheduled_at)
     end
 
+    test "it fails to create a status if `expires_in` is less or equal than an hour", %{
+      conn: conn
+    } do
+      # 1 hour
+      expires_in = 60 * 60
+
+      assert %{"error" => "Expiry date is too soon"} =
+               conn
+               |> post("api/v1/statuses", %{
+                 "status" => "oolong",
+                 "expires_in" => expires_in
+               })
+               |> json_response(422)
+
+      # 30 minutes
+      expires_in = 30 * 60
+
+      assert %{"error" => "Expiry date is too soon"} =
+               conn
+               |> post("api/v1/statuses", %{
+                 "status" => "oolong",
+                 "expires_in" => expires_in
+               })
+               |> json_response(422)
+    end
+
     test "posting an undefined status with an attachment", %{user: user, conn: conn} do
       file = %Plug.Upload{
         content_type: "image/jpg",