fp/apps/bright/test/bright/uploads_test.exs
CJ_Clippy aa75c224fc
Some checks failed
ci / build (push) Failing after 23m29s
ci / Tests & Checks (push) Failing after 3m32s
move services/bright to apps/bright
2025-02-10 08:16:50 -08:00

72 lines
2.1 KiB
Elixir

defmodule Bright.UploadsTest do
use ExUnit.Case, async: true
@test_url "https://futureporn-b2.b-cdn.net/projekt-melody.jpg"
@test_file_path "./test_download.txt"
@s3_bucket Application.compile_env(:ex_aws, [:s3, :bucket])
describe "download_file/2" do
@tag :acceptance
@tag timeout: :infinity
test "downloads a file successfully" do
# Ensure a valid file exists at the URL for testing purposes
assert {:ok, _res} = Bright.Uploads.download_file(@test_url, @test_file_path)
assert File.exists?(@test_file_path)
{:ok, stat} = File.stat(@test_file_path)
assert stat.size > 0, "File is empty"
File.rm!(@test_file_path)
end
test "returns an error for an invalid URL" do
invalid_url = "https://nonexistent.url/file.txt"
assert {:error, _reason} = Bright.Uploads.download_file(invalid_url, @test_file_path)
end
end
describe "upload_file_to_s3/3" do
setup do
File.write!(@test_file_path, "This is a test file.")
on_exit(fn -> File.rm!(@test_file_path) end)
:ok
end
@tag :acceptance
test "uploads a file to S3 successfully" do
basename = "random.txt"
random_string =
for _ <- 1..12,
into: "",
do:
<<Enum.random(~c"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789")>>
unique_filename = "#{random_string}-#{basename}"
assert {:ok, %{status_code: 200}} =
Bright.Uploads.upload_file_to_s3(@test_file_path, @s3_bucket, unique_filename)
# Optionally verify the file exists in S3 (requires an S3 client)
{:ok, %{status_code: 200}} =
ExAws.S3.head_object(@s3_bucket, unique_filename)
|> ExAws.request()
# Cleanup: Delete the uploaded file from S3
ExAws.S3.delete_object(@s3_bucket, unique_filename)
|> ExAws.request()
end
@tag :acceptance
test "returns an error for a nonexistent file" do
assert {:error, :enoent} =
Bright.Uploads.upload_file_to_s3(
"nonexistent.txt",
@s3_bucket,
"test/nonexistant.txt"
)
end
end
end