83 lines
4.0 KiB
C#
83 lines
4.0 KiB
C#
using System.ComponentModel.DataAnnotations;
|
|
using MAX.Framework.Commons;
|
|
using Store.Users.Entities;
|
|
|
|
namespace Store.Users.Tests;
|
|
|
|
public sealed class UserTopUpTests
|
|
{
|
|
[Fact]
|
|
public async Task Message_UsesCurrentIdentity_AndIsVisibleOnlyToOwnerOrAdmin()
|
|
{
|
|
using var context = new UserTestContext();
|
|
context.CurrentUser.UserName = "main";
|
|
var id = await context.Users.AddTopUpMessage(new() { Message = " 充值待核实 " }, default);
|
|
var message = Assert.Single((await context.Users.TopUpMessages(new(), default)).Items);
|
|
Assert.Equal(id, message.Id);
|
|
Assert.Equal("main", message.UserName);
|
|
Assert.Equal("main", message.NickName);
|
|
Assert.Equal("充值待核实", message.Message);
|
|
context.CurrentUser.UserName = "other";
|
|
Assert.Empty((await context.Users.TopUpMessages(new(), default)).Items);
|
|
context.CurrentUser.UserName = "admin";
|
|
Assert.Single((await context.Users.TopUpMessages(new(), default)).Items);
|
|
}
|
|
|
|
[Fact]
|
|
public async Task ProcessingMessage_RequiresAdmin_AndDoesNotRechargeFunds()
|
|
{
|
|
using var context = new UserTestContext();
|
|
context.CurrentUser.UserName = "main";
|
|
var id = await context.Users.AddTopUpMessage(new() { Message = "充值待核实" }, default);
|
|
var error = await Assert.ThrowsAsync<AppException>(() => context.Users.UpdateTopUpMessage(new() { Id = id, Result = "已核实" }, default));
|
|
Assert.Equal(403, error.Code);
|
|
context.CurrentUser.UserName = "admin";
|
|
await context.Users.UpdateTopUpMessage(new() { Id = id, Result = "已核实" }, default);
|
|
Assert.Equal("已核实", (await context.Users.TopUpMessages(new(), default)).Items.Single().Result);
|
|
Assert.Equal(0m, (await context.Read("main")).Points);
|
|
Assert.Equal(0, await context.Db.Select<UserPointsRecordEntity>().CountAsync());
|
|
}
|
|
|
|
[Fact]
|
|
public async Task MissingMessage_CannotBeProcessed()
|
|
{
|
|
using var context = new UserTestContext();
|
|
var error = await Assert.ThrowsAsync<AppException>(() => context.Users.UpdateTopUpMessage(new() { Id = 9999, Result = "已核实" }, default));
|
|
Assert.Equal("充值备注不存在", error.Message);
|
|
}
|
|
|
|
[Fact]
|
|
public async Task Qrcode_UpsertsByAgentCode_AndSupportsDataUri()
|
|
{
|
|
using var context = new UserTestContext();
|
|
await context.Users.UpdateTopUpQrcode(new() { AgentCode = "agent", QrcodeBase64 = "aGVsbG8=" }, default);
|
|
const string data = "data:image/png;base64,d29ybGQ=";
|
|
await context.Users.UpdateTopUpQrcode(new() { AgentCode = " agent ", QrcodeBase64 = data }, default);
|
|
Assert.Equal(data, await context.Users.GetTopUpQrcode("agent", default));
|
|
Assert.Equal(1, await context.Db.Select<UserTopUpQrcodeEntity>().CountAsync());
|
|
Assert.Null(await context.Users.GetTopUpQrcode("missing", default));
|
|
}
|
|
|
|
[Theory]
|
|
[InlineData("invalid!")]
|
|
[InlineData("data:image/png,abc")]
|
|
[InlineData("data:image/png;base64,")]
|
|
public async Task InvalidQrcode_DoesNotOverwriteStoredValue(string invalid)
|
|
{
|
|
using var context = new UserTestContext();
|
|
await context.Users.UpdateTopUpQrcode(new() { AgentCode = "agent", QrcodeBase64 = "aGVsbG8=" }, default);
|
|
await Assert.ThrowsAsync<ValidationException>(() => context.Users.UpdateTopUpQrcode(new() { AgentCode = "agent", QrcodeBase64 = invalid }, default));
|
|
Assert.Equal("aGVsbG8=", await context.Users.GetTopUpQrcode("agent", default));
|
|
}
|
|
|
|
[Fact]
|
|
public async Task NonAdmin_CannotModifyQrcode()
|
|
{
|
|
using var context = new UserTestContext();
|
|
context.CurrentUser.UserName = "main";
|
|
var error = await Assert.ThrowsAsync<AppException>(() => context.Users.UpdateTopUpQrcode(new() { AgentCode = "agent", QrcodeBase64 = "aGVsbG8=" }, default));
|
|
Assert.Equal(403, error.Code);
|
|
Assert.Equal(0, await context.Db.Select<UserTopUpQrcodeEntity>().CountAsync());
|
|
}
|
|
}
|