using Hotline.Tests.Mock; using System.Diagnostics; using Hotline.Api.Controllers; using Hotline.Api.Controllers.OrderApi; using Hotline.Identity.Accounts; using Hotline.Identity.Roles; using Hotline.Settings; using Hotline.ThirdAccountDomainServices; using Hotline.ThirdAccountDomainServices.Interfaces; using Hotline.Users; using Microsoft.AspNetCore.Http; using Microsoft.Extensions.DependencyInjection; using XF.Domain.Cache; using XF.Domain.Repository; using Hotline.Orders; using Hotline.Share.Dtos.FlowEngine; using Hotline.Share.Dtos.FlowEngine.Workflow; using Hotline.Share.Dtos.Order; using Hotline.Share.Dtos.Order.OrderDelay; using Hotline.Share.Enums.FlowEngine; using Hotline.Share.Enums.Order; using MapsterMapper; using Xunit.Abstractions; using Microsoft.AspNetCore.Mvc; namespace Hotline.Tests.Controller { public class OrderDelayControllerTest : TestBase { private readonly OrderController _orderController; private readonly OrderDelayController _orderDelayController; private readonly OrderServiceMock _orderServiceMock; private readonly IOrderDelayRepository _orderDelayRepository; private readonly IOrderRepository _orderRepository; private readonly IMapper _mapper; private readonly ITestOutputHelper _testOutputHelper; public OrderDelayControllerTest(IAccountRepository accountRepository, IRepository roleRepository, UserController userController, IServiceScopeFactory scopeFactory, IRepository userRepository, IHttpContextAccessor httpContextAccessor, IThirdIdentiyService thirdIdentiyService, IThirdAccountRepository thirdAccountRepository, ITypedCache cacheSettingData, ThirdAccounSupplierFactory thirdAccountDomainFactory, OrderController orderController, OrderDelayController orderDelayController, OrderServiceMock orderServiceMock, IOrderDelayRepository orderDelayRepository, IOrderRepository orderRepository, IMapper mapper, ITestOutputHelper testOutputHelper, IServiceProvider serviceProvider) : base(accountRepository, roleRepository, userController, scopeFactory, userRepository, httpContextAccessor, thirdIdentiyService, thirdAccountRepository, cacheSettingData, thirdAccountDomainFactory, serviceProvider) { _orderController = orderController; _orderDelayController = orderDelayController; _orderServiceMock = orderServiceMock; _orderDelayRepository = orderDelayRepository; _orderRepository = orderRepository; _mapper = mapper; _testOutputHelper = testOutputHelper; _orderController.ControllerContext = new ControllerContext { HttpContext = new DefaultHttpContext { RequestAborted = CancellationToken.None } }; _orderDelayController.ControllerContext = new ControllerContext { HttpContext = new DefaultHttpContext { RequestAborted = CancellationToken.None } }; } [Fact] public async Task OrderDelayBatchReviewTest() { SetZuoXi(); var delayIds = new List(); for (int i = 0; i < 10; i++) { var order = _orderServiceMock.CreateOrder() .办理到一级部门() //.办理到二级部门(Set一级部门) //.办理一级部门汇总(Set二级部门) //.办理到归档(Set一级部门) //.发布工单(SetZuoXi) .GetCreateResult(); //var order = await _orderRepository.Queryable() // .FirstAsync(o => o.Id == orderId); var delayId = _orderServiceMock.申请延期(Set一级部门); delayIds.Add(delayId); } Set班长(); var delays = await _orderDelayController.QueryWaited(new DelayListDto { IsApply = false, }); var delayWithIds = delays .Where(d => delayIds.Contains(d.Id)) .Select(d => new DelayWithStepId { DelayId = d.Id, StepId = d.StepId, WorkflowId = d.WorkflowId }).ToList(); var delay = delays.First(); var option = _orderController.OrderDelayNextsteps(delay.WorkflowId).Result as NextStepsWithOpinionDto; var step = option.Steps.First(d=>d.StepType == EStepType.End); //var req = new BatchDelayNextFlowDto //{ // DelayId = delayIds.ToArray(), // IsPass = true, // NextWorkflow = new NextWorkflowDto // { // NextStepCode = step.Key, // NextStepName = step.Value, // } //}; var req = new BatchOrderDelayReviewRequest { IsPass = true, DelayWithStepIds = delayWithIds, NextWorkflow = new NextWorkflowDto { NextStepCode = step.Key, NextStepName = step.Value } }; _testOutputHelper.WriteLine($"开始审批"); var sw = new Stopwatch(); sw.Start(); await _orderDelayController.BatchReview(req); sw.Stop(); _testOutputHelper.WriteLine($"耗时:{sw.ElapsedMilliseconds}ms"); //var delay = await _orderDelayRepository.Queryable() // .Includes(d => d.Order) // .FirstAsync(d => d.Id == delayId); //Assert.Equal(EDelayState.Pass, delay.DelayState); //Assert.True(delay.Order.ExpiredTime > order.ExpiredTime); //Console.WriteLine(delay.Id); } [Fact] public void QueryWaitForApproveDelaysTest() { _testOutputHelper.WriteLine("123"); } } }