qinchaoyue 5 сар өмнө
parent
commit
3238fdd8d1

+ 2 - 2
src/Hotline.Application.Tests/Controller/DefaultHttpContextAccessor.cs

@@ -44,7 +44,7 @@ public class DefaultHttpContextAccessor : ISessionContext, IScopeDependency
     /// Id of current user or throw Exception for guest
     /// </summary>
     /// <exception cref="AuthenticationException"></exception>
-    public string RequiredUserId { get; }
+    public string RequiredUserId { get { return TestSessionConstants.UserId; } }
     public string? UserName { get { return TestSessionConstants.UserName; } init { } }
     public string? Phone { get; init; }
 
@@ -53,7 +53,7 @@ public class DefaultHttpContextAccessor : ISessionContext, IScopeDependency
     /// </summary>
     public string[] Roles { get { return TestSessionConstants.Roles; } init { } }
     public string? OrgId { get { return TestSessionConstants.OrgId;  } init { } }
-    public string RequiredOrgId { get; }
+    public string RequiredOrgId { get { return TestSessionConstants.OrgId; } }
     public string? OrgName { get; init; }
     public int OrgLevel { get; init; }
     public string? OrgAreaCode { get; init; }

+ 23 - 2
src/Hotline.Application.Tests/Controller/OrderControllerTest.cs

@@ -1,11 +1,13 @@
 using AutoFixture;
 using Hotline.Api.Controllers;
 using Hotline.Application.Tests.Infrastructure;
+using Hotline.Application.Tests.Mock;
 using Hotline.Identity.Accounts;
 using Hotline.Identity.Roles;
 using Hotline.Orders;
 using Hotline.Settings.Hotspots;
 using Hotline.Share.Dtos.File;
+using Hotline.Share.Dtos.FlowEngine;
 using Hotline.Share.Dtos.Order;
 using Hotline.Share.Dtos.Users;
 using Hotline.Share.Enums.Settings;
@@ -31,8 +33,9 @@ public class OrderControllerTest : TestBase
     private readonly OrderController _orderController;
     private readonly IRepository<Hotspot> _hotspotRepository;
     private readonly IOrderRepository _orderRepository;
+    private readonly OrderServiceMock _orderServiceMock;
 
-    public OrderControllerTest(IAccountRepository accountRepository, IRepository<Role> roleRepository, UserController userController, IRepository<Hotspot> hotspotRepository, OrderController orderController, IOrderRepository orderRepository, IServiceScopeFactory scopeFactory, IRepository<User> userRepository) : base(accountRepository, roleRepository, userController, scopeFactory, userRepository)
+    public OrderControllerTest(IAccountRepository accountRepository, IRepository<Role> roleRepository, UserController userController, IRepository<Hotspot> hotspotRepository, OrderController orderController, IOrderRepository orderRepository, IServiceScopeFactory scopeFactory, IRepository<User> userRepository, OrderServiceMock orderServiceMock) : base(accountRepository, roleRepository, userController, scopeFactory, userRepository)
     {
         _hotspotRepository = hotspotRepository;
         _orderController = orderController;
@@ -41,6 +44,24 @@ public class OrderControllerTest : TestBase
             HttpContext = new DefaultHttpContext()
         };
         _orderRepository = orderRepository;
+        _orderServiceMock = orderServiceMock;
+    }
+
+    [Fact]
+    public void Set一级部门_Test()
+    {
+        Set一级部门();
+    }
+
+    [Fact]
+    public async Task CreateOrder_Test()
+    {
+        SetZuoXi();
+        var order = _orderServiceMock.CreateOrder()
+            .办理到一级部门()
+            .办理到二级部门(Set一级部门)
+            .GetCreateResult();
+        order.Id.ShouldNotBeNull();
     }
 
     [Fact]
@@ -53,7 +74,7 @@ public class OrderControllerTest : TestBase
     }
 
     [Fact]
-    public async Task CreateOrder_Test()
+    public async Task CreateOrderOri_Test()
     {
         await SetPaiDanYuan();
         var orderDto = _fixture.Create<AddOrderDto>();

+ 14 - 0
src/Hotline.Application.Tests/Dto/CreateOrderOutDto.cs

@@ -0,0 +1,14 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace Hotline.Application.Tests.Dto;
+public class CreateOrderOutDto
+{
+    public string Id { get; set; }
+    public string No { get; set; }
+    public string Password { get; set; }
+    public string CallId { get; set; }
+}

+ 0 - 4
src/Hotline.Application.Tests/Hotline.Application.Tests.csproj

@@ -47,8 +47,4 @@
     <Using Include="Xunit" />
   </ItemGroup>
 
-  <ItemGroup>
-    <Folder Include="Authentications\" />
-  </ItemGroup>
-
 </Project>

+ 1 - 0
src/Hotline.Application.Tests/Infrastructure/TestSettingConstants.cs

@@ -8,6 +8,7 @@ namespace Hotline.Application.Tests.Infrastructure;
 public static class TestSettingConstants
 {
     public const string PaiDanYuanAccountName = "UnitTestPDY";
+    public const string FirstOrgAccountName = "cs";
 }
 
 public static class TestSessionConstants

+ 105 - 0
src/Hotline.Application.Tests/Mock/OrderServiceMock.cs

@@ -0,0 +1,105 @@
+using Hotline.Api.Controllers;
+using Hotline.Application.Tests.Dto;
+using Hotline.Repository.SqlSugar.Orders;
+using Hotline.Share.Dtos.FlowEngine;
+using Hotline.Share.Dtos.Order;
+using Hotline.Share.Enums.FlowEngine;
+using Hotline.Share.Tools;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace Hotline.Application.Tests.Mock;
+public class OrderServiceMock
+{
+    private readonly OrderController _orderController;
+    private CreateOrderOutDto CreateOrderOutDto;
+    private AddOrderDto AddOrderDto;
+    private readonly OrderRepository _orderRepository;
+
+    public OrderServiceMock(OrderController orderController, OrderRepository orderRepository)
+    {
+        _orderController = orderController;
+        _orderRepository = orderRepository;
+    }
+
+    public OrderServiceMock CreateOrder()
+    {
+        var json = "{\"sourceChannel\":\"因特网\",\"sourceChannelCode\":\"YTW\",\"transferPhone\":null,\"fromPhone\":null,\"acceptorName\":\"单元测试\",\"acceptorStaffNo\":\"\",\"fromName\":\"1233333333\",\"fromGender\":1,\"identityType\":1,\"licenceType\":null,\"licenceTypeCode\":null,\"licenceNo\":null,\"ageRange\":null,\"ageRangeCode\":null,\"contact\":\"12333333333\",\"isSecret\":false,\"acceptSms\":false,\"no\":null,\"title\":\"\",\"hotspotId\":\"1912\",\"eventCategoryId\":null,\"incidentTime\":null,\"incidentPurpose\":null,\"areaCode\":\"519800\",\"city\":\"省内\",\"street\":null,\"isRepeat\":\"false\",\"pushType\":null,\"pushTypeCode\":null,\"content\":\"单元测试内容\",\"duplicateIds\":[],\"duplicateTitle\":null,\"callAddress\":null,\"repeatableEventDetails\":[],\"orderExtension\":null,\"transpond\":false,\"isEnforcementOrder\":false,\"focusOnEventsArr\":[],\"focusOnEvents\":null,\"isFormalistWorkOrder\":false,\"isSensitiveWorkOrders\":false,\"isUrgent\":false,\"isThreePartyConference\":false,\"is24HoursComplete\":false,\"company\":null,\"orderPushTypes\":[],\"acceptType\":\"咨询\",\"acceptTypeCode\":\"10\",\"files\":[],\"hotspotSpliceName\":\"互联互通-转接乐山市12345\",\"hotspotName\":\"转接乐山市12345\",\"hotspotCode\":\"1912\",\"hotspotExternal\":\"19\",\"county\":\"\",\"town\":\"\"}";
+        AddOrderDto = json.FromJson<AddOrderDto>();
+        AddOrderDto.Title = "单元测试" + DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss");
+        CreateOrderOutDto = _orderController.Add(AddOrderDto).GetAwaiter().GetResult().ToJson().FromJson<CreateOrderOutDto>();
+        return this;
+    }
+
+    public CreateOrderOutDto GetCreateResult()
+    {
+        return CreateOrderOutDto;
+    }
+
+    public OrderServiceMock 办理到一级部门()
+    {
+        var stepNextInfo = _orderController.GetFlowStartOptions(CreateOrderOutDto.Id).GetAwaiter().GetResult().ToJson().FromJson<NextStepsDto<NextStepOption>>();
+        var stepInfo = stepNextInfo.Steps.FirstOrDefault(m => m.Value == "一级部门");
+        var stepOrg = stepInfo.Items.FirstOrDefault(m => m.OrgName == "测试部门");
+
+        var handleDto = new StartWorkflowDto<OrderHandleFlowDto>
+        { 
+            Data = new OrderHandleFlowDto
+            { 
+                OrderId = CreateOrderOutDto.Id,
+            },
+            Workflow = new BasicWorkflowDto
+            {
+                NextHandlers = [stepOrg],
+                NextStepCode = stepInfo.Key,
+                NextStepName = stepInfo.Value,
+                Opinion = "办理意见",
+                BackToCountersignEnd = false,
+                IsSms = false,
+                IsForwarded = false,
+                HandlerType = EHandlerType.OrgLevel,
+                BusinessType = EBusinessType.Department,
+            }
+        };
+        _orderController.StartFlow(handleDto).GetAwaiter().GetResult();
+        return this;
+    }
+
+    public OrderServiceMock 办理到二级部门(Action action = null)
+    {
+        action?.Invoke();
+        var stepNextInfo = _orderController.GetFlowStartOptions(CreateOrderOutDto.Id).GetAwaiter().GetResult().ToJson().FromJson<NextStepsDto<NextStepOption>>();
+        var stepInfo = stepNextInfo.Steps.FirstOrDefault(m => m.Value == "二级部门");
+        var stepOrg = stepInfo.Items.FirstOrDefault(m => m.OrgName == "测试二级部门");
+
+        var order = _orderRepository.Get(CreateOrderOutDto.Id);
+
+        var handleDto = new NextWorkflowDto<OrderHandleFlowDto>
+        {
+            Data = new OrderHandleFlowDto
+            {
+                OrderId = CreateOrderOutDto.Id,
+            },
+            Workflow = new NextWorkflowDto
+            {
+                NextHandlers = [stepOrg],
+                NextStepCode = stepInfo.Key,
+                NextStepName = stepInfo.Value,
+                Opinion = "办理到二级部门",
+                BackToCountersignEnd = false,
+                IsSms = false,
+                IsForwarded = false,
+                HandlerType = EHandlerType.OrgLevel,
+                BusinessType = EBusinessType.Department,
+                FlowDirection = EFlowDirection.OrgToOrg,
+                WorkflowId = order.WorkflowId,
+            }
+        };
+        _orderController.Handle(handleDto).GetAwaiter().GetResult();
+        return this;
+        return this;
+    }
+}

+ 1 - 0
src/Hotline.Application.Tests/Startup.cs

@@ -150,6 +150,7 @@ public class Startup
             services.AddScoped<ISessionContext, DefaultHttpContextAccessor>();
             services.AddScoped<ISessionContextProvider, SessionContextProvider>();
             services.AddScoped<ICallApplication, XingTangCallApplication>();
+            services.AddScoped<OrderServiceMock>();
             //ServiceLocator.Instance = services.BuildServiceProvider();
         }
 

+ 18 - 13
src/Hotline.Application.Tests/TestBase.cs

@@ -36,28 +36,33 @@ public class TestBase
         _userRepository = userRepository;
     }
 
-    public async Task SetPaiDanYuan()
+    public void SetPaiDanYuan()
     {
-        await SetOperator("派单员", "市民热线服务中心", "单元测试派单员", "001", "13408389849", EUserType.Normal, TestSettingConstants.PaiDanYuanAccountName);
+        SetOperator("派单员", "市民热线服务中心", "单元测试派单员", "001", "13408389849", EUserType.Normal, TestSettingConstants.PaiDanYuanAccountName);
     }
 
-    public async Task SetZuoXi()
+    public void SetZuoXi()
     {
-        await SetOperator("坐席", "市民热线服务中心", "单元测试派单员", "001", "13408389849", EUserType.Seat, TestSettingConstants.PaiDanYuanAccountName);
+        SetOperator("坐席", "市民热线服务中心", "单元测试派单员", "001", "13408389849", EUserType.Seat, TestSettingConstants.PaiDanYuanAccountName);
     }
 
-    private async Task SetOperator(string displayName, string fullOrgName, string name, string orgId, string phoneNo, EUserType userType, string userName)
+    public void Set一级部门()
+    { 
+        SetOperator("部门经办人", "测试部门", "测试", "001094", "13408389849", EUserType.Seat, TestSettingConstants.FirstOrgAccountName);
+    }
+
+    private void SetOperator(string displayName, string fullOrgName, string name, string orgId, string phoneNo, EUserType userType, string userName)
     {
-        var account = await _accountRepository.GetExtAsync(
+        var account = _accountRepository.GetExtAsync(
             d => d.UserName == userName,
-            d => d.Includes(x => x.Roles));
+            d => d.Includes(x => x.Roles)).GetAwaiter().GetResult();
 
         if (account == null)
         {
-            var roleId = await _roleRepository.Queryable()
+            var roleId = _roleRepository.Queryable()
                 .Where(m => m.DisplayName == displayName)
                 .Select(m => m.Id)
-                .FirstAsync();
+                .FirstAsync().GetAwaiter().GetResult();
             var newUser = new AddUserDto
             {
                 FullOrgName = fullOrgName,
@@ -69,13 +74,13 @@ public class TestBase
                 UserType = userType,
                 UserName = userName 
             };
-            var accountId = await _userController.Add(newUser);
+            var accountId = _userController.Add(newUser).GetAwaiter().GetResult();
             TestSessionConstants.UserId = accountId;
-            account = await _accountRepository.GetExtAsync(
+            account = _accountRepository.GetExtAsync(
                 d => d.UserName == userName,
-                d => d.Includes(x => x.Roles));
+                d => d.Includes(x => x.Roles)).GetAwaiter().GetResult();
         }
-        var user = await _userRepository.GetAsync(account.Id);
+        var user = _userRepository.GetAsync(account.Id).GetAwaiter().GetResult();
         TestSessionConstants.UserId = account.Id;
         TestSessionConstants.Roles = account.Roles.Select(m => m.Id).ToArray();
         TestSessionConstants.UserName = account.UserName;