Skip to content

Commit

Permalink
Fix query test
Browse files Browse the repository at this point in the history
  • Loading branch information
bmquinn committed Jun 25, 2024
1 parent 490dc06 commit bacb9b0
Showing 1 changed file with 50 additions and 44 deletions.
94 changes: 50 additions & 44 deletions app/test/meadow_web/schema/query/s3_objects_test.exs
Original file line number Diff line number Diff line change
Expand Up @@ -23,80 +23,86 @@ defmodule MeadowWeb.Schema.Query.S3ObjectsTest do
@image_fixture "test/fixtures/coffee.tif"
@json_fixture "test/fixtures/details.json"

setup context do
setup do
file_fixtures = [
{@ingest_bucket, "coffee/coffee.tif", File.read!(@image_fixture)},
{@ingest_bucket, "details.json", File.read!(@json_fixture)}
]

file_fixtures
|> Task.async_stream(
fn {bucket, key, content} ->
upload_object(bucket, key, content)
setup_fixtures(file_fixtures)

AWS.check_object_tags!(bucket, key, Config.required_checksum_tags())
|> wait(timeout: Config.checksum_wait_timeout(), frequency: 250)
end,
timeout: Config.checksum_wait_timeout()
)
|> Stream.run()

on_exit(fn ->
file_fixtures
|> Task.async_stream(fn {bucket, key, _} -> delete_object(bucket, key) end)
|> Stream.run()
end)
on_exit(fn -> cleanup_fixtures(file_fixtures) end)

{:ok, %{file_fixtures: file_fixtures}}
end

test "fileSets query returns file_sets with a prefix", %{file_fixtures: file_fixtures} do
test "ListIngestBucketObjects query returns objects with a prefix", %{
file_fixtures: _file_fixtures
} do
conn = build_conn() |> auth_user(user_fixture())
variables = %{"prefix" => "coffee"}

input = %{
"prefix" => "coffee"
}

response = get(conn, "/api/graphql", query: @query, variables: input)
response =
conn
|> get("/api/graphql", query: @query, variables: variables)
|> json_response(200)

assert %{
"data" => %{
"ListIngestBucketObjects" => [
%{
"key" => "s3://bmq-test-ingest/coffee/coffee.tif",
"mimeType" => "application/octet-stream",
"size" => "3179982",
"storageClass" => "STANDARD"
} = object
]
"ListIngestBucketObjects" => [s3_object]
}
} = Jason.decode!(response.resp_body)

assert_valid_iso8601_datetime(object["lastModified"])
} = response

assert s3_object["key"] == "s3://#{@ingest_bucket}/coffee/coffee.tif"
assert s3_object["mimeType"] == "application/octet-stream"
assert s3_object["size"] == "3179982"
assert s3_object["storageClass"] == "STANDARD"
assert_valid_iso8601_datetime(s3_object["lastModified"])

refute Enum.any?(
response["data"]["ListIngestBucketObjects"],
&(&1["key"] == "s3://#{@ingest_bucket}/details.json")
)
end

test "fileSets query returns all file sets in the ingest bucket", %{
test "ListIngestBucketObjects query returns all objects in the ingest bucket", %{
file_fixtures: file_fixtures
} do
conn = build_conn() |> auth_user(user_fixture())

response = get(conn, "/api/graphql", query: @query)
response =
conn
|> get("/api/graphql", query: @query)
|> json_response(200)

s3_objects = Jason.decode!(response.resp_body)["data"]["ListIngestBucketObjects"]
s3_objects = response["data"]["ListIngestBucketObjects"]

assert Enum.all?(file_fixtures, fn {bucket, key, _} ->
expected_key = "s3://#{bucket}/#{key}"
Enum.any?(s3_objects, &(&1["key"] == expected_key))
end)
end

defp assert_valid_iso8601_datetime(datetime_string) do
case DateTime.from_iso8601(datetime_string) do
{:ok, _datetime, 0} ->
assert true
defp setup_fixtures(fixtures) do
fixtures
|> Task.async_stream(&upload_and_tag_fixture/1, timeout: Config.checksum_wait_timeout())
|> Stream.run()
end

defp upload_and_tag_fixture({bucket, key, content}) do
upload_object(bucket, key, content)

AWS.check_object_tags!(bucket, key, Config.required_checksum_tags())
|> wait(timeout: Config.checksum_wait_timeout(), frequency: 250)
end

_ ->
flunk("Expected #{inspect(datetime_string)} to be a valid ISO8601 datetime string")
end
defp cleanup_fixtures(fixtures) do
fixtures
|> Task.async_stream(fn {bucket, key, _} -> delete_object(bucket, key) end)
|> Stream.run()
end

defp assert_valid_iso8601_datetime(datetime_string) do
assert {:ok, _, 0} = DateTime.from_iso8601(datetime_string)
end
end

0 comments on commit bacb9b0

Please sign in to comment.