namespace Yh.SchClass.OpenApi.Tests; /// 聚合门面 与工厂 的装配行为。 public class SchClassOpenApiFacadeTests { [Fact] public void 门面装配全部10个子客户端() { var options = new SchClassOpenApiOptions { BaseHost = "http://base.yunhaixingtong.com/bschclass/oapi/" }; using var http = new HttpClient(); var api = new SchClassOpenApi(http, options); Assert.NotNull(api.DbClass); Assert.NotNull(api.VClass); Assert.NotNull(api.Schooling); Assert.NotNull(api.UserInfo); Assert.NotNull(api.SchInfo); Assert.NotNull(api.TeaInfo); Assert.NotNull(api.StuInfo); Assert.NotNull(api.TeachInfo); Assert.NotNull(api.SubInfo); Assert.NotNull(api.FamilyCompat); Assert.Same(options, api.Options); } [Fact] public void 门面构造_httpClient为空时抛() { Assert.Throws( () => new SchClassOpenApi(null!, new SchClassOpenApiOptions())); } [Fact] public void 门面构造_options为空时抛() { using var http = new HttpClient(); Assert.Throws(() => new SchClassOpenApi(http, null!)); } [Fact] public void 子客户端构造_参数为空时抛() { using var http = new HttpClient(); var options = new SchClassOpenApiOptions(); Assert.Throws(() => new SchClassVClassClient(null!, options)); Assert.Throws(() => new SchClassVClassClient(http, null!)); } [Fact] public void 工厂_按配置创建HttpClient() { var options = new SchClassOpenApiOptions { BaseHost = "http://base.yunhaixingtong.com/", BasePath = "/bschclass", ReadTimeoutMs = 3000, }; using var http = SchClassOpenApiFactory.CreateHttpClient(options); Assert.Equal(new Uri("http://base.yunhaixingtong.com/bschclass"), http.BaseAddress); Assert.Equal(TimeSpan.FromMilliseconds(3000), http.Timeout); } [Fact] public void 工厂_读超时非法时回落5秒() { var options = new SchClassOpenApiOptions { BaseHost = "http://base.yunhaixingtong.com", ReadTimeoutMs = 0 }; using var http = SchClassOpenApiFactory.CreateHttpClient(options); Assert.Equal(TimeSpan.FromMilliseconds(5000), http.Timeout); } [Fact] public void 工厂_创建完整门面() { var facade = SchClassOpenApiFactory.Create(new SchClassOpenApiOptions { BaseHost = "http://base.yunhaixingtong.com" }); Assert.NotNull(facade); Assert.NotNull(facade.VClass); Assert.NotNull(facade.StuInfo); } [Fact] public void 工厂_配置为空时抛() { Assert.Throws(() => SchClassOpenApiFactory.CreateHttpClient(null!)); Assert.Throws(() => SchClassOpenApiFactory.Create(null!)); } }