///
/// A bucket without a single object: every lookup answers with a 404 and every listing is empty
/// until a test puts something in via ,
/// or .
///
private static IAmazonS3 EmptyBucket()
{
var s3 = Substitute.For();
// Objects written during the test become visible to later lookups, just like in a real bucket.
var writtenObjects = new Dictionary(StringComparer.Ordinal);
s3.GetObjectMetadataAsync(Arg.Any(), Arg.Any())
.Returns(call =>
{
var key = call.Arg().Key;
if (!writtenObjects.TryGetValue(key, out var owner))
throw new AmazonS3Exception("not found") { StatusCode = System.Net.HttpStatusCode.NotFound };
return owner is null ? new GetObjectMetadataResponse() : MetadataResponse(owner);
});
s3.ListObjectsV2Async(Arg.Any(), Arg.Any())
.Returns(_ => new ListObjectsV2Response { IsTruncated = false });
s3.CopyObjectAsync(Arg.Any(), Arg.Any())
.Returns(_ => new CopyObjectResponse());
s3.PutObjectAsync(Arg.Any(), Arg.Any())
.Returns(call =>
{
var request = call.Arg();
writtenObjects[request.Key] = request.Metadata["efecte-org-id"];
return new PutObjectResponse();
});
s3.DeleteObjectsAsync(Arg.Any(), Arg.Any())
.Returns(_ => new DeleteObjectsResponse());
return s3;
}