Consistent comment style for :ex_aws
[akkoma] / test / pleroma / web / pleroma_api / controllers / emoji_file_controller_test.exs
index 82de86ee31e4031f3e094a2b9a8f04e57f09aa21..6fbdaec7a0bd9aafe048e55c24902e1ddb0159ac 100644 (file)
@@ -5,6 +5,7 @@
 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")