示例#1
0
        public void RefreshAccessToken_ValidRefreshToken_ShouldReturnNewAccessTokenAndSameRefreshTokenWithUpdatedExpireTime()
        {
            IConfiguration config = Mock.Of <IConfiguration>(m =>
                                                             m["Bungie:ApiKey"] == "dummy-api-key" &&
                                                             m["Bungie:ClientId"] == "dummy-client-id" &&
                                                             m["Bungie:ClientSecret"] == "dummy-client-secret");
            Uri    uri                     = new Uri("https://www.bungie.net/Platform/App/OAuth/Token/");
            string refreshToken            = "refresh-token";
            string content                 = $"grant_type=refresh_token&refresh_token={refreshToken}&client_id={"dummy-client-id"}&client_secret={"dummy-client-secret"}";
            string responseString          = TestUtils.ReadFile("OAuth.Refresh-valid-refresh-token-success.json");
            string expectedAccessToken     = "CMfnARKGAgAgMgc7bAgu5A0xcQOHQONRWu9Mjq0O1/1zXz7R/kRg5hXgAAAADJt21jY58Cp3Mw/e6aSKOpqQ/jwpM5Yw8CrelL+zLyepdoi8CoZdEqmAoIVjPMezEzuNpL5tkSl13RoD6XvUP+zPRAl85OETHiTayetjNDqlNgu8UYAAt97lnh/db+TAlUuwZqpOmgUs/cAJmk6JS4piZvALo1KFstbWJIz1WmqQFMAT41dVi49P9PD5w+AJlqNR3lIfJs66UCwkgXH4EYWewBnzlplFLwxU56w3Q5Q8fQYc0Db9gUL+plPN4DNeAwPPtshgxNDhrfTsrH3R8TXq4ZcXLvJqYSucx2tjlmE=";
            string expectedRefreshToken    = "CMfnARKGAgAgM29n1MFKoiXR6F7Bo2TRKkuhhUD144lyxl4j697iupPgAAAAbQrA9ez/tfFeAIGNddkmZHv21ZqIn11UxQAHvzmqQmERczk8YLezxlJr76mWUYklbBjsmWZlqsSG9VfnaEy/sdc7E9oJg0f1muLmmA3vZvmetrfss12G7v6TczeT3W01upv4j6odQReOUDmJ+dxQb99hDgAoR1L4j6eL8FfdfDC3LFmQwrGJw/FJr/KvpjPQ9jncRsFt5v6UIl0usuCEy8rl/lETjXxVLYHX6Sr+ERwGOJYJVfFMcults6uWumr3S2ZVnHfG2gEHTlxyyQkkXOK1P4mQjdgRPWDgIR9fMy8=";
            Mock <HttpMessageHandler> mock = new Mock <HttpMessageHandler>(MockBehavior.Strict);

            mock
            .Protected()
            .Setup <Task <HttpResponseMessage> >(
                "SendAsync",
                ItExpr.Is <HttpRequestMessage>(
                    req =>
                    req.Method == HttpMethod.Post &&
                    req.RequestUri == uri &&
                    req.Content.Headers.Any(h => h.Key == "X-API-KEY" && !string.IsNullOrEmpty(h.Value.FirstOrDefault())) &&
                    req.Content.Headers.Any(h => h.Key == "Content-Type" && h.Value.FirstOrDefault() == "application/x-www-form-urlencoded") &&
                    req.Content.ReadAsStringAsync().Result == content),
                ItExpr.IsAny <CancellationToken>())
            .ReturnsAsync(new HttpResponseMessage()
            {
                StatusCode = HttpStatusCode.OK,
                Content    = new StringContent(responseString)
            })
            .Verifiable();
            HttpClient httpClient = new HttpClient(mock.Object);

            BungieApiService bungieApiService = new BungieApiService(config, httpClient);
            OAuthResponse    actual           = bungieApiService.RefreshAccessToken("refresh-token");

            Assert.AreEqual(expectedAccessToken, actual.AccessToken);
            Assert.AreEqual(expectedRefreshToken, actual.RefreshToken);
            Assert.AreEqual(3600, actual.AccessTokenExpiresInSeconds);
            Assert.AreEqual(7776000, actual.RefreshTokenExpiresInSeconds);
            Assert.IsTrue(string.IsNullOrWhiteSpace(actual.ErrorType));
        }
示例#2
0
        public void RefreshAccessToken_ExpiredRefreshTokenOrMaybeBadRequest_ShouldReturnError()
        {
            IConfiguration config = Mock.Of <IConfiguration>(m =>
                                                             m["Bungie:ApiKey"] == "dummy-api-key" &&
                                                             m["Bungie:ClientId"] == "dummy-client-id" &&
                                                             m["Bungie:ClientSecret"] == "dummy-client-secret");
            Uri    uri                     = new Uri("https://www.bungie.net/Platform/App/OAuth/Token/");
            string refreshToken            = "bad-refresh-token";
            string content                 = $"grant_type=refresh_token&refresh_token={refreshToken}&client_id={"dummy-client-id"}&client_secret={"dummy-client-secret"}";
            string responseString          = TestUtils.ReadFile("OAuth.Refresh-error.json");
            Mock <HttpMessageHandler> mock = new Mock <HttpMessageHandler>(MockBehavior.Strict);

            mock
            .Protected()
            .Setup <Task <HttpResponseMessage> >(
                "SendAsync",
                ItExpr.IsAny <HttpRequestMessage>(),
                ItExpr.IsAny <CancellationToken>())
            .ReturnsAsync(new HttpResponseMessage()
            {
                StatusCode = HttpStatusCode.BadRequest,
                Content    = new StringContent(responseString)
            })
            .Verifiable();
            HttpClient httpClient = new HttpClient(mock.Object);

            OAuthResponse errorResponse = new OAuthResponse();

            errorResponse.ErrorType        = "server_error";
            errorResponse.ErrorDescription = "Invalid length for a Base-64 char array or string.";

            IBungieApiService bungieApiService = new BungieApiService(config, httpClient);
            OAuthResponse     actual           = bungieApiService.RefreshAccessToken("bad-refresh-token");

            Assert.IsTrue(string.IsNullOrWhiteSpace(actual.AccessToken));
            Assert.AreEqual("server_error", actual.ErrorType);
        }