public void RegisterOrReauthorize_NewUser_ShouldRequestNewAccessTokenAndWriteToDatabase() { IConfiguration config = Mock.Of <IConfiguration>(); IBungieApiService bungieApiService = Mock.Of <IBungieApiService>(); IManifestDao manifestDao = Mock.Of <IManifestDao>(); EmissaryDbContext dbContext = Mock.Of <EmissaryDbContext>(); IEmissaryDao emissaryDao = Mock.Of <IEmissaryDao>(); IAuthorizationService authorizationService = Mock.Of <IAuthorizationService>(); ulong discordId = 221313820847636491; long destinyProfileId = 4611686018467260757; int destinyMembershipType = BungieMembershipType.Steam; EmissaryUser expectedUser = new EmissaryUser(discordId, destinyProfileId, destinyMembershipType); string authCode = "auth-code"; OAuthResponse authResponse = new OAuthResponse(); authResponse.AccessToken = "access-token"; // Mock.Get(bungieApiService) // .Setup(m => // m.GetOAuthAccessToken(It.Is<OAuthRequest>(r => // r.AuthCode == authCode))) // .Returns(authResponse); Mock.Get(authorizationService).Setup(m => m.AuthorizeUser(discordId, authCode)).Returns(authResponse); UserMembershipsResponse membershipsResponse = new UserMembershipsResponse(); membershipsResponse.DestinyMemberships = new List <DestinyMembership>(); membershipsResponse.DestinyMemberships.Add(new DestinyMembership("pimpdaddy", destinyProfileId, destinyMembershipType, BungieMembershipType.Steam)); Mock.Get(bungieApiService) .Setup(m => m.GetMembershipsForUser(It.Is <UserMembershipsRequest>(r => r.AccessToken == "access-token"))) .Returns(membershipsResponse); IEmissary emissary = new Emissary(config, bungieApiService, manifestDao, dbContext, emissaryDao, authorizationService); EmissaryResult result = emissary.RegisterOrReauthorize(discordId, authCode); Assert.IsTrue(result.Success); // Mock.Get(bungieApiService).Verify(m => m.GetOAuthAccessToken(It.IsAny<OAuthRequest>()), Times.Once()); Mock.Get(authorizationService).Verify(m => m.AuthorizeUser(discordId, authCode), Times.Once()); Mock.Get(authorizationService).VerifyNoOtherCalls(); Mock.Get(bungieApiService).Verify(m => m.GetMembershipsForUser(It.IsAny <UserMembershipsRequest>()), Times.Once()); Mock.Get(emissaryDao) .Verify(m => m.AddOrUpdateUser(It.Is <EmissaryUser>(u => u.DiscordId == discordId && u.DestinyProfileId == destinyProfileId && u.DestinyMembershipType == destinyMembershipType)), Times.Once()); }
public void GetMembershipsForUser_PersonalAccount_ShouldReturnAllDestinyMemberships() { IConfiguration config = Mock.Of <IConfiguration>(m => m["Bungie:ApiKey"] == "dummy-api-key"); // arrange Uri uri = new Uri("https://www.bungie.net/Platform/User/GetMembershipsForCurrentUser/"); // just an old example access token string accessToken = "CLDjARKGAgAgVJDu+K+f85W6S6eJJi+s7U9tXkxDzInlc8I78HfgcabgAAAATOBrgq37w0FGjQ6XoVCLI4Mntf9IjfT91ByO4T59755lmaJvWMdnNpm4YcKglZiJN9IT0lLuZNifSUZRtWl1Xi+m83Eoh6VBMxRaec9Feeu4Coa53XzEAVr/BadPeaugfqB8A5jgEcRdQrnSH092D1h1ntzLpm0cOUttRGqMFpw/nR9Sm0vF1i4kdrq8F9gx+PQ6fJvbBxOKYZRSnQUgr3WjSSgWGmOvAu778Ikf/0tN7dmgpX6JFHcb2U1fcvSprnbb0qcqsGB71KsSvRqgJ5T9/LswkBT9TIHbrtS/cPg="; string responseString = TestUtils.ReadFile("GetMembershipsForCurrentUser-valid-personal-account.json"); Mock <HttpMessageHandler> mock = new Mock <HttpMessageHandler>(MockBehavior.Strict); mock .Protected() .Setup <Task <HttpResponseMessage> >( "SendAsync", ItExpr.Is <HttpRequestMessage>( req => req.Method == HttpMethod.Get && req.RequestUri == uri && req.Headers.Any(h => h.Key == "X-API-KEY" && !string.IsNullOrEmpty(h.Value.FirstOrDefault())) && req.Headers.Any(h => h.Key == "Authorization" && h.Value.FirstOrDefault() == $"Bearer {accessToken}")), 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); UserMembershipsRequest request = new UserMembershipsRequest(accessToken); // act UserMembershipsResponse actual = bungieApiService.GetMembershipsForUser(request); // assert Assert.AreEqual(2, actual.DestinyMemberships.Count); Assert.AreEqual("anime8094", actual.DestinyMemberships[0].DisplayName); Assert.AreEqual(4611686018497175745, actual.DestinyMemberships[0].DestinyProfileId); Assert.AreEqual(1, actual.DestinyMemberships[0].MembershipType); Assert.AreEqual(3, actual.DestinyMemberships[0].CrossSaveOverride); Assert.AreEqual("pimpdaddy", actual.DestinyMemberships[1].DisplayName); Assert.AreEqual(4611686018467260757, actual.DestinyMemberships[1].DestinyProfileId); Assert.AreEqual(3, actual.DestinyMemberships[1].MembershipType); Assert.AreEqual(3, actual.DestinyMemberships[1].CrossSaveOverride); }