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(); }
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()); }
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()); }