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 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 OnMoveItem(SagaMap.Packets.Client.MoveItem p) { if (this.state != SESSION_STATE.MAP_LOADED) { return; } Packets.Client.ITEM_MOVE_TYPE moveType = p.GetMoveType(); if (moveType == Packets.Client.ITEM_MOVE_TYPE.EquToInv) { // unequip, equip items are not stackable? byte index, amount; UnequipItemResult ures = this.Char.inv.UnequipItem(p.GetSourceIndex(), out index, out amount); if (ures == UnequipItemResult.NEW_INDEX || ures == UnequipItemResult.STACKED) { Packets.Server.MoveItem p1 = new SagaMap.Packets.Server.MoveItem(); p1.SetMoveType(SagaMap.Packets.Server.ITEM_MOVE_TYPE.EquToInv); p1.SetSourceIndex(p.GetSourceIndex()); p1.SetDestIndex(index); this.netIO.SendPacket(p1, this.SessionID); Item item = this.Char.inv.GetItem(CONTAINER_TYPE.INVENTORY, index); item.equipSlot = -1; MapServer.charDB.UpdateItem(this.Char, item); Bonus.BonusHandler.Instance.EquiqItem(this.Char, item, true); SkillHandler.CalcHPSP(ref this.Char); SendCharStatus(0); SendExtStats(); SendBattleStatus(); this.map.SendEventToAllActorsWhoCanSeeActor(Map.EVENT_TYPE.CHANGE_EQUIP, new Map.ChangeEquipArgs((EQUIP_SLOT)(p.GetSourceIndex()), 0), this.Char, false); } else { SendMessage("Saga", "unequip error"); } } else if (moveType == Packets.Client.ITEM_MOVE_TYPE.InvToEqu) { // equip Item item; Item itemori = null; if (this.Char.inv.EquipList.ContainsKey((EQUIP_SLOT)p.GetDestIndex())) { itemori = this.Char.inv.EquipList[(EQUIP_SLOT)p.GetDestIndex()]; } EquipItemResult eres = this.Char.inv.EquipItem(p.GetSourceIndex(), p.GetDestIndex(), out item); if (eres == EquipItemResult.NO_ERROR) { Packets.Server.MoveItem p1 = new SagaMap.Packets.Server.MoveItem(); p1.SetMoveType(SagaMap.Packets.Server.ITEM_MOVE_TYPE.InvToEqu); p1.SetSourceIndex(p.GetSourceIndex()); p1.SetDestIndex(item.index); item.equipSlot = item.index; MapServer.charDB.UpdateItem(this.Char, item); this.netIO.SendPacket(p1, this.SessionID); if (itemori != null) { Bonus.BonusHandler.Instance.EquiqItem(this.Char, itemori, true); itemori.equipSlot = -1; MapServer.charDB.UpdateItem(this.Char, itemori); } Bonus.BonusHandler.Instance.EquiqItem(this.Char, item, false); SkillHandler.CalcHPSP(ref this.Char); SendCharStatus(0); SendExtStats(); SendBattleStatus(); this.map.SendEventToAllActorsWhoCanSeeActor(Map.EVENT_TYPE.CHANGE_EQUIP, new Map.ChangeEquipArgs((EQUIP_SLOT)(item.index), item.id), this.Char, false); } else if (eres == EquipItemResult.NOT_EQUIPABLE) { SendMessage("Saga", "error, item is not equipable"); } else if (eres == EquipItemResult.WRONG_EQUIPSLOT) { SendMessage("Saga", "error, wrong equip slot"); } else { SendMessage("Saga", "error, cannot equip item"); } } else if (moveType == Packets.Client.ITEM_MOVE_TYPE.InvToSto) { Item item; byte index, amount; item = this.Char.inv.GetItem(CONTAINER_TYPE.INVENTORY, p.GetSourceIndex()); if (item == null) { return; } if (!this.Char.inv.HasFreeSpaceStorage()) { return; } if (this.Char.inv.AddItemStorage(item, out index, out amount) == AddItemResult.ERROR) { return; } this.Char.inv.DeleteItem(CONTAINER_TYPE.INVENTORY, p.GetSourceIndex(), item.id, p.GetAmount(), out amount); MapServer.charDB.DeleteItem(this.Char, item); MapServer.charDB.NewStorage(this.Char, item); Packets.Server.MoveItem p1 = new SagaMap.Packets.Server.MoveItem(); p1.SetMoveType(SagaMap.Packets.Server.ITEM_MOVE_TYPE.InvToSto); p1.SetSourceIndex(p.GetSourceIndex()); p1.SetDestIndex(item.index); this.netIO.SendPacket(p1, this.SessionID); } else if (moveType == Packets.Client.ITEM_MOVE_TYPE.StoToInv) { Item item; byte amount; item = this.Char.inv.GetItem(CONTAINER_TYPE.STORAGE, p.GetSourceIndex()); if (item == null) { return; } if (!this.Char.inv.HasFreeSpace()) { return; } if (this.Char.inv.AddItem(item) == AddItemResult.ERROR) { return; } this.Char.inv.DeleteItem(CONTAINER_TYPE.STORAGE, p.GetSourceIndex(), item.id, p.GetAmount(), out amount); MapServer.charDB.DeleteStorage(this.Char, item); MapServer.charDB.NewItem(this.Char, item); Packets.Server.MoveItem p1 = new SagaMap.Packets.Server.MoveItem(); p1.SetMoveType(SagaMap.Packets.Server.ITEM_MOVE_TYPE.StoToInv); p1.SetSourceIndex(p.GetSourceIndex()); p1.SetDestIndex(item.index); this.netIO.SendPacket(p1, this.SessionID);; } //Send Answer // Do item movement stuff in inventory db? Packets.Server.MoveReply sendPacket = new SagaMap.Packets.Server.MoveReply(); // Todo : Switch result of move and obtain relevent string to send from GameStringTable sendPacket.SetMessage(0); this.netIO.SendPacket(sendPacket, this.SessionID); }