logo

pleroma

My custom branche(s) on git.pleroma.social/pleroma/pleroma git clone https://hacktivis.me/git/pleroma.git

s3_test.exs (3381B)


  1. # Pleroma: A lightweight social networking server
  2. # Copyright © 2017-2022 Pleroma Authors <https://pleroma.social/>
  3. # SPDX-License-Identifier: AGPL-3.0-only
  4. defmodule Pleroma.Uploaders.S3Test do
  5. use Pleroma.DataCase, async: true
  6. alias Pleroma.UnstubbedConfigMock, as: ConfigMock
  7. alias Pleroma.Uploaders.S3
  8. alias Pleroma.Uploaders.S3.ExAwsMock
  9. import Mox
  10. import ExUnit.CaptureLog
  11. describe "get_file/1" do
  12. test "it returns url for files" do
  13. ConfigMock
  14. |> expect(:get, 6, fn key ->
  15. [
  16. {Pleroma.Upload,
  17. [uploader: Pleroma.Uploaders.S3, base_url: "https://s3.amazonaws.com"]},
  18. {Pleroma.Uploaders.S3, [bucket: "test_bucket"]}
  19. ]
  20. |> get_in(key)
  21. end)
  22. assert S3.get_file("test_image.jpg") == {
  23. :ok,
  24. {:url, "https://s3.amazonaws.com/test_bucket/test_image.jpg"}
  25. }
  26. end
  27. test "it returns path without bucket when truncated_namespace set to ''" do
  28. ConfigMock
  29. |> expect(:get, 6, fn key ->
  30. [
  31. {Pleroma.Upload,
  32. [uploader: Pleroma.Uploaders.S3, base_url: "https://s3.amazonaws.com"]},
  33. {Pleroma.Uploaders.S3,
  34. [bucket: "test_bucket", truncated_namespace: "", bucket_namespace: "myaccount"]}
  35. ]
  36. |> get_in(key)
  37. end)
  38. assert S3.get_file("test_image.jpg") == {
  39. :ok,
  40. {:url, "https://s3.amazonaws.com/test_image.jpg"}
  41. }
  42. end
  43. test "it returns path with bucket namespace when namespace is set" do
  44. ConfigMock
  45. |> expect(:get, 6, fn key ->
  46. [
  47. {Pleroma.Upload,
  48. [uploader: Pleroma.Uploaders.S3, base_url: "https://s3.amazonaws.com"]},
  49. {Pleroma.Uploaders.S3, [bucket: "test_bucket", bucket_namespace: "family"]}
  50. ]
  51. |> get_in(key)
  52. end)
  53. assert S3.get_file("test_image.jpg") == {
  54. :ok,
  55. {:url, "https://s3.amazonaws.com/family:test_bucket/test_image.jpg"}
  56. }
  57. end
  58. end
  59. describe "put_file/1" do
  60. setup do
  61. file_upload = %Pleroma.Upload{
  62. name: "image-tet.jpg",
  63. content_type: "image/jpeg",
  64. path: "test_folder/image-tet.jpg",
  65. tempfile: Path.absname("test/instance_static/add/shortcode.png")
  66. }
  67. ConfigMock
  68. |> expect(:get, fn [Pleroma.Uploaders.S3] ->
  69. [
  70. bucket: "test_bucket"
  71. ]
  72. end)
  73. [file_upload: file_upload]
  74. end
  75. test "save file", %{file_upload: file_upload} do
  76. ExAwsMock
  77. |> expect(:request, fn _req -> {:ok, %{status_code: 200}} end)
  78. assert S3.put_file(file_upload) == {:ok, {:file, "test_folder/image-tet.jpg"}}
  79. end
  80. test "returns error", %{file_upload: file_upload} do
  81. ExAwsMock
  82. |> expect(:request, fn _req -> {:error, "S3 Upload failed"} end)
  83. assert capture_log(fn ->
  84. assert S3.put_file(file_upload) == {:error, "S3 Upload failed"}
  85. end) =~ "Elixir.Pleroma.Uploaders.S3: {:error, \"S3 Upload failed\"}"
  86. end
  87. end
  88. describe "delete_file/1" do
  89. test "deletes file" do
  90. ExAwsMock
  91. |> expect(:request, fn _req -> {:ok, %{status_code: 204}} end)
  92. ConfigMock
  93. |> expect(:get, fn [Pleroma.Uploaders.S3, :bucket] -> "test_bucket" end)
  94. assert :ok = S3.delete_file("image.jpg")
  95. end
  96. end
  97. end