From bacb9b05e872e8e2ef54f6f61125fde592660b8f Mon Sep 17 00:00:00 2001 From: Brendan Quinn Date: Tue, 25 Jun 2024 00:50:10 +0000 Subject: [PATCH] Fix query test --- .../schema/query/s3_objects_test.exs | 94 ++++++++++--------- 1 file changed, 50 insertions(+), 44 deletions(-) diff --git a/app/test/meadow_web/schema/query/s3_objects_test.exs b/app/test/meadow_web/schema/query/s3_objects_test.exs index 34f558bf2..afb9b0f69 100644 --- a/app/test/meadow_web/schema/query/s3_objects_test.exs +++ b/app/test/meadow_web/schema/query/s3_objects_test.exs @@ -23,66 +23,59 @@ 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}" @@ -90,13 +83,26 @@ defmodule MeadowWeb.Schema.Query.S3ObjectsTest do 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