namespace Yh.SchClass.OpenApi.Tests; /// SchInfo(学校)端点契约与 反序列化。 public class SchClassSchInfoClientTests { private const string Root = "/oapi/SchInfo/"; [Fact] public async Task SchInfo_全部7个端点_路径与参数名对齐() { var handler = SchClassTestHost.Ok(); var api = SchClassTestHost.Api(handler); await api.SchInfo.GetSchListAsync("1,2"); SchClassTestHost.Verify(handler, HttpMethod.Get, Root + "GetSchlist", "?SchIDArr=1,2"); await api.SchInfo.AllListAsync(); SchClassTestHost.Verify(handler, HttpMethod.Get, Root + "AllList"); await api.SchInfo.GetSchFirstAsync("S1"); SchClassTestHost.Verify(handler, HttpMethod.Get, Root + "GetSchFirst", "?SchID=S1"); await api.SchInfo.GetUserSchFirstAsync(9); SchClassTestHost.Verify(handler, HttpMethod.Get, Root + "GetUserSchFirst", "?UserSchID=9"); await api.SchInfo.GetUserSchListAsync("9,10"); SchClassTestHost.Verify(handler, HttpMethod.Get, Root + "GetUserSchlist", "?UserSchIds=9,10"); await api.SchInfo.GetSchoolByGroupIdAsync(3); SchClassTestHost.Verify(handler, HttpMethod.Get, Root + "GetSchoolByGroupId", "?groupId=3"); await api.SchInfo.GetSchoolBySchoolenIdAsync(4); SchClassTestHost.Verify(handler, HttpMethod.Get, Root + "GetSchoolBySchoolenId", "?groupId=4"); } [Fact] public async Task SchInfoVO_按JsonProperty锚定的键名反序列化() { var handler = FakeHandler.Json(HttpStatusCode.OK, """ [{"SchSerId":"S001","UserSchSerId":9,"SchName":"第一中学"}, {"SchSerId":"S002","UserSchSerId":10,"SchName":"第二中学"}] """); var list = await SchClassTestHost.Api(handler).SchInfo.AllListAsync(); Assert.Equal(2, list.Count); Assert.Equal("S001", list[0].SchSerId); Assert.Equal(9, list[0].UserSchSerId); Assert.Equal("第二中学", list[1].SchName); } [Fact] public async Task GetSchFirst_未找到时返回null() { var handler = FakeHandler.Json(HttpStatusCode.OK, "null"); Assert.Null(await SchClassTestHost.Api(handler).SchInfo.GetSchFirstAsync("nope")); } }