92 lines
7.5 KiB
C#
92 lines
7.5 KiB
C#
using System.Net;
|
|
using Microsoft.Extensions.DependencyInjection;
|
|
using WebDrop.Core;
|
|
using WebDrop.Storage;
|
|
using static WebDrop.Api.Tests.ServerFixture;
|
|
|
|
namespace WebDrop.Api.Tests;
|
|
|
|
public sealed class WorkspaceApiTests(ServerFixture server) : IClassFixture<ServerFixture>
|
|
{
|
|
[Fact]
|
|
public async Task AccountProfileIsServerOwnedAndDoesNotChangeTheEncryptedVault()
|
|
{
|
|
var store = server.App.Services.GetRequiredService<SqliteAccountStore>();
|
|
var revision = store.GetVault("fixture_owner")!.Value.Revision;
|
|
using var patch = new HttpRequestMessage(HttpMethod.Patch, "/api/v1/accounts/profile") { Content = JsonBody(new { displayName = "资料测试", avatar = "data:image/png;base64,AA==" }) };
|
|
patch.Headers.Add("X-WD-Account", server.OwnerAccountToken);
|
|
using var response = await server.Http.SendAsync(patch);
|
|
Assert.Equal(HttpStatusCode.OK, response.StatusCode);
|
|
var body = await ReadJsonAsync(response); Assert.Equal("资料测试", body.GetProperty("displayName").GetString());
|
|
Assert.Equal(revision, store.GetVault("fixture_owner")!.Value.Revision);
|
|
using var read = new HttpRequestMessage(HttpMethod.Get, "/api/v1/accounts/profile"); read.Headers.Add("X-WD-Account", server.OwnerAccountToken);
|
|
using var loaded = await server.Http.SendAsync(read);
|
|
Assert.Equal("资料测试", (await ReadJsonAsync(loaded)).GetProperty("displayName").GetString());
|
|
using var bad = new HttpRequestMessage(HttpMethod.Patch, "/api/v1/accounts/profile") { Content = JsonBody(new { displayName = "test", avatar = "https://tracker.test/avatar.png" }) };
|
|
bad.Headers.Add("X-WD-Account", server.OwnerAccountToken);
|
|
using var rejected = await server.Http.SendAsync(bad); Assert.Equal(HttpStatusCode.BadRequest, rejected.StatusCode);
|
|
// 动图头像:必须真是 GIF(文件头 GIF8…),只改了 data: 前缀的不行
|
|
foreach (var (avatar, expected) in new[] { ("data:image/gif;base64," + Convert.ToBase64String("GIF89a |