您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符

67 行
2.4KB

  1. using System.Security.Claims;
  2. using CartWise.Application.Interfaces;
  3. using CartWise.Infrastructure.Identity;
  4. using Microsoft.AspNetCore.Authorization;
  5. using Microsoft.AspNetCore.Identity;
  6. using Microsoft.Extensions.DependencyInjection;
  7. namespace CartWise.Web.Tests;
  8. public class HouseholdAuthorizationTests : IClassFixture<CartWiseWebApplicationFactory>
  9. {
  10. private readonly CartWiseWebApplicationFactory _factory;
  11. public HouseholdAuthorizationTests(CartWiseWebApplicationFactory factory)
  12. {
  13. _factory = factory;
  14. }
  15. [Fact]
  16. public async Task HouseholdMemberPolicy_SucceedsForMemberAndFailsForNonMember()
  17. {
  18. using var scope = _factory.Services.CreateScope();
  19. var services = scope.ServiceProvider;
  20. var userManager = services.GetRequiredService<UserManager<ApplicationUser>>();
  21. var householdService = services.GetRequiredService<IHouseholdService>();
  22. var authorizationService = services.GetRequiredService<IAuthorizationService>();
  23. var userA = await CreateUserAsync(userManager, "alice@example.com");
  24. var userB = await CreateUserAsync(userManager, "bob@example.com");
  25. var householdA = await householdService.CreateHouseholdAsync("Household A", userA.Id);
  26. Assert.True(householdA.IsSuccess);
  27. var principalA = CreatePrincipal(userA);
  28. var principalB = CreatePrincipal(userB);
  29. var ownResult = await authorizationService.AuthorizeAsync(principalA, householdA.Value!.HouseholdId, "HouseholdMember");
  30. var crossResult = await authorizationService.AuthorizeAsync(principalB, householdA.Value!.HouseholdId, "HouseholdMember");
  31. Assert.True(ownResult.Succeeded);
  32. Assert.False(crossResult.Succeeded);
  33. }
  34. private static async Task<ApplicationUser> CreateUserAsync(UserManager<ApplicationUser> userManager, string email)
  35. {
  36. var user = new ApplicationUser
  37. {
  38. UserName = email,
  39. Email = email,
  40. DisplayName = email,
  41. CreatedUtc = DateTime.UtcNow
  42. };
  43. var result = await userManager.CreateAsync(user, "Sup3rSecret!23");
  44. Assert.True(result.Succeeded);
  45. return user;
  46. }
  47. private static ClaimsPrincipal CreatePrincipal(ApplicationUser user)
  48. {
  49. var identity = new ClaimsIdentity([new Claim(ClaimTypes.NameIdentifier, user.Id)], "Test");
  50. return new ClaimsPrincipal(identity);
  51. }
  52. }

Powered by TurnKey Linux.