feat: migrate direct tenant content and learning endpoints

This commit is contained in:
xiong
2026-07-26 17:57:03 +08:00
parent 1d7e09b1f0
commit 91a4162908
18 changed files with 4079 additions and 0 deletions

View File

@@ -198,6 +198,58 @@ public sealed class AssetManagementEndpointTests
Assert.Single(detail.RootElement.GetProperty("issues").EnumerateArray());
}
[Fact]
public async Task Tenant_admin_can_upsert_asset_sign_access_and_query_asset_events()
{
await using var factory = new ApiTestFactory(objectStorageService: new FakeObjectStorageService());
var seed = await SeedAdminAsync(factory);
using var client = factory.CreateClient();
await LoginAsync(client, seed);
var upsertResponse = await client.PutAsJsonAsync(
"/api/tenant-content/assets",
new UpsertAssetDto
{
Title = "管理侧资料",
FileName = "admin.pdf",
AssetType = "pdf",
Visibility = "members",
Provider = "local_dev",
Bucket = "tenant-assets",
ObjectKey = $"{seed.TenantId:N}/admin.pdf",
PreviewObjectKey = $"{seed.TenantId:N}/admin-preview.pdf",
MimeType = "application/pdf",
FileSizeBytes = 512
});
var upsert = await ReadJsonAsync(upsertResponse);
var assetId = upsert.RootElement.GetProperty("item").GetProperty("id").GetGuid();
await factory.SeedAsync(new ContentAssetSecurityScanEvent
{
TenantId = seed.TenantId,
AssetId = assetId,
Provider = "local",
ScanStatus = AssetSecurityScanStatus.Passed,
RiskLevel = AssetSecurityRiskLevel.None
});
var downloadResponse = await client.PostAsJsonAsync(
"/api/tenant-content/assets/sign-download",
new AssetAccessSignDto { AssetId = assetId, ExpiresInSeconds = 120 });
var previewResponse = await client.PostAsJsonAsync(
"/api/tenant-content/assets/sign-preview",
new AssetAccessSignDto { AssetId = assetId, ExpiresInSeconds = 120 });
var accessEventsResponse = await client.GetAsync($"/api/tenant-content/assets/access-events?assetId={assetId}");
var scanEventsResponse = await client.GetAsync($"/api/tenant-content/assets/security-scan-events?assetId={assetId}");
var accessEvents = await ReadJsonAsync(accessEventsResponse);
var scanEvents = await ReadJsonAsync(scanEventsResponse);
Assert.Equal(HttpStatusCode.OK, upsertResponse.StatusCode);
Assert.Equal(HttpStatusCode.OK, downloadResponse.StatusCode);
Assert.Equal(HttpStatusCode.OK, previewResponse.StatusCode);
Assert.Equal(2, accessEvents.RootElement.GetProperty("items").GetArrayLength());
Assert.Single(scanEvents.RootElement.GetProperty("items").EnumerateArray());
}
private static async Task<(Guid TenantId, Guid UserId, string Phone)> SeedAdminAsync(ApiTestFactory factory)
{
var tenantId = Guid.NewGuid();