Fork of Pleroma with site-specific changes and feature branches https://git.pleroma.social/pleroma/pleroma
Você não pode selecionar mais de 25 tópicos Os tópicos devem começar com uma letra ou um número, podem incluir traços ('-') e podem ter até 35 caracteres.

94 linhas
2.7KB

  1. # Pleroma: A lightweight social networking server
  2. # Copyright © 2017-2020 Pleroma Authors <https://pleroma.social/>
  3. # SPDX-License-Identifier: AGPL-3.0-only
  4. defmodule Pleroma.Uploaders.S3Test do
  5. use Pleroma.DataCase
  6. alias Pleroma.Config
  7. alias Pleroma.Uploaders.S3
  8. import Mock
  9. import ExUnit.CaptureLog
  10. setup do
  11. clear_config(Pleroma.Upload,
  12. uploader: Pleroma.Uploaders.S3
  13. )
  14. clear_config(Pleroma.Uploaders.S3,
  15. bucket: "test_bucket",
  16. public_endpoint: "https://s3.amazonaws.com"
  17. )
  18. end
  19. describe "get_file/1" do
  20. test "it returns path to local folder for files" do
  21. assert S3.get_file("test_image.jpg") == {
  22. :ok,
  23. {:url, "https://s3.amazonaws.com/test_bucket/test_image.jpg"}
  24. }
  25. end
  26. test "it returns path without bucket when truncated_namespace set to ''" do
  27. Config.put([Pleroma.Uploaders.S3],
  28. bucket: "test_bucket",
  29. public_endpoint: "https://s3.amazonaws.com",
  30. truncated_namespace: ""
  31. )
  32. assert S3.get_file("test_image.jpg") == {
  33. :ok,
  34. {:url, "https://s3.amazonaws.com/test_image.jpg"}
  35. }
  36. end
  37. test "it returns path with bucket namespace when namespace is set" do
  38. Config.put([Pleroma.Uploaders.S3],
  39. bucket: "test_bucket",
  40. public_endpoint: "https://s3.amazonaws.com",
  41. bucket_namespace: "family"
  42. )
  43. assert S3.get_file("test_image.jpg") == {
  44. :ok,
  45. {:url, "https://s3.amazonaws.com/family:test_bucket/test_image.jpg"}
  46. }
  47. end
  48. end
  49. describe "put_file/1" do
  50. setup do
  51. file_upload = %Pleroma.Upload{
  52. name: "image-tet.jpg",
  53. content_type: "image/jpeg",
  54. path: "test_folder/image-tet.jpg",
  55. tempfile: Path.absname("test/instance_static/add/shortcode.png")
  56. }
  57. [file_upload: file_upload]
  58. end
  59. test "save file", %{file_upload: file_upload} do
  60. with_mock ExAws, request: fn _ -> {:ok, :ok} end do
  61. assert S3.put_file(file_upload) == {:ok, {:file, "test_folder/image-tet.jpg"}}
  62. end
  63. end
  64. test "returns error", %{file_upload: file_upload} do
  65. with_mock ExAws, request: fn _ -> {:error, "S3 Upload failed"} end do
  66. assert capture_log(fn ->
  67. assert S3.put_file(file_upload) == {:error, "S3 Upload failed"}
  68. end) =~ "Elixir.Pleroma.Uploaders.S3: {:error, \"S3 Upload failed\"}"
  69. end
  70. end
  71. end
  72. describe "delete_file/1" do
  73. test_with_mock "deletes file", ExAws, request: fn _req -> {:ok, %{status_code: 204}} end do
  74. assert :ok = S3.delete_file("image.jpg")
  75. assert_called(ExAws.request(:_))
  76. end
  77. end
  78. end