Merge branch 'chores/bump-copyright' into 'develop'
[akkoma] / test / pleroma / web / pleroma_api / controllers / emoji_file_controller_test.exs
index 82de86ee31e4031f3e094a2b9a8f04e57f09aa21..8f0da00c016fc38495f43b56fe0801f767575323 100644 (file)
@@ -1,10 +1,11 @@
 # Pleroma: A lightweight social networking server
-# Copyright © 2017-2020 Pleroma Authors <https://pleroma.social/>
+# Copyright © 2017-2021 Pleroma Authors <https://pleroma.social/>
 # SPDX-License-Identifier: AGPL-3.0-only
 
 defmodule Pleroma.Web.PleromaAPI.EmojiFileControllerTest do
   use Pleroma.Web.ConnCase
 
+  import Mock
   import Tesla.Mock
   import Pleroma.Factory
 
@@ -200,6 +201,31 @@ defmodule Pleroma.Web.PleromaAPI.EmojiFileControllerTest do
              }
     end
 
+    test "returns an error on add file when file system is not writable", %{
+      admin_conn: admin_conn
+    } do
+      pack_file = Path.join([@emoji_path, "not_loaded", "pack.json"])
+
+      with_mocks([
+        {File, [:passthrough], [stat: fn ^pack_file -> {:error, :eacces} end]}
+      ]) do
+        assert admin_conn
+               |> put_req_header("content-type", "multipart/form-data")
+               |> post("/api/pleroma/emoji/packs/files?name=not_loaded", %{
+                 shortcode: "blank3",
+                 filename: "dir/blank.png",
+                 file: %Plug.Upload{
+                   filename: "blank.png",
+                   path: "#{@emoji_path}/test_pack/blank.png"
+                 }
+               })
+               |> json_response_and_validate_schema(500) == %{
+                 "error" =>
+                   "Unexpected error occurred while adding file to pack. (POSIX error: Permission denied)"
+               }
+      end
+    end
+
     test "remove file with not loaded pack", %{admin_conn: admin_conn} do
       assert admin_conn
              |> delete("/api/pleroma/emoji/packs/files?name=not_loaded&shortcode=blank3")