public void SaveCurrentlyEquippedAsLoadout_CurrentlyEquippedFailsBecauseUserIsNotRegistered_ShouldReturnSameErrorAsCurrentlyEquipped()
        {
            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;

            IEmissary emissary     = new Emissary(config, bungieApiService, manifestDao, dbContext, emissaryDao, authorizationService);
            bool      eventEmitted = false;

            emissary.RequestAuthorizationEvent += (discordId) => eventEmitted = true;
            EmissaryResult result = emissary.SaveCurrentlyEquippedAsLoadout(discordId, "raid");

            Assert.IsFalse(result.Success);
            Assert.IsTrue(eventEmitted);
            Assert.IsTrue(result.ErrorMessage.Contains("need access"));
        }
        public void SaveCurrentlyEquippedAsLoadout_CurrentlyEquipped_ShouldCallSaveLoadoutAndHaveSameBehavior()
        {
            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 = 420;
            string      loadoutName        = "last wish raid";
            DestinyItem destinyItem1       = new DestinyItem(6969, "dummy item 1", new List <string>()
            {
                "Weapon", "Kinetic Weapon"
            }, 420420, new List <uint>()
            {
                1, 2
            }, "Legendary");
            DestinyItem destinyItem2 = new DestinyItem(9696, "dummy item 2", new List <string>()
            {
                "Armor", "Helmet"
            }, 240240, new List <uint>()
            {
                3, 4
            }, "Legendary");
            // List<DestinyItem> loadoutItems = new List<DestinyItem>() { destinyItem1, destinyItem2 };
            // Loadout currentlyEquippedLoadout = new Loadout(discordId, destinyCharacterId, loadoutName, loadoutItems);

            long         destinyProfileId = 42069;
            EmissaryUser user             = new EmissaryUser(discordId, destinyProfileId, BungieMembershipType.Steam);

            Mock.Get(emissaryDao).Setup(m => m.GetUserByDiscordId(discordId)).Returns(user);
            Mock.Get(emissaryDao).Setup(m => m.GetAllLoadoutsForUser(discordId)).Returns(new List <Loadout>()
            {
            });
            Mock.Get(emissaryDao).Setup(m => m.GetLoadout(discordId, destinyCharacterId, loadoutName)).Returns(value: null);

            ProfileCharactersResponse charactersResponse = new ProfileCharactersResponse();
            DestinyCharacter          character          = new DestinyCharacter(destinyCharacterId, DateTimeOffset.Parse("2019-12-24T22:40:31Z"), destinyProfileId, BungieMembershipType.Steam);

            charactersResponse.Characters.Add(character.CharacterId, character);

            CharacterEquipmentResponse equipmentResponse = new CharacterEquipmentResponse();
            DestinyGenericItem         genericItem1      = new DestinyGenericItem(destinyItem1.ItemHash, destinyItem1.ItemInstanceId);
            DestinyGenericItem         genericItem2      = new DestinyGenericItem(destinyItem2.ItemHash, destinyItem2.ItemInstanceId);

            equipmentResponse.Items = new List <DestinyGenericItem>()
            {
                genericItem1, genericItem2
            };

            Mock.Get(bungieApiService).Setup(m => m.GetProfileCharacters(It.IsAny <ProfileCharactersRequest>())).Returns(charactersResponse);
            Mock.Get(bungieApiService).Setup(m => m.GetCharacterEquipment(It.IsAny <CharacterEquipmentRequest>())).Returns(equipmentResponse);

            Mock.Get(manifestDao).Setup(m => m.GetItemDefinition(destinyItem1.ItemHash)).Returns(new ManifestItemDefinition(destinyItem1.Name, destinyItem1.TierTypeName, destinyItem1.CategoryHashes));
            Mock.Get(manifestDao).Setup(m => m.GetItemDefinition(destinyItem2.ItemHash)).Returns(new ManifestItemDefinition(destinyItem2.Name, destinyItem2.TierTypeName, destinyItem2.CategoryHashes));
            Mock.Get(manifestDao).Setup(m => m.GetItemCategoryDefinition(1)).Returns(new ManifestItemCategoryDefinition("Weapon"));
            Mock.Get(manifestDao).Setup(m => m.GetItemCategoryDefinition(2)).Returns(new ManifestItemCategoryDefinition("Kinetic Weapon"));
            Mock.Get(manifestDao).Setup(m => m.GetItemCategoryDefinition(3)).Returns(new ManifestItemCategoryDefinition("Armor"));
            Mock.Get(manifestDao).Setup(m => m.GetItemCategoryDefinition(4)).Returns(new ManifestItemCategoryDefinition("Helmet"));

            IEmissary emissary = new Emissary(config, bungieApiService, manifestDao, dbContext, emissaryDao, authorizationService);

            EmissaryResult result = emissary.SaveCurrentlyEquippedAsLoadout(discordId, loadoutName);

            Assert.IsTrue(result.Success);
            Loadout actualSavedLoadout = JsonConvert.DeserializeObject <Loadout>(result.Message);

            Assert.AreEqual(loadoutName, actualSavedLoadout.LoadoutName);
            Assert.AreEqual(2, actualSavedLoadout.Items.Count);
        }