SnapshotUserApplicationTest.cs 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  1. using Hotline.Api.Controllers;
  2. using Hotline.Application.Snapshot.Contracts;
  3. using Hotline.Caching.Interfaces;
  4. using Hotline.Identity.Accounts;
  5. using Hotline.Identity.Roles;
  6. using Hotline.Orders;
  7. using Hotline.Settings;
  8. using Hotline.Share.Dtos.Snapshot;
  9. using Hotline.Share.Tools;
  10. using Hotline.Snapshot;
  11. using Hotline.Snapshot.IRepository;
  12. using Hotline.ThirdAccountDomainServices;
  13. using Hotline.ThirdAccountDomainServices.Interfaces;
  14. using Hotline.Users;
  15. using Microsoft.AspNetCore.Http;
  16. using Microsoft.Extensions.DependencyInjection;
  17. using Shouldly;
  18. using XF.Domain.Cache;
  19. using XF.Domain.Repository;
  20. namespace Hotline.Tests.Application;
  21. public class SnapshotUserApplicationTest : TestBase
  22. {
  23. private readonly ISnapshotUserApplication _snapshotUserApplication;
  24. private readonly ISystemDicDataCacheManager _dicData;
  25. private readonly ICitizenRepository _citizenRepository;
  26. private readonly ISafetyTypeRepository _safetyTypeRepository;
  27. public SnapshotUserApplicationTest(IAccountRepository accountRepository, IRepository<Role> roleRepository, UserController userController, IServiceScopeFactory scopeFactory, IRepository<User> userRepository, IHttpContextAccessor httpContextAccessor, IThirdIdentiyService thirdIdentiyService, IThirdAccountRepository thirdAccountRepository, ITypedCache<SystemSetting> cacheSettingData, ThirdAccounSupplierFactory thirdAccountDomainFactory, IServiceProvider serviceProvider, ISnapshotUserApplication snapshotUserApplication, ISystemDicDataCacheManager dicData, ICitizenRepository citizenRepository, ISafetyTypeRepository safetyTypeRepository) : base(accountRepository, roleRepository, userController, scopeFactory, userRepository, httpContextAccessor, thirdIdentiyService, thirdAccountRepository, cacheSettingData, thirdAccountDomainFactory, serviceProvider)
  28. {
  29. _snapshotUserApplication = snapshotUserApplication;
  30. _dicData = dicData;
  31. _citizenRepository = citizenRepository;
  32. _safetyTypeRepository = safetyTypeRepository;
  33. }
  34. [Fact]
  35. public async Task SnapshotUserApplication_Test()
  36. {
  37. var searchInDto = new GetThirdCitizenInDto
  38. {
  39. PhoneNumber = "33"
  40. };
  41. var citizenSearchItems = await _snapshotUserApplication.GetThirdCitizenAsync(searchInDto).ToListAsync();
  42. citizenSearchItems.ShouldNotBeNull();
  43. citizenSearchItems.Count.ShouldNotBe(0);
  44. var newSafetyType = new SafetyType { Name = "安全卫士" };
  45. var safetyType = await _safetyTypeRepository.Queryable().Where(m => m.Name == newSafetyType.Name).FirstAsync();
  46. safetyType ??= new SafetyType
  47. {
  48. Id = await _safetyTypeRepository.AddAsync(newSafetyType)
  49. };
  50. var citizen = await _citizenRepository.Queryable()
  51. .LeftJoin<CitizenRelationSafetyType>((citizen, relation) => relation.CitizenId == citizen.Id)
  52. .Where((citizen, relation) => relation.CitizenId == null)
  53. .FirstAsync();
  54. var addDto = new AddCitizenRelationSafetyTypeInDto
  55. {
  56. CitizenIds = [citizen.Id],
  57. SafetyTypeId = safetyType.Id,
  58. };
  59. await _snapshotUserApplication.AddCitizenRelationSafetyType(addDto, CancellationToken.None);
  60. var inDto = new CitizenRelationSafetyTypeInDto
  61. {
  62. SafetyTypeId = safetyType.Id
  63. };
  64. var items = await _snapshotUserApplication.GetCitizenRelationSafetyType(inDto).ToListAsync();
  65. var item = items.FirstOrDefault(m => m.CitizenId == citizen.Id && m.SafetyTypeId == safetyType.Id);
  66. item.ShouldNotBeNull();
  67. item.SafetyTypeName.ShouldBe(safetyType.Name);
  68. item.SafetyTypeId.ShouldBe(safetyType.Id);
  69. item.CitizenId.ShouldBe(citizen.Id);
  70. item.CitizenName.ShouldBe(citizen.Name);
  71. var newSafetyTypeXuanChuan = new SafetyType { Name = "宣传员" };
  72. var safetyTypeXuanChuan = await _safetyTypeRepository.Queryable()
  73. .Where(m => m.Name == newSafetyTypeXuanChuan.Name).FirstAsync();
  74. safetyTypeXuanChuan ??= new SafetyType
  75. {
  76. Id = await _safetyTypeRepository.AddAsync(newSafetyTypeXuanChuan)
  77. };
  78. addDto = new AddCitizenRelationSafetyTypeInDto
  79. {
  80. CitizenIds = [citizen.Id],
  81. SafetyTypeId = safetyTypeXuanChuan.Id,
  82. };
  83. await _snapshotUserApplication.AddCitizenRelationSafetyType(addDto, CancellationToken.None);
  84. var deleteInDto = new DeleteCitizenRelationSafetyTypeInDto
  85. {
  86. Items =
  87. [
  88. new() {
  89. CitizenId = citizen.Id,
  90. SafetyTypeId = safetyType.Id
  91. }
  92. ]
  93. };
  94. await _snapshotUserApplication.DeleteCitizenRelationSafetyAsync(deleteInDto);
  95. items = await _snapshotUserApplication.GetCitizenRelationSafetyType(inDto).ToListAsync();
  96. item = items.FirstOrDefault(m => m.CitizenId == citizen.Id && m.SafetyTypeId == safetyType.Id);
  97. item.ShouldBeNull();
  98. inDto = new CitizenRelationSafetyTypeInDto
  99. {
  100. SafetyTypeId = safetyTypeXuanChuan.Id
  101. };
  102. items = await _snapshotUserApplication.GetCitizenRelationSafetyType(inDto).ToListAsync();
  103. item = items.FirstOrDefault(m => m.CitizenId == citizen.Id && m.SafetyTypeId == safetyTypeXuanChuan.Id);
  104. item.SafetyTypeName.ShouldBe(safetyTypeXuanChuan.Name);
  105. item.SafetyTypeId.ShouldBe(safetyTypeXuanChuan.Id);
  106. item.CitizenId.ShouldBe(citizen.Id);
  107. item.CitizenName.ShouldBe(citizen.Name);
  108. }
  109. }