增加Shop API

This commit is contained in:
chfei committed 2026-10-29 11:34:35 +08:00
1 parent 3769193696
commit 5d017740c6
83 files changed
+4451 -696

No files matched your search

+9 -9
View File
@@ -1,3 +1,4 @@
using Store.Users.Contracts.Enums;
using MAX.Framework.Commons;
using MAX.Framework.DependencyInjection;
using MAX.Framework.Mediation;
@@ -25,7 +26,7 @@ public sealed class UserAccessTests
using var context = new UserTestContext();
context.CurrentUser.UserName = actor;
var target = await context.Read(targetName);
await context.Users.Update(target.Id, new() { Notes = "updated" }, subRoute, default);
await context.Users.Update(new() { Id = target.Id, Notes = "updated" }, subRoute, default);
Assert.Equal("updated", (await context.Read(targetName)).Notes);
Assert.Contains(targetName, context.Sessions.SignedOut);
}
@@ -39,7 +40,7 @@ public sealed class UserAccessTests
using var context = new UserTestContext();
context.CurrentUser.UserName = actor;
var target = await context.Read(targetName);
var error = await Assert.ThrowsAsync<AppException>(() => context.Users.Update(target.Id, new() { Notes = "bad" }, false, default));
var error = await Assert.ThrowsAsync<AppException>(() => context.Users.Update(new() { Id = target.Id, Notes = "bad" }, false, default));
Assert.Equal(403, error.Code);
Assert.Equal("", (await context.Read(targetName)).Notes);
}
@@ -65,8 +66,7 @@ public sealed class UserAccessTests
UserName = "new-child", Password = "password", ParentUserName = "other"
}, true, default));
Assert.Equal(403, error.Code);
Assert.Equal(403, (await Assert.ThrowsAsync<AppException>(() => context.Users.Update(context.Main.Id,
new() { SaLevel = 1 }, false, default))).Code);
Assert.Equal(403, (await Assert.ThrowsAsync<AppException>(() => context.Users.Update(new() { Id = context.Main.Id, SaLevel = UserAdminLevel.SuperAdmin }, false, default))).Code);
}
[Theory]
@@ -125,8 +125,7 @@ public sealed class UserAccessTests
{
UserName = privilegedChild.UserName, NewPassword = "takeover-password"
}, default))).Code);
Assert.Equal(403, (await Assert.ThrowsAsync<AppException>(() => context.Users.Update(privilegedChild.Id,
new() { Notes = "takeover" }, true, default))).Code);
Assert.Equal(403, (await Assert.ThrowsAsync<AppException>(() => context.Users.Update(new() { Id = privilegedChild.Id, Notes = "takeover" }, true, default))).Code);
Assert.True(Store.Users.Services.UserPassword.Verify(await context.Read(privilegedChild.UserName), "legacy-password"));
}
@@ -143,8 +142,7 @@ public sealed class UserAccessTests
UserName = name, Amount = 10m, Operation = "充值", RequestId = Guid.NewGuid().ToString("N")
}, points, default))).Code);
var target = await context.Read(name);
Assert.Equal(403, (await Assert.ThrowsAsync<AppException>(() => context.Users.Update(target.Id,
new() { ShopPointsPerMonth = 45 }, false, default))).Code);
Assert.Equal(403, (await Assert.ThrowsAsync<AppException>(() => context.Users.Update(new() { Id = target.Id, ShopPointsPerMonth = 45 }, false, default))).Code);
}
Assert.Equal(403, (await Assert.ThrowsAsync<AppException>(() => context.Funds.Change(new()
{
@@ -164,6 +162,8 @@ public sealed class UserAccessTests
await context.Db.Update<UserEntity>().Set(u => u.Points, 100m).Where(u => u.Id == context.Child.Id).ExecuteAffrowsAsync();
await context.Db.Insert(new ShopEntity { ShopId = "shop", ShopAccount = "shop-account", UserName = "child" }).ExecuteAffrowsAsync();
var services = new ServiceCollection();
context.CurrentUser.UserName = actor;
services.AddSingleton<MAX.Framework.Security.ICurrentUser>(context.CurrentUser);
services.AddSingleton(context.Db);
services.AddSingleton<UnitOfWorkExecutionContext>();
services.AddMediatRAttributedBehaviors(typeof(ShopRenewCommand).Assembly);
@@ -171,7 +171,7 @@ public sealed class UserAccessTests
typeof(ShopRenewCommand).Assembly.GetType("Store.Users.Commands.ShopRenewCommandHandler", true)!);
using var provider = services.BuildServiceProvider();
var mediator = provider.GetRequiredService<IMediator>();
var command = new ShopRenewCommand("child", "shop", 1, OperatorName: actor);
var command = new ShopRenewCommand(new() { UserName = "child", ShopId = "shop", RenewDuration = 1 });
if (!allowed)
{
Assert.Equal(403, (await Assert.ThrowsAsync<AppException>(() => mediator.Send(command))).Code);