增加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

+24 -15
View File
@@ -1,3 +1,4 @@
using Store.Users.Contracts.Enums;
using System.ComponentModel.DataAnnotations;
using System.Text.Json;
using MAX.Framework.Commons;
@@ -55,7 +56,7 @@ public sealed class UserManagementTests
var info = await context.Users.Create(new() { UserName = "created", Password = "new-password" }, false, default);
var stored = await context.Read("created");
Assert.True(info.IsMainUser);
Assert.Equal((byte)3, info.GroupId);
Assert.Equal(UserGroup.MainAccount, info.GroupId);
Assert.Equal(30, info.ShopPointsPerMonth);
Assert.Equal(0, info.Points);
Assert.Equal(0m, info.Balance);
@@ -98,11 +99,11 @@ public sealed class UserManagementTests
context.CurrentUser.UserName = "main";
var info = await context.Users.Create(new()
{
UserName = "created", Password = "new-password", GroupId = groupId, Authority = "订单"
UserName = "created", Password = "new-password", GroupId = (UserGroup)groupId, Authority = "订单"
}, true, default);
Assert.Equal("main", info.ParentUserName);
Assert.Equal(groupId, info.GroupId);
Assert.Equal((short)0, info.SaLevel);
Assert.Equal((UserGroup)groupId, info.GroupId);
Assert.Equal(UserAdminLevel.Normal, info.SaLevel);
}
[Theory]
@@ -114,7 +115,7 @@ public sealed class UserManagementTests
context.CurrentUser.UserName = "main";
await Assert.ThrowsAsync<ValidationException>(() => context.Users.Create(new()
{
UserName = "created", Password = "new-password", GroupId = groupId
UserName = "created", Password = "new-password", GroupId = (UserGroup)groupId
}, true, default));
Assert.False(await context.Db.Select<UserEntity>().Where(u => u.UserName == "created").AnyAsync());
}
@@ -126,9 +127,9 @@ public sealed class UserManagementTests
context.CurrentUser.UserName = "main";
var error = await Assert.ThrowsAsync<AppException>(() => context.Users.Create(new()
{
UserName = "created", Password = "new-password", GroupId = 3
UserName = "created", Password = "new-password", GroupId = UserGroup.MainAccount
}, true, default));
Assert.Contains("子账号分组", error.Message);
Assert.Contains("子账号不能使用主号分组", error.Message);
}
[Fact]
public async Task ChildAccount_CannotCreateAnotherChild()
@@ -145,15 +146,16 @@ public sealed class UserManagementTests
{
using var context = new UserTestContext();
context.CurrentUser.UserName = "main";
foreach (var request in new UserEditRequest[]
foreach (var request in new UserUpdateRequest[]
{
new() { Authority = "不存在的权限" }, new() { SaLevel = 1 }, new() { ShopPointsPerMonth = 30 }
new() { Authority = "不存在的权限" }, new() { SaLevel = UserAdminLevel.SuperAdmin }, new() { ShopPointsPerMonth = 30 }
})
{
var error = await Assert.ThrowsAsync<AppException>(() => context.Users.Update(context.Child.Id, request, true, default));
request.Id = context.Child.Id;
var error = await Assert.ThrowsAsync<AppException>(() => context.Users.Update(request, true, default));
Assert.Equal(403, error.Code);
}
Assert.Equal((short)0, (await context.Read("child")).SaLevel);
Assert.Equal(UserAdminLevel.Normal, (await context.Read("child")).SaLevel);
}
[Fact]
@@ -162,7 +164,7 @@ public sealed class UserManagementTests
using var context = new UserTestContext();
await context.Db.Update<UserEntity>().Set(u => u.Notes, "old note").Set(u => u.Mobile, "13800000000")
.Set(u => u.Points, 42m).Set(u => u.Balance, 11m).Where(u => u.Id == context.Main.Id).ExecuteAffrowsAsync();
var info = await context.Users.Update(context.Main.Id, new() { Notes = "", NickName = " New Name " }, false, default);
var info = await context.Users.Update(new() { Id = context.Main.Id, Notes = "", NickName = " New Name " }, false, default);
Assert.Equal("", info.Notes);
Assert.Equal("13800000000", info.Mobile);
Assert.Equal("New Name", info.NickName);
@@ -197,7 +199,7 @@ public sealed class UserManagementTests
context.Seed("child-two", parent: "main");
context.Seed("foreign-child", parent: "other");
context.CurrentUser.UserName = "main";
var page = await context.Users.Search(new() { Keyword = "child", GroupId = 4, PageSize = 1 }, true, default);
var page = await context.Users.Search(new() { Keyword = "child", GroupId = UserGroup.CustomerService, PageSize = 1 }, true, default);
Assert.Equal(2, page.Total);
Assert.Equal("child-two", Assert.Single(page.Items).UserName);
var second = await context.Users.Search(new() { Page = 2, PageSize = 1 }, true, default);
@@ -269,8 +271,16 @@ public sealed class UserManagementTests
Assert.Contains("other", context.Sessions.SignedOut);
}
[Fact]
public async Task EmptyOwnAccount_CanBeDeleted_AndSessionIsInvalidated()
{
using var context = new UserTestContext();
await context.Users.Delete(context.Admin.Id, default);
Assert.Null(await context.Read("admin"));
Assert.Contains("admin", context.Sessions.SignedOut);
}
[Theory]
[InlineData("self")]
[InlineData("points")]
[InlineData("balance")]
[InlineData("children")]
@@ -279,7 +289,6 @@ public sealed class UserManagementTests
{
using var context = new UserTestContext();
var target = context.Other;
if (condition == "self") target = context.Admin;
if (condition == "children") target = context.Main;
if (condition == "points") await context.Db.Update<UserEntity>().Set(u => u.Points, 1m).Where(u => u.Id == target.Id).ExecuteAffrowsAsync();
if (condition == "balance") await context.Db.Update<UserEntity>().Set(u => u.Balance, 1m).Where(u => u.Id == target.Id).ExecuteAffrowsAsync();