public void ChooseWeaponsShouldDoNothingIfNoArchtypeIsPossible()
        {
            var weapons = new List<WeaponSkill>()
                {
                    new WeaponSkill("A", 1, WeaponKind.Unspecified, 10, 1, 1),
                };
            var chooser = new RandomWeaponChooser(weapons);

            chooser.ChooseWeapons(this._dummyCharacter);

            // Nothing should have happened. Just ensuring that we don't error.
            this._dummyCharacter.WeaponRanks.Should().BeEmpty();
        }
        public void CreatePossibilitiesCanCreateEmptyListIfAppropriate()
        {
            var chooser = new RandomWeaponChooser(new List<WeaponSkill>()
                {
                    new WeaponSkill("A", 0, 2),
                    new WeaponSkill("B", 2, 0),
                    new WeaponSkill("C", 10, 10),
                });

            var results = chooser.CreatePossibilities(1, 1);

            var resultsList = results as IList<WeaponSkill> ?? results.ToList();
            resultsList.Should().BeEmpty();
        }
        public void AddRanksForMeleeFighterShouldChooseAMeleeWeapon()
        {
            var weapons = new List<WeaponSkill>()
                {
                    new WeaponSkill("A", 1, WeaponKind.Melee, 10, 1, 1),
                    new WeaponSkill("B", 1, WeaponKind.Ranged, 10, 1, 1),
                    new WeaponSkill("C", 1, WeaponKind.Ranged, 10, 1, 1),
                    new WeaponSkill("D", 1, WeaponKind.Ranged, 10, 1, 1),
                };
            var chooser = new RandomWeaponChooser(weapons);

            chooser.AddRanksForMeleeFighter(weapons, this._dummyCharacter);

            // There is only 1 melee weapon, so it MUST be chosen
            this._dummyCharacter.WeaponRanks.Should().Contain(i => i.Weapon == weapons.First());
        }
        public void AddRanksForArcherShouldChooseARealRangedWeapon()
        {
            // Weapons that have more than just the ranged flag aren't primarilly ranged, so
            // we don't want them counted as a primary ranged weapon
            var weapons = new List<WeaponSkill>()
                {
                    new WeaponSkill("A", 1, WeaponKind.Ranged, 10, 1, 1),
                    new WeaponSkill("B", 1, WeaponKind.Melee | WeaponKind.Ranged, 10, 1, 1),
                    new WeaponSkill("C", 1, WeaponKind.Melee | WeaponKind.Ranged, 10, 1, 1),
                    new WeaponSkill("D", 1, WeaponKind.Melee | WeaponKind.Ranged, 10, 1, 1),
                };
            var chooser = new RandomWeaponChooser(weapons);

            var result = chooser.AddRanksForArcher(weapons, this._dummyCharacter);

            // There is only 1 ranged-only weapon, so it MUST be chosen
            result.Should().BeTrue();
            this._dummyCharacter.WeaponRanks.Should().Contain(i => i.Weapon == weapons.First());
        }
        public void CreatePossibilitiesUsesStrengthAndDex()
        {
            var chooser = new RandomWeaponChooser(new List<WeaponSkill>()
                {
                    new WeaponSkill("A", 1, 1),
                    new WeaponSkill("B", 2, 3),
                    new WeaponSkill("C", 3, 2),
                    new WeaponSkill("D", 3, 3),
                    new WeaponSkill("E", 2, 2)
                });

            var results = chooser.CreatePossibilities(2, 2);

            var resultsList = results as IList<WeaponSkill> ?? results.ToList();
            resultsList.Should().HaveCount(2);
            resultsList.Should().OnlyContain(w => w.FullName == "A" || w.FullName == "E");
        }