public void EquipLoadout_LoadoutNameHasExtraWhitespace_ShouldTrimNameAndThenEquipLoadout() { 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 user = new EmissaryUser(discordId, destinyProfileId, destinyMembershipType); long destinyCharacterId = 2305843009504575107; uint izanagiHash = 3211806999; long izanagiInstanceId = 6917529135183883487; DestinyItem izanagiItem = new DestinyItem(izanagiInstanceId, "Izanagi's Burden", new List <string>() { "Weapon", "Kinetic Weapon", "Sniper Rifle" }, izanagiHash, new List <uint>() { 2, 1, 10 }, "Exotic"); Loadout loadout = new Loadout(discordId, destinyCharacterId, "last wish raid", new List <DestinyItem>() { izanagiItem }); EquipItemsResponse response = new EquipItemsResponse(new List <EquipItemResult>() { new EquipItemResult(izanagiHash, BungiePlatformErrorCodes.Success) }); ProfileCharactersResponse charactersResponse = new ProfileCharactersResponse(); DestinyCharacter titan = new DestinyCharacter(2305843009504575107, DateTimeOffset.Parse("2019-12-24T22:40:31Z"), destinyProfileId, BungieMembershipType.Steam); charactersResponse.Characters.Add(titan.CharacterId, titan); Mock.Get(bungieApiService).Setup(m => m.EquipItems(It.IsAny <EquipItemsRequest>())).Returns(response); Mock.Get(bungieApiService).Setup(m => m.GetProfileCharacters(It.IsAny <ProfileCharactersRequest>())).Returns(charactersResponse); Mock.Get(emissaryDao).Setup(m => m.GetUserByDiscordId(It.IsAny <ulong>())).Returns(user); Mock.Get(emissaryDao).Setup(m => m.GetLoadout(It.IsAny <ulong>(), It.IsAny <long>(), It.IsAny <string>())).Returns(loadout); Mock.Get(authorizationService).Setup(m => m.GetAccessToken(discordId)).Returns("access-token"); IEmissary emissary = new Emissary(config, bungieApiService, manifestDao, dbContext, emissaryDao, authorizationService); EmissaryResult result = emissary.EquipLoadout(discordId, " \t last wish raid \t \n "); Assert.IsTrue(result.Success); Mock.Get(emissaryDao).Verify(m => m.GetLoadout(discordId, destinyCharacterId, "last wish raid")); // Mock.Get(bungieApiService).Verify(m => // m.EquipItems(It.Is<EquipItemsRequest>(r => // r.DestinyCharacterId == destinyCharacterId && // r.MembershipType == destinyMembershipType && // r.AccessToken == accessToken && // r.ItemInstanceIds.Count == loadout.Items.Count && // r.ItemInstanceIds[0] == izanagiInstanceId)), Times.Once()); }
public void EquipItems_EquipZeroItems_ShouldSucceedButdoNothing() { IConfiguration config = Mock.Of <IConfiguration>(m => m["Bungie:ApiKey"] == "dummy-api-key"); int membershipType = 3; long characterId = 2305843009504575107; Uri uri = new Uri($"https://www.bungie.net/Platform/Destiny2/Actions/Items/EquipItems/"); string responseString = TestUtils.ReadFile("EquipItems-zero-items.json"); 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.Headers.Any(h => h.Key == "X-API-KEY" && !string.IsNullOrEmpty(h.Value.FirstOrDefault()) && req.Headers.Any(h => h.Key == "Authorization" && !string.IsNullOrWhiteSpace(h.Value.FirstOrDefault())) && req.Content.Headers.Any(h => h.Key == "Content-Type" && h.Value.FirstOrDefault().Contains("application/json")))), 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); EquipItemsRequest request = new EquipItemsRequest("access.token", membershipType, characterId, new long[] { }); EquipItemsResponse actual = bungieApiService.EquipItems(request); Assert.AreEqual(0, actual.EquipResults.Count); }
public void EquipLoadout_UnknownErrorCode_ShouldReturnErrorResultWithMessage() { 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 = 69; // long destinyCharacterId = 2305843009504575107; uint izanagiHash = 3211806999; long izanagiInstanceId = 6917529135183883487; DestinyItem izanagiItem = new DestinyItem(izanagiInstanceId, "Izanagi's Burden", new List <string>() { "Weapon", "Kinetic Weapon", "Sniper Rifle" }, izanagiHash, new List <uint>() { 2, 1, 10 }, "Exotic"); // Loadout loadoutToEquip = new Loadout(discordId, destinyCharacterId, "raid", new List<DestinyItem>() { izanagiItem }); EquipItemResult izanagiEquipResult = new EquipItemResult(izanagiInstanceId, 155); EquipItemsResponse equipResponse = new EquipItemsResponse(new List <EquipItemResult>() { izanagiEquipResult }); ProfileCharactersResponse charactersResponse = new ProfileCharactersResponse(); DestinyCharacter titan = new DestinyCharacter(2305843009504575107, DateTimeOffset.Parse("2019-12-24T22:40:31Z"), 420, BungieMembershipType.Steam); charactersResponse.Characters.Add(titan.CharacterId, titan); Mock.Get(bungieApiService).Setup(m => m.EquipItems(It.IsAny <EquipItemsRequest>())).Returns(equipResponse); Mock.Get(emissaryDao).Setup(m => m.GetUserByDiscordId(It.IsAny <ulong>())).Returns(new EmissaryUser()); Mock.Get(bungieApiService).Setup(m => m.GetProfileCharacters(It.IsAny <ProfileCharactersRequest>())).Returns(charactersResponse); Mock.Get(emissaryDao).Setup(m => m.GetLoadout(It.IsAny <ulong>(), It.IsAny <long>(), It.IsAny <string>())).Returns(new Loadout(69, 420, "raid", new List <DestinyItem>() { izanagiItem })); Mock.Get(authorizationService).Setup(m => m.GetAccessToken(69)).Returns("access-token"); IEmissary emissary = new Emissary(config, bungieApiService, manifestDao, dbContext, emissaryDao, authorizationService); EmissaryResult result = emissary.EquipLoadout(69, "raid"); Assert.IsFalse(result.Success); Assert.IsTrue(result.ErrorMessage.Contains("155")); }
public void EquipLoadout_ItemHasBeenDismantled_ShouldReturnErrorResult() { 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>(); long wendigoInstanceId = 6917529112673221040; DestinyItem wendigoItem = new DestinyItem(wendigoInstanceId, "Wendigo GL3", new List <string>() { }, 69, new List <uint>() { }, "Legendary"); EquipItemResult wendigoEquipResult = new EquipItemResult(wendigoInstanceId, BungiePlatformErrorCodes.DestinyItemNotFound); EquipItemsResponse equipResponse = new EquipItemsResponse(new List <EquipItemResult>() { wendigoEquipResult }); ProfileCharactersResponse charactersResponse = new ProfileCharactersResponse(); DestinyCharacter titan = new DestinyCharacter(2305843009504575107, DateTimeOffset.Parse("2019-12-24T22:40:31Z"), 420, BungieMembershipType.Steam); charactersResponse.Characters.Add(titan.CharacterId, titan); Mock.Get(bungieApiService).Setup(m => m.EquipItems(It.IsAny <EquipItemsRequest>())).Returns(equipResponse); Mock.Get(emissaryDao).Setup(m => m.GetUserByDiscordId(It.IsAny <ulong>())).Returns(new EmissaryUser()); Mock.Get(bungieApiService).Setup(m => m.GetProfileCharacters(It.IsAny <ProfileCharactersRequest>())).Returns(charactersResponse); Mock.Get(emissaryDao).Setup(m => m.GetLoadout(It.IsAny <ulong>(), It.IsAny <long>(), It.IsAny <string>())).Returns(new Loadout(69, 420, "raid", new List <DestinyItem>() { wendigoItem })); Mock.Get(authorizationService).Setup(m => m.GetAccessToken(69)).Returns("access-token"); IEmissary emissary = new Emissary(config, bungieApiService, manifestDao, dbContext, emissaryDao, authorizationService); EmissaryResult result = emissary.EquipLoadout(69, "raid"); Assert.IsFalse(result.Success); Assert.IsTrue(result.ErrorMessage.Contains("dismantled")); }
public void EquipItems_JustOneItem_ShouldChangeCorrespondingItem() { IConfiguration config = Mock.Of <IConfiguration>(m => m["Bungie:ApiKey"] == "dummy-api-key"); // for example, if i tell it to equip the recluse, it should change whatever was // in my energy weapon slot before this. since this is all just item hashes and ids, // this is just something that i figured out manually for the test. // uint recluseItemHash = 3354242550; long recluseItemInstanceId = 6917529123204409619; // uint suddenDeathItemHash = 1879212552; // long suddenDeathItemInstanceId = 6917529043814140192; int membershipType = 3; long characterId = 2305843009504575107; Uri uri = new Uri($"https://www.bungie.net/Platform/Destiny2/Actions/Items/EquipItems/"); string responseString = TestUtils.ReadFile("EquipItems-equip-recluse-success.json"); 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.Headers.Any(h => h.Key == "X-API-KEY" && !string.IsNullOrEmpty(h.Value.FirstOrDefault()) && req.Headers.Any(h => h.Key == "Authorization" && !string.IsNullOrWhiteSpace(h.Value.FirstOrDefault())) && req.Content.Headers.Any(h => h.Key == "Content-Type" && h.Value.FirstOrDefault().Contains("application/json")))), 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); EquipItemsRequest request = new EquipItemsRequest("access.token", membershipType, characterId, new long[] { recluseItemInstanceId }); EquipItemsResponse actual = bungieApiService.EquipItems(request); Assert.AreEqual(1, actual.EquipResults.Count); Assert.AreEqual(BungiePlatformErrorCodes.Success, actual.EquipResults[0].EquipStatus); }
public void EquipItems_SomeInvalidItemInstanceIDs_ShouldSuccessfullyEquipItemsAndReturnErrorStatusForInvalidItem() { IConfiguration config = Mock.Of <IConfiguration>(m => m["Bungie:ApiKey"] == "dummy-api-key"); long invalidItemInstanceId = 69; long recluseItemInstanceId = 6917529123204409619; int membershipType = 3; long characterId = 2305843009504575107; Uri uri = new Uri($"https://www.bungie.net/Platform/Destiny2/Actions/Items/EquipItems/"); string responseString = TestUtils.ReadFile("EquipItems-some-invalid-items.json"); 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.Headers.Any(h => h.Key == "X-API-KEY" && !string.IsNullOrEmpty(h.Value.FirstOrDefault()) && req.Headers.Any(h => h.Key == "Authorization" && !string.IsNullOrWhiteSpace(h.Value.FirstOrDefault())) && req.Content.Headers.Any(h => h.Key == "Content-Type" && h.Value.FirstOrDefault().Contains("application/json")))), 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); long[] itemsToEquip = new long[] { invalidItemInstanceId, recluseItemInstanceId }; EquipItemsRequest request = new EquipItemsRequest("access.token", membershipType, characterId, itemsToEquip); EquipItemsResponse actual = bungieApiService.EquipItems(request); Assert.AreEqual(2, actual.EquipResults.Count); Assert.AreEqual(69, actual.EquipResults[0].ItemInstanceId); Assert.AreEqual(BungiePlatformErrorCodes.DestinyItemNotFound, actual.EquipResults[0].EquipStatus); Assert.AreEqual(recluseItemInstanceId, actual.EquipResults[1].ItemInstanceId); Assert.AreEqual(BungiePlatformErrorCodes.Success, actual.EquipResults[1].EquipStatus); }
public void EquipLoadout_ExoticWeaponAndArmorCurrentlyEquipped_ShouldPutExoticsAtEndOfEquipRequestList() { 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 izanagiInstanceId = 6917529135183883487; long recluseInstanceId = 6917529123204409619; long wendigoInstanceId = 6917529112673221040; long maskOfRullInstanceId = 6917529110566559001; long reverieDawnInstanceId = 6917529138010460936; long plateOfTranscendenceInstanceId = 6917529109687230597; long peacekeepersInstanceId = 6917529122999918127; long markOfTheGreatHuntInstanceId = 6917529128966008940; DestinyItem izanagiItem = new DestinyItem(izanagiInstanceId, "Izanagi's Burden", new List <string>() { }, 69, new List <uint>() { }, "Exotic"); DestinyItem recluseItem = new DestinyItem(recluseInstanceId, "The Recluse", new List <string>() { }, 69, new List <uint>() { }, "Legendary"); DestinyItem wendigoItem = new DestinyItem(wendigoInstanceId, "Wendigo GL3", new List <string>() { }, 69, new List <uint>() { }, "Legendary"); DestinyItem maskOfRullItem = new DestinyItem(maskOfRullInstanceId, "Mask of Rull", new List <string>() { }, 69, new List <uint>() { }, "Legendary"); DestinyItem reverieDawnItem = new DestinyItem(reverieDawnInstanceId, "Reverie Dawn Gauntlets", new List <string>() { }, 69, new List <uint>() { }, "Legendary"); DestinyItem plateOfTranscendenceItem = new DestinyItem(plateOfTranscendenceInstanceId, "Plate of Transcendence", new List <string>() { }, 69, new List <uint>() { }, "Legendary"); DestinyItem peacekeepersItem = new DestinyItem(peacekeepersInstanceId, "Peacekeepers", new List <string>() { }, 69, new List <uint>() { }, "Exotic"); DestinyItem markOfTheGreatHuntItem = new DestinyItem(markOfTheGreatHuntInstanceId, "Mark of the Great Hunt", new List <string>() { }, 69, new List <uint>() { }, "Legendary"); IList <DestinyItem> loadoutItems = new List <DestinyItem>() { izanagiItem, recluseItem, wendigoItem, maskOfRullItem, reverieDawnItem, plateOfTranscendenceItem, peacekeepersItem, markOfTheGreatHuntItem }; Loadout savedLoadout = new Loadout(discordId, 420, "last wish raid", loadoutItems); ProfileCharactersResponse charactersResponse = new ProfileCharactersResponse(); DestinyCharacter titan = new DestinyCharacter(2305843009504575107, DateTimeOffset.Parse("2019-12-24T22:40:31Z"), 69, BungieMembershipType.Steam); charactersResponse.Characters.Add(titan.CharacterId, titan); IList <long> originalItemInstanceIdsOrder = new List <long>() { izanagiInstanceId, recluseInstanceId, wendigoInstanceId, maskOfRullInstanceId, reverieDawnInstanceId, plateOfTranscendenceInstanceId, peacekeepersInstanceId, markOfTheGreatHuntInstanceId }; IList <long> expectedItemInstanceIdsOrder = new List <long>() { recluseInstanceId, wendigoInstanceId, maskOfRullInstanceId, reverieDawnInstanceId, plateOfTranscendenceInstanceId, markOfTheGreatHuntInstanceId, izanagiInstanceId, peacekeepersInstanceId }; EquipItemResult izanagiEquipResult = new EquipItemResult(izanagiInstanceId, BungiePlatformErrorCodes.Success); EquipItemResult recluseEquipResult = new EquipItemResult(recluseInstanceId, BungiePlatformErrorCodes.Success); EquipItemResult wendigoEquipResult = new EquipItemResult(wendigoInstanceId, BungiePlatformErrorCodes.Success); EquipItemResult maskOfRullEquipResult = new EquipItemResult(maskOfRullInstanceId, BungiePlatformErrorCodes.Success); EquipItemResult reverieDawnEquipResult = new EquipItemResult(reverieDawnInstanceId, BungiePlatformErrorCodes.Success); EquipItemResult plateOfTranscendenceEquipResult = new EquipItemResult(plateOfTranscendenceInstanceId, BungiePlatformErrorCodes.Success); EquipItemResult peacekeepersEquipResult = new EquipItemResult(peacekeepersInstanceId, BungiePlatformErrorCodes.Success); EquipItemResult markOfTheGreatHuntEquipResult = new EquipItemResult(markOfTheGreatHuntInstanceId, BungiePlatformErrorCodes.Success); EquipItemsResponse equipResponse = new EquipItemsResponse(new List <EquipItemResult>() { izanagiEquipResult, recluseEquipResult, wendigoEquipResult, maskOfRullEquipResult, reverieDawnEquipResult, plateOfTranscendenceEquipResult, peacekeepersEquipResult, markOfTheGreatHuntEquipResult }); Mock.Get(emissaryDao).Setup(m => m.GetLoadout(discordId, It.IsAny <long>(), "last wish raid")).Returns(savedLoadout); Mock.Get(bungieApiService).Setup(m => m.GetProfileCharacters(It.IsAny <ProfileCharactersRequest>())).Returns(charactersResponse); Mock.Get(emissaryDao).Setup(m => m.GetUserByDiscordId(discordId)).Returns(new EmissaryUser()); Mock.Get(bungieApiService).Setup(m => m.EquipItems(It.IsAny <EquipItemsRequest>())).Returns(equipResponse); Mock.Get(authorizationService).Setup(m => m.GetAccessToken(discordId)).Returns("access-token"); IEmissary emissary = new Emissary(config, bungieApiService, manifestDao, dbContext, emissaryDao, authorizationService); EmissaryResult result = emissary.EquipLoadout(discordId, "last wish raid"); Assert.IsTrue(result.Success); Mock.Get(bungieApiService).Verify(m => m.EquipItems(It.Is <EquipItemsRequest>(r => r.ItemInstanceIds.SequenceEqual(expectedItemInstanceIdsOrder))), Times.Once()); }
public void EquipItems_EquipEveryInventoryItem_AllShouldSucceed() { IConfiguration config = Mock.Of <IConfiguration>(m => m["Bungie:ApiKey"] == "dummy-api-key"); // item instance IDs long perfectParadox = 6917529138356180356; long suddenDeath = 6917529043814140192; long apexPredator = 6917529137866710642; long maskOfRull = 6917529110566559001; long reverieDawnGauntlets = 6917529138010460936; long plateOfTranscendence = 6917529109687230597; long peacekeepers = 6917529122999918127; long markOfTheGreatHunt = 6917529128966008940; long starMapShell = 6917529134911753611; long soloStandSparrow = 6917529096117947574; long safePassageShip = 6917529128292261186; long sentinelSubclass = 6917529102011422104; long clanBanner = 6917529137830892799; long prismaticInfernoEmblem = 6917529105645094388; long finisher = 6917529137848551327; long emote = 6917529101999517414; long lanternOfOsiris = 6917529137968184629; int membershipType = 3; long characterId = 2305843009504575107; Uri uri = new Uri($"https://www.bungie.net/Platform/Destiny2/Actions/Items/EquipItems/"); string responseString = TestUtils.ReadFile("EquipItems-equip-all.json"); 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.Headers.Any(h => h.Key == "X-API-KEY" && !string.IsNullOrEmpty(h.Value.FirstOrDefault()) && req.Headers.Any(h => h.Key == "Authorization" && !string.IsNullOrWhiteSpace(h.Value.FirstOrDefault())) && req.Content.Headers.Any(h => h.Key == "Content-Type" && h.Value.FirstOrDefault().Contains("application/json")))), 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); long[] itemsToEquip = new long[] { perfectParadox, suddenDeath, apexPredator, maskOfRull, reverieDawnGauntlets, plateOfTranscendence, peacekeepers, markOfTheGreatHunt, starMapShell, soloStandSparrow, safePassageShip, sentinelSubclass, clanBanner, prismaticInfernoEmblem, finisher, emote, lanternOfOsiris }; EquipItemsRequest request = new EquipItemsRequest("access.token", membershipType, characterId, itemsToEquip); EquipItemsResponse actual = bungieApiService.EquipItems(request); Assert.AreEqual(17, actual.EquipResults.Count); Assert.IsTrue(actual.EquipResults.All(r => r.EquipStatus == BungiePlatformErrorCodes.Success)); }