Пример #1
0
        public void GetAccessToken_TokenIsExpiredAndRefreshTokenIsAlsoExpired_ShouldNotCallBungieApiAndShouldReturnNull()
        {
            IConfiguration    config           = Mock.Of <IConfiguration>();
            IBungieApiService bungieApiService = Mock.Of <IBungieApiService>();
            IEmissaryDao      emissaryDao      = Mock.Of <IEmissaryDao>();

            ulong             discordId   = 69;
            BungieAccessToken accessToken = new BungieAccessToken();

            accessToken.DiscordId    = discordId;
            accessToken.AccessToken  = "access.token";
            accessToken.RefreshToken = "refresh.token";
            accessToken.AccessTokenExpiresInSeconds  = 3600;
            accessToken.RefreshTokenExpiresInSeconds = 7776000;

            Mock.Get(emissaryDao).Setup(m => m.GetAccessTokenByDiscordId(discordId)).Returns(accessToken);

            DateTimeOffset currentTime           = DateTimeOffset.UtcNow;
            DateTimeOffset timeOverNinetyDaysAgo = currentTime.AddDays(-91);

            accessToken.RefreshTokenCreatedDate = timeOverNinetyDaysAgo;
            DateTimeOffset timeOverSixtyMinsAgo = currentTime.AddSeconds(-3601);

            accessToken.AccessTokenCreatedDate = timeOverSixtyMinsAgo;

            IAuthorizationService authorizationService = new AuthorizationService(config, bungieApiService, emissaryDao);
            string actual = authorizationService.GetAccessToken(discordId);

            Assert.IsNull(actual);
            Mock.Get(bungieApiService).VerifyNoOtherCalls();
        }
Пример #2
0
        public void GetAccessToken_UserHasValidToken_ShouldReturnToken()
        {
            IConfiguration    config           = Mock.Of <IConfiguration>();
            IBungieApiService bungieApiService = Mock.Of <IBungieApiService>();
            IEmissaryDao      emissaryDao      = Mock.Of <IEmissaryDao>();

            ulong             discordId   = 69;
            BungieAccessToken accessToken = new BungieAccessToken();

            accessToken.DiscordId    = discordId;
            accessToken.AccessToken  = "access.token";
            accessToken.RefreshToken = "refresh.token";
            accessToken.AccessTokenExpiresInSeconds  = 3600;
            accessToken.RefreshTokenExpiresInSeconds = 7776000;
            accessToken.AccessTokenCreatedDate       = DateTimeOffset.UtcNow;
            accessToken.RefreshTokenCreatedDate      = DateTimeOffset.UtcNow;

            Mock.Get(emissaryDao).Setup(m => m.GetAccessTokenByDiscordId(discordId)).Returns(accessToken);

            IAuthorizationService authorizationService = new AuthorizationService(config, bungieApiService, emissaryDao);

            string actual = authorizationService.GetAccessToken(discordId);

            Assert.AreEqual("access.token", actual);
            Mock.Get(bungieApiService).Verify(m => m.RefreshAccessToken(It.IsAny <string>()), Times.Never());
        }
Пример #3
0
        public void GetAccessToken_TokenHasExpiredButCanBeRefreshed_ShouldSendRequestToBungieApiAndUpdateDatabaseAndReturnNewToken()
        {
            IConfiguration    config           = Mock.Of <IConfiguration>();
            IBungieApiService bungieApiService = Mock.Of <IBungieApiService>();
            IEmissaryDao      emissaryDao      = Mock.Of <IEmissaryDao>();

            ulong             discordId   = 69;
            BungieAccessToken accessToken = new BungieAccessToken();

            accessToken.DiscordId    = discordId;
            accessToken.AccessToken  = "access.token";
            accessToken.RefreshToken = "refresh.token";
            accessToken.AccessTokenExpiresInSeconds  = 3600;
            accessToken.RefreshTokenExpiresInSeconds = 7776000;

            DateTimeOffset currentTime      = DateTimeOffset.UtcNow;
            DateTimeOffset timeSixtyMinsAgo = currentTime.AddSeconds(-3601);

            accessToken.AccessTokenCreatedDate  = timeSixtyMinsAgo;
            accessToken.RefreshTokenCreatedDate = timeSixtyMinsAgo;

            Mock.Get(emissaryDao).Setup(m => m.GetAccessTokenByDiscordId(discordId)).Returns(accessToken);

            OAuthResponse refreshResponse = new OAuthResponse();

            refreshResponse.AccessToken  = "new.access.token";
            refreshResponse.RefreshToken = "refresh.token";
            refreshResponse.AccessTokenExpiresInSeconds  = 3600;
            refreshResponse.RefreshTokenExpiresInSeconds = 7776000;
            Mock.Get(bungieApiService).Setup(m => m.RefreshAccessToken("refresh.token")).Returns(refreshResponse);

            IAuthorizationService authorizationService = new AuthorizationService(config, bungieApiService, emissaryDao);

            string actual = authorizationService.GetAccessToken(discordId);

            Assert.AreEqual("new.access.token", actual);
            Mock.Get(bungieApiService).Verify(m => m.RefreshAccessToken("refresh.token"), Times.Once());
            Mock.Get(emissaryDao).Verify(m => m.AddOrUpdateAccessToken(It.Is <BungieAccessToken>(r => r.AccessToken == "new.access.token" && r.AccessTokenCreatedDate > timeSixtyMinsAgo)), Times.Once());
        }