SnapshotUserApplicationTest.cs 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  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 newSafetyType = new SafetyType { Name = "安全卫士" };
  38. var safetyType = await _safetyTypeRepository.Queryable().Where(m => m.Name == newSafetyType.Name).FirstAsync();
  39. safetyType ??= new SafetyType
  40. {
  41. Id = await _safetyTypeRepository.AddAsync(newSafetyType)
  42. };
  43. var citizen = await _citizenRepository.Queryable()
  44. .LeftJoin<CitizenRelationSafetyType>((citizen, relation) => relation.CitizenId == citizen.Id)
  45. .Where((citizen, relation) => relation.CitizenId == null)
  46. .FirstAsync();
  47. var addDto = new AddCitizenRelationSafetyTypeInDto
  48. {
  49. CitizenIds = [citizen.Id],
  50. SafetyTypeId = safetyType.Id,
  51. };
  52. await _snapshotUserApplication.AddCitizenRelationSafetyType(addDto, CancellationToken.None);
  53. var inDto = new CitizenRelationSafetyTypeInDto
  54. {
  55. SafetyTypeId = safetyType.Id
  56. };
  57. var items = await _snapshotUserApplication.GetCitizenRelationSafetyType(inDto).ToListAsync();
  58. var item = items.FirstOrDefault(m => m.CitizenId == citizen.Id && m.SafetyTypeId == safetyType.Id);
  59. item.ShouldNotBeNull();
  60. item.SafetyTypeName.ShouldBe(safetyType.Name);
  61. item.SafetyTypeId.ShouldBe(safetyType.Id);
  62. item.CitizenId.ShouldBe(citizen.Id);
  63. item.CitizenName.ShouldBe(citizen.Name);
  64. var newSafetyTypeXuanChuan = new SafetyType { Name = "宣传员" };
  65. var safetyTypeXuanChuan = await _safetyTypeRepository.Queryable()
  66. .Where(m => m.Name == newSafetyTypeXuanChuan.Name).FirstAsync();
  67. safetyTypeXuanChuan ??= new SafetyType
  68. {
  69. Id = await _safetyTypeRepository.AddAsync(newSafetyTypeXuanChuan)
  70. };
  71. addDto = new AddCitizenRelationSafetyTypeInDto
  72. {
  73. CitizenIds = [citizen.Id],
  74. SafetyTypeId = safetyTypeXuanChuan.Id,
  75. };
  76. await _snapshotUserApplication.AddCitizenRelationSafetyType(addDto, CancellationToken.None);
  77. var deleteInDto = new DeleteCitizenRelationSafetyTypeInDto
  78. {
  79. Items =
  80. [
  81. new() {
  82. CitizenId = citizen.Id,
  83. SafetyTypeId = safetyType.Id
  84. }
  85. ]
  86. };
  87. await _snapshotUserApplication.DeleteCitizenRelationSafetyAsync(deleteInDto);
  88. items = await _snapshotUserApplication.GetCitizenRelationSafetyType(inDto).ToListAsync();
  89. item = items.FirstOrDefault(m => m.CitizenId == citizen.Id && m.SafetyTypeId == safetyType.Id);
  90. item.ShouldBeNull();
  91. inDto = new CitizenRelationSafetyTypeInDto
  92. {
  93. SafetyTypeId = safetyTypeXuanChuan.Id
  94. };
  95. items = await _snapshotUserApplication.GetCitizenRelationSafetyType(inDto).ToListAsync();
  96. item = items.FirstOrDefault(m => m.CitizenId == citizen.Id && m.SafetyTypeId == safetyTypeXuanChuan.Id);
  97. item.SafetyTypeName.ShouldBe(safetyTypeXuanChuan.Name);
  98. item.SafetyTypeId.ShouldBe(safetyTypeXuanChuan.Id);
  99. item.CitizenId.ShouldBe(citizen.Id);
  100. item.CitizenName.ShouldBe(citizen.Name);
  101. }
  102. }