Sfoglia il codice sorgente

测试接口新增GetResult、PostResult、PutResult、DeleteResult便捷方法。

zhontai 3 anni fa
parent
commit
543fd7e25f

+ 2 - 5
Admin.Core.Tests/BaseTest.cs

@@ -51,11 +51,8 @@ namespace Admin.Core.Tests
                       {
                           if (AppConfig.RateLimit)
                           {
-                              config.AddJsonFile($"{configsPath}/ratelimitconfig.json", optional: true, reloadOnChange: true)
-#if DEBUG
-                        .AddJsonFile($"{configsPath}/ratelimitconfig.Development.json", false)
-#endif
-                    ;
+                            config.AddJsonFile($"{configsPath}/ratelimitconfig.json", optional: true, reloadOnChange: true)
+                            .AddJsonFile($"{configsPath}/ratelimitconfig.{host.HostingEnvironment.EnvironmentName}.json", optional: true, reloadOnChange: true);
                           }
                       });
                       webBuilder.UseTestServer();

+ 39 - 22
Admin.Core.Tests/Controller/Admin/ApiControllerTest.cs

@@ -1,9 +1,9 @@
 using Admin.Core.Common.Input;
 using Admin.Core.Model.Admin;
-using Newtonsoft.Json;
-using Newtonsoft.Json.Linq;
+using Admin.Core.Service.Admin.Api.Input;
+using Admin.Core.Service.Admin.Api.Output;
+using System.Collections.Generic;
 using System.Net;
-using System.Net.Http;
 using System.Threading.Tasks;
 using Xunit;
 
@@ -15,29 +15,18 @@ namespace Admin.Core.Tests.Controller.Admin
         {
         }
 
-        private async Task<JObject> GetResult(string apiPath, HttpContent httpContent = null)
-        {
-            await Login();
-
-            var res = httpContent != null ? await Client.PostAsync(apiPath, httpContent) : await Client.GetAsync(apiPath);
-            Assert.Equal(HttpStatusCode.OK, res.StatusCode);
-
-            var content = await res.Content.ReadAsStringAsync();
-            return JsonConvert.DeserializeObject<JObject>(content);
-        }
-
         [Fact]
         public async Task Get()
         {
-            var jObject = await GetResult("/api/admin/api/get?id=161227167658053");
-            Assert.Equal(1, jObject["code"]);
+            var res = await GetResult<ResultDto<ApiGetOutput>>("/api/admin/api/get?id=161227167658053");
+            Assert.True(res.Success);
         }
 
         [Fact]
         public async Task GetList()
         {
-            var jObject = await GetResult("/api/admin/api/getlist?key=接口管理");
-            Assert.Equal(1, jObject["code"]);
+            var res = await GetResult<ResultDto<List<ApiListOutput>>>("/api/admin/api/getlist?key=接口管理");
+            Assert.True(res.Success);
         }
 
         [Fact]
@@ -46,17 +35,45 @@ namespace Admin.Core.Tests.Controller.Admin
             var input = new PageInput<ApiEntity> 
             { 
                 CurrentPage = 1, 
-                PageSize = 20, 
+                PageSize = 20,
                 Filter = new ApiEntity 
                 { 
                     Label = "接口管理" 
                 }
             };
-            HttpContent httpContent = new StringContent(JsonConvert.SerializeObject(input));
-
+            
             await Login();
-            var res = await Client.PostAsync($"/api/admin/api/getpage", httpContent);
+            var res = await Client.PostAsync($"/api/admin/api/getpage", GetHttpContent(input));
             Assert.Equal(HttpStatusCode.Forbidden, res.StatusCode);
         }
+
+        [Fact]
+        public async Task Add()
+        {
+            var input = new ApiAddInput
+            {
+               Label = "新接口",
+               Path = "/api/admin/api/newapi",
+               HttpMethods = "post"
+            };
+
+            var res = await PostResult($"/api/admin/api/add", input);
+            Assert.True(res.Success);
+        }
+
+        [Fact]
+        public async Task Update()
+        {
+            var output = await GetResult<ResultDto<ApiGetOutput>>("/api/admin/api/get?id=161227167658053");
+            var res = await PutResult($"/api/admin/api/update", output.Data);
+            Assert.True(res.Success);
+        }
+
+        [Fact]
+        public async Task Delete()
+        {
+            var res = await DeleteResult($"/api/admin/api/softdelete?{ToParams(new { id = 191182807191621 })}");
+            Assert.True(res.Success);
+        }
     }
 }

+ 80 - 0
Admin.Core.Tests/Controller/BaseControllerTest.cs

@@ -6,6 +6,9 @@ using Admin.Core.Service.Admin.Auth.Input;
 using Admin.Core.Service.Admin.Auth.Output;
 using Newtonsoft.Json;
 using Newtonsoft.Json.Linq;
+using Newtonsoft.Json.Serialization;
+using System;
+using System.Collections.Generic;
 using System.ComponentModel;
 using System.Linq;
 using System.Net;
@@ -13,6 +16,7 @@ using System.Net.Http;
 using System.Net.Http.Headers;
 using System.Text;
 using System.Threading.Tasks;
+using Xunit;
 
 namespace Admin.Core.Tests.Controller
 {
@@ -31,14 +35,89 @@ namespace Admin.Core.Tests.Controller
 
         public ByteArrayContent GetHttpContent(object input)
         {
+            // HttpContent httpContent = new StringContent(JsonConvert.SerializeObject(input));
             var content = Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(input));
             var httpContent = new ByteArrayContent(content);
             httpContent.Headers.ContentType = MediaTypeHeaderValue.Parse("application/json;charset=UTF-8");
             return httpContent;
         }
 
+        public async Task<T> GetResult<T>(string apiPath, object input = null, bool checkStatus = true)
+        {
+            await Login();
+            var res = await Client.GetAsync(apiPath);
+            if (checkStatus)
+            {
+                Assert.Equal(HttpStatusCode.OK, res.StatusCode);
+            }
+            var content = await res.Content.ReadAsStringAsync();
+            return JsonConvert.DeserializeObject<T>(content);
+        }
+
+        public async Task<T> PostResult<T>(string apiPath, object input = null, bool checkStatus = true)
+        {
+            await Login();
+            var res = await Client.PostAsync(apiPath, GetHttpContent(input));
+            if (checkStatus)
+            {
+                Assert.Equal(HttpStatusCode.OK, res.StatusCode);
+            }
+            var content = await res.Content.ReadAsStringAsync();
+            return JsonConvert.DeserializeObject<T>(content);
+        }
+
+        public async Task<T> PutResult<T>(string apiPath, object input = null, bool checkStatus = true)
+        {
+            await Login();
+            var res = await Client.PutAsync(apiPath, GetHttpContent(input));
+            if (checkStatus)
+            {
+                Assert.Equal(HttpStatusCode.OK, res.StatusCode);
+            }
+            var content = await res.Content.ReadAsStringAsync();
+            return JsonConvert.DeserializeObject<T>(content);
+        }
+
+        public async Task<T> DeleteResult<T>(string apiPath, object input = null, bool checkStatus = true)
+        {
+            await Login();
+            var res = await Client.DeleteAsync(apiPath);
+            if (checkStatus)
+            {
+                Assert.Equal(HttpStatusCode.OK, res.StatusCode);
+            }
+            var content = await res.Content.ReadAsStringAsync();
+            return JsonConvert.DeserializeObject<T>(content);
+        }
+
+        public async Task<ResultDto<dynamic>> GetResult(string apiPath, object input = null, bool checkStatus = true)
+        {
+            return await GetResult<ResultDto<dynamic>>(apiPath, input, checkStatus);
+        }
+
+        public async Task<ResultDto<dynamic>> PostResult(string apiPath, object input = null, bool checkStatus = true)
+        {
+            return await PostResult<ResultDto<dynamic>>(apiPath, input, checkStatus);
+        }
+
+        public async Task<ResultDto<dynamic>> PutResult(string apiPath, object input = null, bool checkStatus = true)
+        {
+            return await PutResult<ResultDto<dynamic>>(apiPath, input, checkStatus);
+        }
+
+        public async Task<ResultDto<dynamic>> DeleteResult(string apiPath, object input = null, bool checkStatus = true)
+        {
+            return await DeleteResult<ResultDto<dynamic>>(apiPath, input, checkStatus);
+        }
+
         public async Task Login(AuthLoginInput input = null)
         {
+            var authorization = Client.DefaultRequestHeaders.FirstOrDefault(a => a.Key == "Authorization");
+            if (authorization.Key != null)
+            {
+                return;
+            }
+
             if (input == null && _appConfig.VarifyCode.Enable)
             {
                 var res = await _authService.GetVerifyCodeAsync("") as IResponseOutput<AuthGetVerifyCodeOutput>;
@@ -60,6 +139,7 @@ namespace Admin.Core.Tests.Controller
             var content = await result.Content.ReadAsStringAsync();
             var jObject = JsonConvert.DeserializeObject<JObject>(content);
             var token = jObject["data"]["token"];
+
             Client.DefaultRequestHeaders.Add("Authorization", $"Bearer {token}");
         }
 

+ 25 - 0
Admin.Core.Tests/ResultDto.cs

@@ -0,0 +1,25 @@
+namespace Admin.Core.Tests
+{
+    public class ResultDto<T>
+    {
+        /// <summary>
+        /// 是否成功标记
+        /// </summary>
+        public bool Success => Code == 1;
+
+        /// <summary>
+        /// 状态码
+        /// </summary>
+        public int Code { get; set; }
+
+        /// <summary>
+        /// 消息
+        /// </summary>
+        public string Msg { get; set; }
+
+        /// <summary>
+        /// 数据
+        /// </summary>
+        public T Data { get; set; }
+    }
+}

+ 1 - 4
Admin.Core/Program.cs

@@ -59,10 +59,7 @@ namespace Admin.Core
                     if (appConfig.RateLimit)
                     {
                         config.AddJsonFile("./configs/ratelimitconfig.json", optional: false, reloadOnChange: true)
-#if DEBUG
-                        .AddJsonFile("./configs/ratelimitconfig.Development.json", true)
-#endif
-                    ;
+                        .AddJsonFile($"./configs/ratelimitconfig.{host.HostingEnvironment.EnvironmentName}.json", optional: true, reloadOnChange: true);
                     }
                 })
                 .UseUrls(appConfig.Urls);