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());
        }
Пример #2
0
        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"));
        }
Пример #5
0
        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);
        }
Пример #6
0
        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());
        }
Пример #8
0
        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));
        }