diff --git a/moto/s3/responses.py b/moto/s3/responses.py index a7fb82210..e4259b57f 100644 --- a/moto/s3/responses.py +++ b/moto/s3/responses.py @@ -1774,7 +1774,9 @@ S3_BUCKET_GET_RESPONSE = """ {{ prefix }} {% endif %} {{ max_keys }} - {{ delimiter }} + {% if delimiter %} + {{ delimiter }} + {% endif %} {{ is_truncated }} {% if next_marker %} {{ next_marker }} diff --git a/tests/test_s3/test_s3.py b/tests/test_s3/test_s3.py index 8cc9a740c..b213a9a72 100644 --- a/tests/test_s3/test_s3.py +++ b/tests/test_s3/test_s3.py @@ -1709,6 +1709,17 @@ def test_website_redirect_location(): resp["WebsiteRedirectLocation"].should.equal(url) +@mock_s3 +def test_delimiter_optional_in_response(): + s3 = boto3.client("s3", region_name=DEFAULT_REGION_NAME) + s3.create_bucket(Bucket="mybucket") + s3.put_object(Bucket="mybucket", Key="one", Body=b"1") + resp = s3.list_objects(Bucket="mybucket", MaxKeys=1) + assert resp.get("Delimiter") is None + resp = s3.list_objects(Bucket="mybucket", MaxKeys=1, Delimiter="/") + assert resp.get("Delimiter") == "/" + + @mock_s3 def test_boto3_list_objects_truncated_response(): s3 = boto3.client("s3", region_name=DEFAULT_REGION_NAME) @@ -1725,7 +1736,7 @@ def test_boto3_list_objects_truncated_response(): assert resp["MaxKeys"] == 1 assert resp["IsTruncated"] == True assert resp.get("Prefix") is None - assert resp["Delimiter"] == "None" + assert resp.get("Delimiter") is None assert "NextMarker" in resp next_marker = resp["NextMarker"] @@ -1738,7 +1749,7 @@ def test_boto3_list_objects_truncated_response(): assert resp["MaxKeys"] == 1 assert resp["IsTruncated"] == True assert resp.get("Prefix") is None - assert resp["Delimiter"] == "None" + assert resp.get("Delimiter") is None assert "NextMarker" in resp next_marker = resp["NextMarker"] @@ -1751,7 +1762,7 @@ def test_boto3_list_objects_truncated_response(): assert resp["MaxKeys"] == 1 assert resp["IsTruncated"] == False assert resp.get("Prefix") is None - assert resp["Delimiter"] == "None" + assert resp.get("Delimiter") is None assert "NextMarker" not in resp