using AutoFixture; using Castle.DynamicProxy; using Hotline.Api.Controllers; using Hotline.Application.Tests.Infrastructure; using Hotline.Application.Tests.Mock; using Hotline.FlowEngine.Notifications; using Hotline.FlowEngine.WorkflowModules; 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.FlowEngine; using Hotline.Share.Enums.Settings; using Hotline.Share.Tools; using Hotline.Users; using MediatR; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc.Testing; using Microsoft.Extensions.DependencyInjection; using Moq; using Shouldly; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using XF.Domain.Authentications; using XF.Domain.Repository; namespace Hotline.Application.Tests.Controller; public class OrderControllerTest : TestBase { private readonly OrderController _orderController; private readonly IRepository _hotspotRepository; private readonly IOrderRepository _orderRepository; private readonly OrderServiceMock _orderServiceMock; private readonly IRepository _orderPublishRepository; private readonly INotificationHandler _orderPublishEndWorkflowHandler; public OrderControllerTest(IAccountRepository accountRepository, IRepository roleRepository, UserController userController, IRepository hotspotRepository, OrderController orderController, IOrderRepository orderRepository, IServiceScopeFactory scopeFactory, IRepository userRepository, OrderServiceMock orderServiceMock, IRepository orderPublishRepository, INotificationHandler orderPublishEndWorkflowHandler) : base(accountRepository, roleRepository, userController, scopeFactory, userRepository) { _hotspotRepository = hotspotRepository; _orderController = orderController; _orderController.ControllerContext = new ControllerContext { HttpContext = new DefaultHttpContext() }; _orderRepository = orderRepository; _orderServiceMock = orderServiceMock; _orderPublishRepository = orderPublishRepository; _orderPublishEndWorkflowHandler = orderPublishEndWorkflowHandler; } /// /// 创建工单并派送给派单员 /// /// [Fact] public async Task ToPaiDanYuan_Test() { SetZuoXi(); var order = _orderServiceMock.CreateOrder() .办理到派单员() .GetCreateResult(); order.ShouldNotBeNull(); } /// /// 验证中心直办工单归档后自动发布 /// 是否推诿, 是否不积极 /// /// [Fact] public async Task AutoPublish_Test() { SetZuoXi(); var order = _orderServiceMock.CreateOrder() .办理到派单员() .办理到归档(SetPaiDanYuan, data => { data.IsEvasive = true; data.IsInactively = true; }) .GetCreateResult(); var publish = await _orderPublishRepository.GetAsync(m => m.No == order.No); publish.ShouldNotBeNull(order.No); var orderEntity = await _orderRepository.GetAsync(order.Id); orderEntity.IsEvasive.ShouldBeTrue(); orderEntity.IsInactively.ShouldBeTrue(); } [Fact] public void Set一级部门_Test() { Set一级部门(); } [Fact] public async Task IsStepUrgent_True_Test() { SetZuoXi(); var order = _orderServiceMock.CreateOrder() .办理到派单员() .办理到归档(SetPaiDanYuan, data => data.IsStepUrgent = true, workflow => { workflow.BusinessType = EBusinessType.DepartmentLeader; workflow.Opinion = "测试保存勾选紧急"; }) .GetCreateResult(); order.ShouldNotBeNull(); order.Id.ShouldNotBeNull(); var orderDto = await _orderController.Get(order.Id); orderDto.IsStepUrgent.ShouldBeTrue(); orderDto.IsStepUrgenText.ShouldBe("紧急"); } /// /// 测试在办理的过程中能正确保存 /// 1.与市民电话联系 /// 2.已赴现场处置 /// 3.其他 /// 4.其他原因 /// 5.经办人 /// 6.经办人电话 /// 7.沟通时间 /// 8.沟通地点 /// /// [Fact] public async Task CreateOrder_Test() { SetZuoXi(); var order = _orderServiceMock.CreateOrder() .办理到一级部门() .办理到二级部门(Set一级部门) .办理一级部门汇总(Set二级部门) .GetCreateResult(); order.Id.ShouldNotBeNull(); var orderEntity = await _orderRepository.GetAsync(order.Id); orderEntity.RealCommunicationAddress.ShouldNotBeNull(); orderEntity.RealCommunicationTime.ShouldNotBeNull(); orderEntity.RealContactLocale.ShouldNotBeNull(); orderEntity.RealContactLocale.ShouldBe(true); orderEntity.RealHandlerName.ShouldNotBeNull(); orderEntity.RealHandlerPhone.ShouldNotBeNull(); } [Fact] public async Task GetOrderHandleTimeConfigByAcceptType_Test() { var result = await _orderController.GetOrderHandleTimeConfigByAcceptType(Share.Enums.FlowEngine.EFlowDirection.OrgToCenter, "10"); result.Count.ShouldBe(1); result.TimeText.ShouldBe("1个工作日"); result.TimeType.ShouldBe(ETimeType.WorkDay); } }