public void RequestAuthorizationUrl_Scopes_UrlContainsSpaceDelimitedScopes() { // arrange const string state = "abc123"; string[] scopes = new[] { "user-modify-playback-state", "user-read-playback-state", "playlist-read-collaborative", "playlist-modify-public", "playlist-modify-private", "playlist-read-private" }; var config = new MockConfiguration().Object; var http = new HttpClient(); var tokenStore = new MockRefreshTokenStore(UserHash, config).Object; var service = new UserAccountsService(http, config, tokenStore); // act string url = service.AuthorizeUrl(state, scopes); // assert Assert.IsTrue(url.Contains(string.Join(" ", scopes)), "url should contain space delimited user scopes"); Trace.WriteLine("RequestAuthorizationUrl_Scopes_UrlContainsSpaceDelimitedScopes url ="); Trace.WriteLine(url); }
public async Task GetUserAccessToken_TokenExpired_ReturnsNewToken() { // arrange var expiredToken = new BearerAccessToken { AccessToken = "abcd1234", ExpiresIn = 3600, Expires = new DateTime(2018, 7, 28, 9, 18, 0, DateTimeKind.Utc) }; const string json = @"{ ""access_token"": ""NgCXRKc...MzYjw"", ""token_type"": ""bearer"", ""expires_in"": 3600, }"; var mockHttp = new MockHttpClient(); mockHttp.SetupSendAsync(json); var http = mockHttp.HttpClient; var bearerTokenStore = new Mock <IBearerTokenStore>(); bearerTokenStore.Setup(s => s.Get(It.IsAny <string>())).ReturnsAsync(expiredToken); var config = new MockConfiguration().Object; var refreshTokenStore = new MockRefreshTokenStore(UserHash, config).Object; var service = new UserAccountsService(http, config, refreshTokenStore, bearerTokenStore.Object); // act var token = await service.GetUserAccessToken(UserHash); // assert Assert.AreNotEqual(expiredToken, token); }
public async Task GetUserAccessToken_TokenNotExpired_ReturnsCurrentToken() { // arrange var currentToken = new BearerAccessToken { AccessToken = "abcd1234", ExpiresIn = 3600, Expires = DateTime.UtcNow.AddSeconds(3600) }; var http = new MockHttpClient().HttpClient; var bearerTokenStore = new Mock <IBearerTokenStore>(); bearerTokenStore.Setup(s => s.Get(It.IsAny <string>())).ReturnsAsync(currentToken); var config = new MockConfiguration().Object; var refreshTokenStore = new MockRefreshTokenStore(UserHash, config).Object; var service = new UserAccountsService(http, config, refreshTokenStore, bearerTokenStore.Object); // act var token = await service.GetUserAccessToken(UserHash); // assert Assert.AreEqual(currentToken, token); }
public void AuthorizeUrl_StateParam_UrlContainsState() { // arrange const string state = "abc123"; var http = new MockHttpClient().HttpClient; var config = new MockConfiguration().Object; var tokenStore = new MockRefreshTokenStore(UserHash, config).Object; var service = new UserAccountsService(http, config, tokenStore); // act string url = service.AuthorizeUrl(state, null); // assert Assert.IsTrue(url.Contains(state), "url result should contain state param"); }
//TODO: Something is up - the first error is not being thrown to the test runner... //[TestMethod] public async Task TwoCompetingUserAccessTokenRequestsGetConsistentResults() { const string userHash = "E11AC28538A7C0A827A726DD9B30B710FC1FCAFFFE2E86FCA853AB90E7C710D2"; const string spotifyUri = "spotify:user:palsvensson:playlist:2iL5fr6OmN8f4yoQvvuWSf"; var store = new MockRefreshTokenStore(userHash).Object; var http1 = new HttpClient(); var accounts1 = new UserAccountsService(http1, TestsHelper.GetLocalConfig(), store); var player1 = new PlayerApi(http1, accounts1); var http2 = new HttpClient(); var accounts2 = new UserAccountsService(http2, TestsHelper.GetLocalConfig(), store); var player2 = new PlayerApi(http2, accounts2); // act //try //{ //TODO: Call Device method instead await player1.PlayContext(userHash, spotifyUri); //} //catch (SpotifyApiErrorException ex) //{ //Trace.WriteLine(ex.Message); //} //try //{ await player2.PlayContext(userHash, spotifyUri); //} //catch (SpotifyApiErrorException ex) //{ // Trace.WriteLine(ex.Message); //} // assert // no error }