OrderControllerTest.cs 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162
  1. using AutoFixture;
  2. using Castle.DynamicProxy;
  3. using Hotline.Api.Controllers;
  4. using Hotline.Application.Tests.Infrastructure;
  5. using Hotline.Application.Tests.Mock;
  6. using Hotline.FlowEngine.Notifications;
  7. using Hotline.FlowEngine.WorkflowModules;
  8. using Hotline.Identity.Accounts;
  9. using Hotline.Identity.Roles;
  10. using Hotline.Orders;
  11. using Hotline.Settings.Hotspots;
  12. using Hotline.Share.Dtos.File;
  13. using Hotline.Share.Dtos.FlowEngine;
  14. using Hotline.Share.Dtos.Order;
  15. using Hotline.Share.Dtos.Users;
  16. using Hotline.Share.Enums.FlowEngine;
  17. using Hotline.Share.Enums.Settings;
  18. using Hotline.Share.Tools;
  19. using Hotline.Users;
  20. using MediatR;
  21. using Microsoft.AspNetCore.Http;
  22. using Microsoft.AspNetCore.Mvc;
  23. using Microsoft.AspNetCore.Mvc.Testing;
  24. using Microsoft.Extensions.DependencyInjection;
  25. using Moq;
  26. using Shouldly;
  27. using System;
  28. using System.Collections.Generic;
  29. using System.Linq;
  30. using System.Text;
  31. using System.Threading.Tasks;
  32. using XF.Domain.Authentications;
  33. using XF.Domain.Repository;
  34. namespace Hotline.Application.Tests.Controller;
  35. public class OrderControllerTest : TestBase
  36. {
  37. private readonly OrderController _orderController;
  38. private readonly IRepository<Hotspot> _hotspotRepository;
  39. private readonly IOrderRepository _orderRepository;
  40. private readonly OrderServiceMock _orderServiceMock;
  41. private readonly IRepository<OrderPublish> _orderPublishRepository;
  42. private readonly INotificationHandler<EndWorkflowNotify> _orderPublishEndWorkflowHandler;
  43. public OrderControllerTest(IAccountRepository accountRepository, IRepository<Role> roleRepository, UserController userController, IRepository<Hotspot> hotspotRepository, OrderController orderController, IOrderRepository orderRepository, IServiceScopeFactory scopeFactory, IRepository<User> userRepository, OrderServiceMock orderServiceMock, IRepository<OrderPublish> orderPublishRepository, INotificationHandler<EndWorkflowNotify> orderPublishEndWorkflowHandler) : base(accountRepository, roleRepository, userController, scopeFactory, userRepository)
  44. {
  45. _hotspotRepository = hotspotRepository;
  46. _orderController = orderController;
  47. _orderController.ControllerContext = new ControllerContext
  48. {
  49. HttpContext = new DefaultHttpContext()
  50. };
  51. _orderRepository = orderRepository;
  52. _orderServiceMock = orderServiceMock;
  53. _orderPublishRepository = orderPublishRepository;
  54. _orderPublishEndWorkflowHandler = orderPublishEndWorkflowHandler;
  55. }
  56. /// <summary>
  57. /// 创建工单并派送给派单员
  58. /// </summary>
  59. /// <returns></returns>
  60. [Fact]
  61. public async Task ToPaiDanYuan_Test()
  62. {
  63. SetZuoXi();
  64. var order = _orderServiceMock.CreateOrder()
  65. .办理到派单员()
  66. .GetCreateResult();
  67. order.ShouldNotBeNull();
  68. }
  69. /// <summary>
  70. /// 验证中心直办工单归档后自动发布
  71. /// 是否推诿, 是否不积极
  72. /// </summary>
  73. /// <returns></returns>
  74. [Fact]
  75. public async Task AutoPublish_Test()
  76. {
  77. SetZuoXi();
  78. var order = _orderServiceMock.CreateOrder()
  79. .办理到派单员()
  80. .办理到归档(SetPaiDanYuan, data =>
  81. {
  82. data.IsEvasive = true;
  83. data.IsInactively = true;
  84. })
  85. .GetCreateResult();
  86. var publish = await _orderPublishRepository.GetAsync(m => m.No == order.No);
  87. publish.ShouldNotBeNull(order.No);
  88. var orderEntity = await _orderRepository.GetAsync(order.Id);
  89. orderEntity.IsEvasive.ShouldBeTrue();
  90. orderEntity.IsInactively.ShouldBeTrue();
  91. }
  92. [Fact]
  93. public void Set一级部门_Test()
  94. {
  95. Set一级部门();
  96. }
  97. [Fact]
  98. public async Task IsStepUrgent_True_Test()
  99. {
  100. SetZuoXi();
  101. var order = _orderServiceMock.CreateOrder()
  102. .办理到派单员()
  103. .办理到归档(SetPaiDanYuan, data => data.IsStepUrgent = true, workflow =>
  104. {
  105. workflow.BusinessType = EBusinessType.DepartmentLeader;
  106. workflow.Opinion = "测试保存勾选紧急";
  107. })
  108. .GetCreateResult();
  109. order.ShouldNotBeNull();
  110. order.Id.ShouldNotBeNull();
  111. var orderDto = await _orderController.Get(order.Id);
  112. orderDto.IsStepUrgent.ShouldBeTrue();
  113. orderDto.IsStepUrgenText.ShouldBe("紧急");
  114. }
  115. /// <summary>
  116. /// 测试在办理的过程中能正确保存
  117. /// 1.与市民电话联系
  118. /// 2.已赴现场处置
  119. /// 3.其他
  120. /// 4.其他原因
  121. /// 5.经办人
  122. /// 6.经办人电话
  123. /// 7.沟通时间
  124. /// 8.沟通地点
  125. /// </summary>
  126. /// <returns></returns>
  127. [Fact]
  128. public async Task CreateOrder_Test()
  129. {
  130. SetZuoXi();
  131. var order = _orderServiceMock.CreateOrder()
  132. .办理到一级部门()
  133. .办理到二级部门(Set一级部门)
  134. .办理一级部门汇总(Set二级部门)
  135. .GetCreateResult();
  136. order.Id.ShouldNotBeNull();
  137. var orderEntity = await _orderRepository.GetAsync(order.Id);
  138. orderEntity.RealCommunicationAddress.ShouldNotBeNull();
  139. orderEntity.RealCommunicationTime.ShouldNotBeNull();
  140. orderEntity.RealContactLocale.ShouldNotBeNull();
  141. orderEntity.RealContactLocale.ShouldBe(true);
  142. orderEntity.RealHandlerName.ShouldNotBeNull();
  143. orderEntity.RealHandlerPhone.ShouldNotBeNull();
  144. }
  145. [Fact]
  146. public async Task GetOrderHandleTimeConfigByAcceptType_Test()
  147. {
  148. var result = await _orderController.GetOrderHandleTimeConfigByAcceptType(Share.Enums.FlowEngine.EFlowDirection.OrgToCenter, "10");
  149. result.Count.ShouldBe(1);
  150. result.TimeText.ShouldBe("1个工作日");
  151. result.TimeType.ShouldBe(ETimeType.WorkDay);
  152. }
  153. }