Merge branch 'develop' into fix/csp-for-captcha
[akkoma] / test / upload_test.exs
index f7b1893ad965ef6b77f6502beb98a56a848a8c0b..b06b54487e152dc397e3127930e481cefbaedace 100644 (file)
@@ -1,10 +1,12 @@
 # Pleroma: A lightweight social networking server
-# Copyright © 2017-2018 Pleroma Authors <https://pleroma.social/>
+# Copyright © 2017-2020 Pleroma Authors <https://pleroma.social/>
 # SPDX-License-Identifier: AGPL-3.0-only
 
 defmodule Pleroma.UploadTest do
   use Pleroma.DataCase
 
+  import ExUnit.CaptureLog
+
   alias Pleroma.Upload
   alias Pleroma.Uploaders.Uploader
 
@@ -52,6 +54,7 @@ defmodule Pleroma.UploadTest do
                 %{
                   "name" => "image.jpg",
                   "type" => "Document",
+                  "mediaType" => "image/jpeg",
                   "url" => [
                     %{
                       "href" => "http://localhost:4001/media/post-process-file.jpg",
@@ -77,8 +80,12 @@ defmodule Pleroma.UploadTest do
 
     test "it returns error" do
       File.cp!("test/fixtures/image.jpg", "test/fixtures/image_tmp.jpg")
-      assert Upload.store(@upload_file) == {:error, "Errors"}
-      Task.await(Agent.get(TestUploaderError, fn task_pid -> task_pid end))
+
+      assert capture_log(fn ->
+               assert Upload.store(@upload_file) == {:error, "Errors"}
+               Task.await(Agent.get(TestUploaderError, fn task_pid -> task_pid end))
+             end) =~
+               "[error] Elixir.Pleroma.Upload store (using Pleroma.UploadTest.TestUploaderError) failed: \"Errors\""
     end
   end
 
@@ -89,14 +96,19 @@ defmodule Pleroma.UploadTest do
 
     test "it returns error" do
       File.cp!("test/fixtures/image.jpg", "test/fixtures/image_tmp.jpg")
-      assert Upload.store(@upload_file) == {:error, "Uploader callback timeout"}
+
+      assert capture_log(fn ->
+               assert Upload.store(@upload_file) == {:error, "Uploader callback timeout"}
+             end) =~
+               "[error] Elixir.Pleroma.Upload store (using Pleroma.UploadTest.TestUploader) failed: \"Uploader callback timeout\""
     end
   end
 
   describe "Storing a file with the Local uploader" do
     setup [:ensure_local_uploader]
 
-    test "returns a media url" do
+    test "does not allow descriptions longer than the post limit" do
+      clear_config([:instance, :description_limit], 2)
       File.cp!("test/fixtures/image.jpg", "test/fixtures/image_tmp.jpg")
 
       file = %Plug.Upload{
@@ -105,16 +117,10 @@ defmodule Pleroma.UploadTest do
         filename: "image.jpg"
       }
 
-      {:ok, data} = Upload.store(file)
-
-      assert %{"url" => [%{"href" => url}]} = data
-
-      assert String.starts_with?(url, Pleroma.Web.base_url() <> "/media/")
+      {:error, :description_too_long} = Upload.store(file, description: "123")
     end
 
-    test "returns a media url with configured base_url" do
-      base_url = "https://cache.pleroma.social"
-
+    test "returns a media url" do
       File.cp!("test/fixtures/image.jpg", "test/fixtures/image_tmp.jpg")
 
       file = %Plug.Upload{
@@ -123,11 +129,11 @@ defmodule Pleroma.UploadTest do
         filename: "image.jpg"
       }
 
-      {:ok, data} = Upload.store(file, base_url: base_url)
+      {:ok, data} = Upload.store(file)
 
       assert %{"url" => [%{"href" => url}]} = data
 
-      assert String.starts_with?(url, base_url <> "/media/")
+      assert String.starts_with?(url, Pleroma.Web.base_url() <> "/media/")
     end
 
     test "copies the file to the configured folder with deduping" do
@@ -256,4 +262,26 @@ defmodule Pleroma.UploadTest do
                "%3A%3F%23%5B%5D%40%21%24%26%5C%27%28%29%2A%2B%2C%3B%3D.jpg"
     end
   end
+
+  describe "Setting a custom base_url for uploaded media" do
+    setup do: clear_config([Pleroma.Upload, :base_url], "https://cache.pleroma.social")
+
+    test "returns a media url with configured base_url" do
+      base_url = Pleroma.Config.get([Pleroma.Upload, :base_url])
+
+      File.cp!("test/fixtures/image.jpg", "test/fixtures/image_tmp.jpg")
+
+      file = %Plug.Upload{
+        content_type: "image/jpg",
+        path: Path.absname("test/fixtures/image_tmp.jpg"),
+        filename: "image.jpg"
+      }
+
+      {:ok, data} = Upload.store(file, base_url: base_url)
+
+      assert %{"url" => [%{"href" => url}]} = data
+
+      refute String.starts_with?(url, base_url <> "/media/")
+    end
+  end
 end