Skip to content

Commit 90a326e

Browse files
committed
ApiServiceCreateData test now checks file upload/download result
1 parent 11557a9 commit 90a326e

File tree

2 files changed

+57
-3
lines changed
  • examples/minio/CommunityToolkit.Aspire.Hosting.Minio.ApiService
  • tests/CommunityToolkit.Aspire.Hosting.Minio.Tests

2 files changed

+57
-3
lines changed

examples/minio/CommunityToolkit.Aspire.Hosting.Minio.ApiService/Program.cs

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,4 +32,46 @@
3232
return Results.NotFound();
3333
});
3434

35+
app.MapPost("/buckets/{bucketName}/{fileName}/upload",
36+
async ([FromRoute] string bucketName,
37+
[FromRoute] string fileName,
38+
HttpRequest request,
39+
[FromServices] IMinioClient minioClient) =>
40+
{
41+
var memstream = new MemoryStream();
42+
43+
await request.Body.CopyToAsync(memstream);
44+
45+
var length = memstream.Length;
46+
memstream.Seek(0, SeekOrigin.Begin);
47+
48+
var putObjectArgs = new PutObjectArgs()
49+
.WithObject(fileName)
50+
.WithBucket(bucketName)
51+
.WithStreamData(memstream)
52+
.WithObjectSize(length);
53+
54+
await minioClient.PutObjectAsync(putObjectArgs);
55+
56+
return Results.Ok();
57+
}).DisableAntiforgery();
58+
59+
app.MapGet("/buckets/{bucketName}/{fileName}/download",
60+
async (string bucketName, string fileName, [FromServices] IMinioClient minioClient) =>
61+
{
62+
var memStream = new MemoryStream();
63+
64+
var getObjectArgs = new GetObjectArgs()
65+
.WithBucket(bucketName)
66+
.WithObject(fileName)
67+
.WithCallbackStream(stream =>
68+
{
69+
stream.CopyToAsync(memStream);
70+
});
71+
72+
await minioClient.GetObjectAsync(getObjectArgs);
73+
74+
return Results.File(memStream.ToArray(), "application/octet-stream", fileName);
75+
});
76+
3577
app.Run();

tests/CommunityToolkit.Aspire.Hosting.Minio.Tests/AppHostTests.cs

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,8 @@
22
// The .NET Foundation licenses this file to you under the MIT license.
33

44
using Aspire.Components.Common.Tests;
5-
using Aspire.Hosting;
65
using CommunityToolkit.Aspire.Testing;
7-
using Microsoft.Extensions.Configuration;
8-
using Microsoft.Extensions.Hosting;
6+
using System.Text;
97

108
namespace CommunityToolkit.Aspire.Hosting.Minio.Tests;
119

@@ -41,5 +39,19 @@ public async Task ApiServiceCreateData()
4139

4240
var getBucketResponse = await httpClient.GetAsync($"/buckets/{bucketName}");
4341
Assert.Equal(HttpStatusCode.OK, getBucketResponse.StatusCode);
42+
43+
var uploadedString = "Hello World";
44+
var bytes = Encoding.UTF8.GetBytes(uploadedString);
45+
using var content = new ByteArrayContent(bytes);
46+
content.Headers.ContentType = new("plain/text");
47+
48+
var uploadFileResponse = await httpClient.PostAsync($"/buckets/{bucketName}/fileName/upload", content);
49+
Assert.Equal(HttpStatusCode.OK, uploadFileResponse.StatusCode);
50+
51+
var downloadFileResponse = await httpClient.GetAsync($"/buckets/{bucketName}/fileName/download");
52+
Assert.Equal(HttpStatusCode.OK, downloadFileResponse.StatusCode);
53+
54+
var downloadedString = await downloadFileResponse.Content.ReadAsStringAsync();
55+
Assert.Equal(uploadedString, downloadedString);
4456
}
4557
}

0 commit comments

Comments
 (0)