namespace Yh.SchClass.OpenApi.Tests; /// OATea(教师)端点契约与 反序列化。 public class SchClassTeaInfoClientTests { private const string Root = "/oapi/OATea/"; [Fact] public async Task OATea_全部4个端点_路径与参数名对齐() { var handler = SchClassTestHost.Ok(); var api = SchClassTestHost.Api(handler); await api.TeaInfo.GetTeaInfoAsync(77); SchClassTestHost.Verify(handler, HttpMethod.Get, Root + "GetTeainfo", "?uid=77"); await api.TeaInfo.GetArrTeaInfoAsync("77,78"); SchClassTestHost.VerifyBody(handler, Root + "GetArrTeainfo", "77,78"); await api.TeaInfo.GetSchTeaInfoAsync("S1", 2); SchClassTestHost.Verify(handler, HttpMethod.Get, Root + "GetSchTeainfo", "?SchSerID=S1&schId=2"); await api.TeaInfo.GetSchTeaListAsync("S1", 2); SchClassTestHost.Verify(handler, HttpMethod.Get, Root + "GetSchTeaList", "?SchSerID=S1&schId=2"); } [Fact] public async Task TeaInfoVO_字段按Java原名反序列化() { var handler = FakeHandler.Json(HttpStatusCode.OK, """ {"SchSerID":"S001","Teapolitical":"党员","TeaWorkStart":"2010-09-01","Account":"wang", "SchSerIDs":"S001","role":3,"JiaoYuJu":"市教育局","TeaSex":"男","IsLeadingMiddle":0, "TeaOriginPlace":"北京","Photo":null,"TeaIDCard":"110101","Name":"王老师","GroupID":30, "SchName":"第一中学","TeaTeachStart":"2010-09-01","TeaSerID":"77","UserID":1001, "TeaNation":"汉","Tel":"13800000000","TeaWorkType":"专任","TeaNo":7,"TeaBirth":"1985-01-01"} """); var tea = await SchClassTestHost.Api(handler).TeaInfo.GetTeaInfoAsync(77); Assert.NotNull(tea); Assert.Equal("王老师", tea!.Name); Assert.Equal("S001", tea.SchSerId); // 注意:查询参数 uid 传的是教师 teaId(77),而 VO.UserID 是用户中心 ID(1001),两者不是一回事 Assert.Equal("77", tea.TeaSerId); Assert.Equal(1001, tea.UserId); Assert.Equal(3, tea.Role); Assert.Equal(30, tea.GroupId); Assert.Equal("汉", tea.TeaNation); Assert.Null(tea.Photo); } [Fact] public async Task 教师不存在_服务端404时返回null() { var handler = FakeHandler.Empty(HttpStatusCode.NotFound); Assert.Null(await SchClassTestHost.Api(handler).TeaInfo.GetTeaInfoAsync(999999)); } [Fact] public async Task GetSchTeainfo_缺参数时服务端400抛异常() { var handler = FakeHandler.Text(HttpStatusCode.BadRequest, "schId 与 SchSerID 不能同时为空"); var ex = await Assert.ThrowsAsync( () => SchClassTestHost.Api(handler).TeaInfo.GetSchTeaInfoAsync()); Assert.Equal(400, ex.StatusCode); } }