public void AddUserClaim_ShouldThrowNotFoundRpcException() { // Arrange var users = TestData.FileStorage.GetUsers(); var user = users.First(); var host = TestHost.WithClaimsFromBearerAuthentication(new Claim(JwtClaimTypes.Subject, user.Id.ToString())); host.Server.CleanupDbContext(); var request = new AddUserClaimRequest { UserId = new UserId(), Claim = new UserClaimDto { Type = CustomClaimTypes.StripeCustomer, Value = "customerId" } }; var client = new IdentityService.IdentityServiceClient(host.CreateChannel()); // Act var func = new Func <Task>(async() => await client.AddUserClaimAsync(request)); // Assert func.Should().Throw <RpcException>(); }
public override async Task <AddUserClaimResponse> AddUserClaim(AddUserClaimRequest request, ServerCallContext context) { var user = await _userService.FindByIdAsync(request.UserId); if (user == null) { throw context.NotFoundRpcException($"The user '{request.UserId}' wasn't found."); } var claims = await _userService.GetClaimsAsync(user); var claim = new Claim(request.Claim.Type, request.Claim.Value); if (claims.Any(x => x.Type == claim.Type && x.Value == claim.Value)) { var detail = $"The claim type '{claim.Type}' (value=\"{claim.Value}\") already exists in user '{user.Email}'. (userId=${user.Id})"; var response = new AddUserClaimResponse { Claim = new UserClaimDto { Type = claim.Type, Value = claim.Value } }; return(context.AlreadyExists(response, detail)); } var result = await _userService.AddClaimAsync(user, claim); if (result.Succeeded) { var detail = $"The claim type '{claim.Type}' (value=\"{claim.Value}\") as been added to the user '{user.Email}'. (userId=${user.Id})"; var response = new AddUserClaimResponse { Claim = new UserClaimDto { Type = claim.Type, Value = claim.Value } }; return(context.Ok(response, detail)); } throw context.FailedPreconditionRpcException( result, $"Failed to add the claim type '{claim.Type}' (value=\"{claim.Value}\") to the user '{user.Email}'. (userId=${user.Id})"); }
public async Task AddUserClaim_ShouldBeOfTypeAddUserClaimResponse() { // Arrange var users = TestData.FileStorage.GetUsers(); var user = users.First(); var host = TestHost.WithClaimsFromBearerAuthentication(new Claim(JwtClaimTypes.Subject, user.Id.ToString())); host.Server.CleanupDbContext(); await host.Server.UsingScopeAsync( async scope => { var userService = scope.GetRequiredService <IUserService>(); var result = await userService.CreateAsync(user, "Pass@word1"); result.Succeeded.Should().BeTrue(); }); var request = new AddUserClaimRequest { UserId = user.Id.ToString(), Claim = new UserClaimDto { Type = CustomClaimTypes.StripeCustomer, Value = "customerId" } }; var client = new IdentityService.IdentityServiceClient(host.CreateChannel()); // Act var response = await client.AddUserClaimAsync(request); // Assert response.Should().BeOfType <AddUserClaimResponse>(); }