namespace Yh.SchClass.OpenApi.Tests; /// UserInfo(师生统一用户)端点契约与 反序列化。 public class SchClassUserInfoClientTests { private const string Root = "/oapi/UserInfo/"; [Fact] public async Task UserInfo_全部2个端点_路径与参数名对齐() { var handler = SchClassTestHost.Ok(); var api = SchClassTestHost.Api(handler); await api.UserInfo.GetUserListAsync("S1"); SchClassTestHost.Verify(handler, HttpMethod.Get, Root + "GetUserList", "?SchSerID=S1"); await api.UserInfo.GetUserIdListAsync(1001); SchClassTestHost.Verify(handler, HttpMethod.Get, Root + "getUserIdList", "?userid=1001"); } [Fact] public async Task UserInfoVO_大小写不敏感匹配Jackson推导键名() { // Jackson 从 getter 推导的键名大小写与 Java 字段不完全一致(如 schSerID / idcard), // Web 默认大小写不敏感,故两种形态都能命中。 var handler = FakeHandler.Json(HttpStatusCode.OK, """ [{"schSerID":"S001","no":1,"idcard":"110101","userID":1001,"sex":1,"usertype":1, "serID":null,"photo":null,"tel":"13800000000","uids":"wang","groupID":30,"name":"王老师"}] """); var list = await SchClassTestHost.Api(handler).UserInfo.GetUserListAsync("S001"); var user = Assert.Single(list); Assert.Equal("S001", user.SchSerId); Assert.Equal("110101", user.IdCard); Assert.Equal(1001, user.UserId); Assert.Equal(30, user.GroupId); Assert.Equal("王老师", user.Name); Assert.Null(user.SerId); Assert.Null(user.Photo); } [Fact] public async Task GetUserList_服务端204无内容时返回空列表() { var handler = FakeHandler.Empty(HttpStatusCode.NoContent); Assert.Empty(await SchClassTestHost.Api(handler).UserInfo.GetUserListAsync("S1")); } [Fact] public async Task getUserIdList_未找到时服务端404返回空列表() { var handler = FakeHandler.Empty(HttpStatusCode.NotFound); Assert.Empty(await SchClassTestHost.Api(handler).UserInfo.GetUserIdListAsync(-1)); } }