Пример #1
0
        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>();
        }
Пример #2
0
        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})");
        }
Пример #3
0
        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>();
        }