Example #1
0
        public void RemoveUserClaim_WithInvalidClaim_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 RemoveUserClaimRequest
            {
                UserId = user.Id.ToString(),
                Claim  = new UserClaimDto
                {
                    Type  = CustomClaimTypes.StripeCustomer,
                    Value = "customerId"
                }
            };

            var client = new IdentityService.IdentityServiceClient(host.CreateChannel());

            // Act
            var func = new Func <Task>(async() => await client.RemoveUserClaimAsync(request));

            // Assert
            func.Should().Throw <RpcException>();
        }
Example #2
0
        public override async Task <RemoveUserClaimResponse> RemoveUserClaim(RemoveUserClaimRequest 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))
            {
                throw context.NotFoundRpcException(
                          $"The claim type '{claim.Type}' (value=\"{claim.Value}\") not found in user '{user.Email}'. (userId=${user.Id})");
            }

            var result = await _userService.RemoveClaimAsync(user, claim);

            if (result.Succeeded)
            {
                var detail = $"The claim type '{claim.Type}' (value=\"{claim.Value}\") as been removed to the user '{user.Email}'. (userId=${user.Id})";

                var response = new RemoveUserClaimResponse
                {
                    Claim = new UserClaimDto
                    {
                        Type  = claim.Type,
                        Value = claim.Value
                    }
                };

                return(context.Ok(response, detail));
            }

            throw context.FailedPreconditionRpcException(
                      result,
                      $"Failed to remove the claim type '{claim.Type}' (value=\"{claim.Value}\") from the user '{user.Email}'. (userId=${user.Id})");
        }
Example #3
0
        public async Task RemoveUserClaim_ShouldBeOfTypeRemoveUserClaimResponse()
        {
            // 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();

                await userService.AddClaimAsync(user, new Claim(CustomClaimTypes.StripeCustomer, "customerId"));
            });

            var request = new RemoveUserClaimRequest
            {
                UserId = user.Id.ToString(),
                Claim  = new UserClaimDto
                {
                    Type  = CustomClaimTypes.StripeCustomer,
                    Value = "customerId"
                }
            };

            var client = new IdentityService.IdentityServiceClient(host.CreateChannel());

            // Act
            var reponse = await client.RemoveUserClaimAsync(request);

            // Assert
            reponse.Should().BeOfType <RemoveUserClaimResponse>();
        }