DefaultCallApplicationTest.cs 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143
  1. using AutoFixture;
  2. using Hotline.Api.Controllers;
  3. using Hotline.Application.CallCenter;
  4. using Hotline.CallCenter.Calls;
  5. using Hotline.Identity.Accounts;
  6. using Hotline.Identity.Roles;
  7. using Hotline.Orders;
  8. using Hotline.Share.Dtos.CallCenter;
  9. using Hotline.Share.Dtos.Order;
  10. using Hotline.Share.Enums.CallCenter;
  11. using Hotline.Users;
  12. using Microsoft.AspNetCore.Http;
  13. using Microsoft.Extensions.DependencyInjection;
  14. using Shouldly;
  15. using SqlSugar.Extensions;
  16. using XF.Domain.Repository;
  17. namespace Hotline.Application.Tests.Application;
  18. public class DefaultCallApplicationTest : TestBase
  19. {
  20. private readonly XingTangCallApplication _defaultCallApplication;
  21. private readonly IOrderVisitRepository _orderVisitRepository;
  22. private readonly IRepository<CallNative> _callNativeRepository;
  23. public readonly IFixture _fixture;
  24. private readonly IOrderRepository _orderRepository;
  25. public DefaultCallApplicationTest(IAccountRepository accountRepository, IRepository<Role> roleRepository, UserController userController, IServiceScopeFactory scopeFactory, IRepository<User> userRepository, IHttpContextAccessor httpContextAccessor, XingTangCallApplication defaultCallApplication, IOrderVisitRepository orderVisitRepository, IRepository<CallNative> callNativeRepository, IOrderRepository orderRepository) : base(accountRepository, roleRepository, userController, scopeFactory, userRepository, httpContextAccessor)
  26. {
  27. _fixture = new Fixture();
  28. _defaultCallApplication = defaultCallApplication;
  29. _orderVisitRepository = orderVisitRepository;
  30. _callNativeRepository = callNativeRepository;
  31. _orderRepository = orderRepository;
  32. }
  33. [Fact]
  34. public async Task QueryCallsFixed_Test()
  35. {
  36. var inDto = new QueryCallsFixedDto();
  37. inDto.CallStartTimeEnd = DateTime.Now;
  38. inDto.CallStartTimeStart = "2024/10/01 00:00:00".ObjToDate();
  39. var items = await _defaultCallApplication.QueryCallsFixedAsync(inDto, new CancellationToken());
  40. items.ShouldNotBeNull();
  41. }
  42. [Fact]
  43. public async Task QueryCallsFixedThree_Test()
  44. {
  45. var inDto = new QueryCallsFixedDto();
  46. inDto.CallStartTimeEnd = DateTime.Now;
  47. inDto.CallStartTimeStart = "2024/11/08 00:00:00".ObjToDate();
  48. inDto.FromNo = "8205175";
  49. var items1 = await _defaultCallApplication.QueryCallsFixedAsync(inDto, new CancellationToken());
  50. items1.ShouldNotBeNull();
  51. foreach (var item in items1.Where(m => m.IsOrder))
  52. {
  53. item.Title.ShouldNotBeNull();
  54. item.OrderId.ShouldNotBeNull();
  55. item.OrderNo.ShouldNotBeNull();
  56. }
  57. inDto.ToNo = "13990006670";
  58. inDto.FromNo = null;
  59. inDto.Type = 2;
  60. var items = await _defaultCallApplication.QueryCallsFixedAsync(inDto, new CancellationToken());
  61. items.ShouldNotBeNull();
  62. items.Count().ShouldNotBe(0, "通过被叫号码查询失败");
  63. foreach (var item in items.Where(m => m.IsVisit))
  64. {
  65. item.Title.ShouldNotBeNull();
  66. item.OrderId.ShouldNotBeNull();
  67. item.OrderNo.ShouldNotBeNull();
  68. }
  69. }
  70. [Fact]
  71. public async Task GetCall_Test()
  72. {
  73. var result = await _defaultCallApplication.GetCallAsync("01J2ZP7J6X3K5FXN4B5KD54FBA", CancellationToken.None);
  74. result.ShouldNotBeNull();
  75. result = await _defaultCallApplication.GetCallAsync("2024062419085100943CTI", CancellationToken.None);
  76. result.ShouldNotBeNull();
  77. }
  78. [Fact]
  79. public async Task OrderVisitRelevanceCallId_Test()
  80. {
  81. var inDto = new VisitDto();
  82. inDto.CallId = "202411151100300273100069FLOW";
  83. inDto.Id = "08dd046b-b3b3-4ccf-8a15-09133d27dce0";
  84. await _defaultCallApplication.OrderVisitRelevanceCallIdAsync(inDto, CancellationToken.None);
  85. var visit = await _orderVisitRepository.GetAsync(inDto.Id);
  86. visit.CallId.ShouldBe("01JCPW9ZJ2683ZVN69ZGNZ0A4B");
  87. }
  88. /// <summary>
  89. /// 测试三方通话后, 工单保存时没有关联到正确的通话记录, 使用本方法能不能修复
  90. /// </summary>
  91. /// <returns></returns>
  92. [Fact]
  93. public async Task OrderRelateCallHandler_Test()
  94. {
  95. var callNo = DateTime.Now.ToString("yyyyMMddhhmmss") + "Flow";
  96. var inDto = _fixture.Build<CallNative>()
  97. .With(m => m.Id, Ulid.NewUlid().ToString())
  98. .With(m => m.CallNo, callNo)
  99. .With(m => m.Direction, ECallDirection.In)
  100. .Create();
  101. await _callNativeRepository.AddAsync(inDto);
  102. var inDto2 = _fixture.Build<CallNative>()
  103. .With(m => m.Id, Ulid.NewUlid().ToString())
  104. .With(m => m.Direction, ECallDirection.Out)
  105. .With(m => m.CallNo, callNo)
  106. .Create();
  107. await _callNativeRepository.AddAsync(inDto2);
  108. var orderId = await _orderRepository.Queryable()
  109. .Where(m => string.IsNullOrEmpty(m.CallId))
  110. .OrderByDescending(m => m.CreationTime)
  111. .Select(m => m.Id)
  112. .FirstAsync();
  113. await _orderRepository.Updateable()
  114. .SetColumns(m => m.CallId == inDto2.Id)
  115. .Where(m => m.Id == orderId)
  116. .ExecuteCommandAsync();
  117. await _defaultCallApplication.OrderRelateCallHandlerAsync(orderId, CancellationToken.None);
  118. (await _orderRepository.Queryable().Where(m => m.Id == orderId).Select(m => m.CallId).FirstAsync())
  119. .ShouldBe(inDto.Id);
  120. }
  121. //[Fact]
  122. public async Task OrderRelateCallHandler2_Test()
  123. {
  124. var orderId = "08dd0d21-0221-43cf-8230-3179dc6aefca";
  125. await _defaultCallApplication.OrderRelateCallHandlerAsync(orderId, CancellationToken.None);
  126. }
  127. }