public async Task CanExchangeValidRefreshToken()
    {
        AuthClient client = new AuthClient(GrpcChannel);//_serviceProvider.GetRequiredService<AuthClient>();

        Assert.NotNull(client);
        LoginResponse response = await client.LoginAsync(new LoginRequest()
        {
            UserName = "******",
            Password = "******"
        });

        Assert.NotNull(response);
        Assert.NotNull(response.Response);
        Assert.True(response.Response.Success);
        Assert.Empty(response.Response.Errors);
        Assert.NotNull(response.AccessToken);
        Assert.NotNull(response.AccessToken.Token);
        Assert.False(string.IsNullOrEmpty(response.RefreshToken));
        Assert.Equal(7200, response.AccessToken.ExpiresIn);

        ExchangeRefreshTokenResponse response1 = await client.RefreshTokenAsync(new ExchangeRefreshTokenRequest()
        {
            AccessToken  = response.AccessToken.Token,
            RefreshToken = response.RefreshToken
        });

        Assert.NotNull(response1);
        Assert.NotNull(response1.Response);
        Assert.True(response1.Response.Success);
        Assert.Empty(response1.Response.Errors);
        Assert.NotNull(response1.AccessToken);
        Assert.NotNull(response1.AccessToken.Token);
        Assert.False(string.IsNullOrEmpty(response1.RefreshToken));
        Assert.Equal(7200, response1.AccessToken.ExpiresIn);
    }
    public async Task <ActionResult> RefreshToken([FromBody] Models.Request.ExchangeRefreshTokenRequest request)
    {
        if (!ModelState.IsValid)
        {
            return(BadRequest(ModelState));
        }
        ExchangeRefreshTokenResponse response = await _mediator.Send(new ExchangeRefreshTokenCommand(request.AccessToken, request.RefreshToken, _authSettings.SecretKey));

        return(_mapper.Map <JsonContentResult>(response));
    }
    public async Task CantExchangeInvalidRefreshToken()
    {
        AuthClient client = new AuthClient(GrpcChannel);//_serviceProvider.GetRequiredService<AuthClient>();

        Assert.NotNull(client);
        ExchangeRefreshTokenResponse response = await client.RefreshTokenAsync(new ExchangeRefreshTokenRequest()
        {
            AccessToken  = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJtbWFjbmVpbCIsImp0aSI6IjA0YjA0N2E4LTViMjMtNDgwNi04M2IyLTg3ODVhYmViM2ZjNyIsImlhdCI6MTUzOTUzNzA4Mywicm9sIjoiYXBpX2FjY2VzcyIsImlkIjoiNDE1MzI5NDUtNTk5ZS00OTEwLTk1OTktMGU3NDAyMDE3ZmJlIiwibmJmIjoxNTM5NTM3MDgyLCJleHAiOjE1Mzk1NDQyODIsImlzcyI6IndlYkFwaSIsImF1ZCI6Imh0dHA6Ly9sb2NhbGhvc3Q6NTAwMC8ifQ.xzDQOKzPZarve68Np8Iu8sh2oqoCpHSmp8fMdYRHC_k",
            RefreshToken = "ShouldFail"
        });

        Assert.NotNull(response);
        Assert.NotNull(response.Response);
        Assert.False(response.Response.Success);
        Assert.Single(response.Response.Errors);
        Assert.Null(response.AccessToken);
        Assert.True(string.IsNullOrEmpty(response.RefreshToken));
        Assert.Equal(HttpStatusCode.BadRequest.ToString(), response.Response.Errors.First().Code);
        Assert.Equal("Invalid token!", response.Response.Errors.First().Description);
    }