Skip to content

Commit

Permalink
Merge pull request #266 from vhf/feat/fix-parse_complete_multipart_up…
Browse files Browse the repository at this point in the history
…load

Handle errors in parse_complete_multipart_upload
  • Loading branch information
bernardd authored Sep 10, 2024
2 parents a16c1ea + 7ed21d2 commit aaa2a4d
Show file tree
Hide file tree
Showing 2 changed files with 31 additions and 21 deletions.
2 changes: 2 additions & 0 deletions lib/ex_aws/s3/parsers.ex
Original file line number Diff line number Diff line change
Expand Up @@ -105,6 +105,8 @@ if Code.ensure_loaded?(SweetXml) do
{:ok, %{resp | body: parsed_body}}
end

def parse_complete_multipart_upload(val), do: val

def parse_list_multipart_uploads({:ok, %{body: xml} = resp}) do
parsed_body =
SweetXml.xpath(xml, ~x"//ListMultipartUploadsResult",
Expand Down
50 changes: 29 additions & 21 deletions test/lib/s3/parser_test.exs
Original file line number Diff line number Diff line change
Expand Up @@ -334,28 +334,36 @@ defmodule ExAws.S3.ParserTest do
end
end

test "#parse_complete_multipart_upload parses CompleteMultipartUploadResult" do
complete_multipart_upload_response = """
<CompleteMultipartUploadResult xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<Location>https://s3-eu-west-1.amazonaws.com/my-bucket/tmp-copy3.mp4</Location>
<Bucket>my-bucket</Bucket>
<Key>tmp-copy3.mp4</Key>
<ETag>&quot;17fbc0a106abbb6f381aac6e331f2a19-1&quot;</ETag>
</CompleteMultipartUploadResult>
"""

result =
ExAws.S3.Parsers.parse_complete_multipart_upload(
{:ok, %{body: complete_multipart_upload_response}}
)
describe "#parse_complete_multipart_upload" do
test "parses CompleteMultipartUploadResult" do
complete_multipart_upload_response = """
<CompleteMultipartUploadResult xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<Location>https://s3-eu-west-1.amazonaws.com/my-bucket/tmp-copy3.mp4</Location>
<Bucket>my-bucket</Bucket>
<Key>tmp-copy3.mp4</Key>
<ETag>&quot;17fbc0a106abbb6f381aac6e331f2a19-1&quot;</ETag>
</CompleteMultipartUploadResult>
"""

{:ok, %{body: body}} = result
result =
ExAws.S3.Parsers.parse_complete_multipart_upload(
{:ok, %{body: complete_multipart_upload_response}}
)

{:ok, %{body: body}} = result

assert body == %{
location: "https://s3-eu-west-1.amazonaws.com/my-bucket/tmp-copy3.mp4",
bucket: "my-bucket",
key: "tmp-copy3.mp4",
etag: "\"17fbc0a106abbb6f381aac6e331f2a19-1\""
}
end

assert body == %{
location: "https://s3-eu-west-1.amazonaws.com/my-bucket/tmp-copy3.mp4",
bucket: "my-bucket",
key: "tmp-copy3.mp4",
etag: "\"17fbc0a106abbb6f381aac6e331f2a19-1\""
}
test "handles errors by passing them through" do
error = {:error, "error"}
result = ExAws.S3.Parsers.parse_complete_multipart_upload(error)
assert result == error
end
end
end

0 comments on commit aaa2a4d

Please sign in to comment.