public void GivenGameWhenLoadFromDatabaseThenCharactersAreLoadedFromDatabase() { using (var connection = new SqliteConnection($"Data Source={_otherOtherFilePath}")) { connection.Open(); var createTableCommandText = "create table [Characters](Id integer primary key asc, Name Text, Armor integer, Str integer, Dex integer, Const integer)"; using (var createTableCommand = new SqliteCommand(createTableCommandText, connection)) { createTableCommand.ExecuteNonQueryAsync(); } var insertRowsCommandText = "insert into [Characters] (Name, Armor, Str, Dex, Const) values ('John', 9, 8, 7, 6);\n" + "insert into [Characters] (Name, Armor, Str, Dex, Const) values ('Jim', 20, 20, 20, 20);\n"; using (var insertRowsCommand = new SqliteCommand(insertRowsCommandText, connection)) { insertRowsCommand.ExecuteNonQueryAsync(); } } var game = new EvercraftGame(); game.Load(_otherOtherFilePath); game.Chars[0].Name.Should().Be("John"); game.Chars[0].Arm.Should().Be(9); game.Chars[0].Str.Should().Be(8); game.Chars[0].Dex.Should().Be(7); game.Chars[0].Const.Should().Be(6); game.Chars[1].Name.Should().Be("Jim"); game.Chars[1].Arm.Should().Be(20); game.Chars[1].Str.Should().Be(20); game.Chars[1].Dex.Should().Be(20); game.Chars[1].Const.Should().Be(20); }
public void GivenGameWhenLoadFromJsonThenCharactersAreLoadedFromJsonFile() { var json = "{" + "'characters': [" + "{ 'name': 'bob', 'arm': 13, 'str': 14, 'dex': 15, 'const': 16 }," + "{ 'name': 'jack', 'arm': 2, 'str': 3, 'dex': 4, 'const': 5 }," + "]" + "}"; File.WriteAllText(_otherFilePath, json); var game = new EvercraftGame(); game.Load(_otherFilePath); game.Chars[0].Name.Should().Be("bob"); game.Chars[0].Arm.Should().Be(13); game.Chars[0].Str.Should().Be(14); game.Chars[0].Dex.Should().Be(15); game.Chars[0].Const.Should().Be(16); game.Chars[1].Name.Should().Be("jack"); game.Chars[1].Arm.Should().Be(2); game.Chars[1].Str.Should().Be(3); game.Chars[1].Dex.Should().Be(4); game.Chars[1].Const.Should().Be(5); }
public void GivenWebDisplayTypeWhenRenderedThenCharacterInfoIsRenderedUsingHtml() { var game = new EvercraftGame(); game.Start("Thing 1", "Thing 2"); var display = new EvercraftGameDisplay(DisplayType.Web); var htmlDoc = new HtmlDocument(); htmlDoc.LoadHtml(display.Render(game)); var characters = htmlDoc.DocumentNode.QuerySelectorAll("[data-character]").ToArray(); characters.Should().HaveCount(2); characters.ElementAt(0).QuerySelector("[data-name]").InnerText.Should().Contain("Thing 1"); characters.ElementAt(0).QuerySelector("[data-hit-points]").InnerText.Should().Contain("5"); characters.ElementAt(0).QuerySelector("[data-armor]").InnerText.Should().Contain("10"); characters.ElementAt(0).QuerySelector("[data-strength]").InnerText.Should().Contain("N/A"); characters.ElementAt(0).QuerySelector("[data-dexterity]").InnerText.Should().Contain("N/A"); characters.ElementAt(0).QuerySelector("[data-constitution]").InnerText.Should().Contain("N/A"); characters.ElementAt(1).QuerySelector("[data-name]").InnerText.Should().Contain("Thing 2"); characters.ElementAt(1).QuerySelector("[data-hit-points]").InnerText.Should().Contain("5"); characters.ElementAt(1).QuerySelector("[data-armor]").InnerText.Should().Contain("10"); characters.ElementAt(1).QuerySelector("[data-strength]").InnerText.Should().Contain("N/A"); characters.ElementAt(1).QuerySelector("[data-dexterity]").InnerText.Should().Contain("N/A"); characters.ElementAt(1).QuerySelector("[data-constitution]").InnerText.Should().Contain("N/A"); }
public void GivenConsoleDisplayTypeAndCharactersWithAttributesWhenRenderedThenCharacterAttributesAreRenderedUsingString() { var game = new EvercraftGame(); game.Start("Thing 1", "Thing 2"); game.ApplyStrength(1, game.Chars[0]); game.ApplyStrength(2, game.Chars[1]); game.ApplyDexterity(3, game.Chars[0]); game.ApplyDexterity(4, game.Chars[1]); game.ApplyConstitution(5, game.Chars[0]); game.ApplyConstitution(6, game.Chars[1]); var display = new EvercraftGameDisplay(DisplayType.Console); var content = display.Render(game); content.Should().Be("Characters\n" + "Thing 1:\n" + "\tHit Points: 5\n" + "\tArmor: 10\n" + "\tStrength: 1\n" + "\tDexterity: 3\n" + "\tConstitution: 5\n" + "Thing 2:\n" + "\tHit Points: 5\n" + "\tArmor: 10\n" + "\tStrength: 2\n" + "\tDexterity: 4\n" + "\tConstitution: 6\n"); }
public void GivenFirstCharacterHasConstitutionWithNegative_5_ThenCharacterIsNotDeadInitially() { var game = new EvercraftGame(); game.Start("Jack", "Bob"); game.ApplyConstitution(1, game.Chars[0]); game.IsDead(game.Chars[0]).Should().Be(false); }
public void GivenGameHasStartedWhenRollIsEqualToArmorThenCharacterTakesDamage() { var game = new EvercraftGame(); game.Start("Jack", "Bob"); game.Attack(10, game.Chars[1]); game.Chars[1].HitPts.Should().Be(4); }
public void GivenGameHasStartedWhenSecondCharacterAttacksTheFirstThenFirstCharacterTakesDamage() { var game = new EvercraftGame(); game.Start("Jack", "Bob"); game.Attack(10, game.Chars[0]); game.Chars[0].HitPts.Should().Be(4); }
public void GivenGameHasStartedWhenRollIsLessThanArmorThenNoDamageIsDealt() { var game = new EvercraftGame(); game.Start("Jack", "Bob"); game.Attack(9, game.Chars[1]); game.Chars[1].HitPts.Should().Be(5); }
public void GivenGameHasStartedWhenRollIsACriticalHitThenCharacterTakesDoubleDamage() { var game = new EvercraftGame(); game.Start("Jack", "Bob"); game.Attack(20, game.Chars[1]); game.Chars[1].HitPts.Should().Be(3); }
public void GivenGameHasStartedWhenCharacterEquipsHeavyArmorThenCharactersArmorIsIncreasedByTwo() { var game = new EvercraftGame(); game.Start("Jack", "Bob"); game.EquipArmor(ArmorType.Iron, 51, game.Chars[0]); game.Chars[0].Arm.Should().Be(12); }
public void GivenGameHasStartedWhenCharacterEquipsIronArmorThenCharactersArmorIsUnchanged() { var game = new EvercraftGame(); game.Start("Jack", "Bob"); game.EquipArmor(ArmorType.Iron, 50, game.Chars[1]); game.Chars[1].Arm.Should().Be(10); }
public void GivenGameHasStartedWhenCharacterEquipsSteelArmorThenCharactersArmorIsIncreasedByOne() { var game = new EvercraftGame(); game.Start("Jack", "Bob"); game.EquipArmor(ArmorType.Steel, 50, game.Chars[1]); game.Chars[1].Arm.Should().Be(11); }
public void GivenSecondCharacterHasConstitutionWithNegative_5_ModifierWhenRollIsGreaterThanArmorThenSecondCharacterDies() { var game = new EvercraftGame(); game.Start("Jack", "Bob"); game.ApplyConstitution(1, game.Chars[1]); game.Attack(10, game.Chars[1]); game.IsDead(game.Chars[1]).Should().Be(true); }
public void GivenCharacterHasStrengthWithNegativeModifierWhenRollIsModifiedToBeGreaterThanArmorThenCharacterTakesTwoDamage(int strength, int modifier) { var game = new EvercraftGame(); game.Start("Jack", "Bob"); game.ApplyStrength(strength, game.Chars[0]); game.Attack(10 - modifier, game.Chars[1]); game.Chars[1].HitPts.Should().Be(3); }
public void GivenSecondCharacterHasStrengthWithPositiveModifierWhenRollIsModifiedToBeLessThanArmorThenSecondCharacterTakesOneDamage(int strength, int modifier) { var game = new EvercraftGame(); game.Start("Jack", "Bob"); game.ApplyStrength(strength, game.Chars[1]); game.Attack(9 - modifier, game.Chars[0]); game.Chars[0].HitPts.Should().Be(4); }
public void GivenFirstCharacterHasDexterityWithPositiveModifierWhenRollIsLessThanModifiedArmorThenFirstCharacterTakesNoDamage(int dexterity, int modifier) { var game = new EvercraftGame(); game.Start("Jack", "Bob"); game.ApplyDexterity(dexterity, game.Chars[0]); game.Attack(9 + modifier, game.Chars[0]); game.Chars[0].HitPts.Should().Be(5); }
public void GivenSecondCharacterHasDexterityWithPositiveModifierWhenRollIsGreaterThanModifiedArmorThenSecondCharacterTakesDamage(int dexterity, int modifier) { var game = new EvercraftGame(); game.Start("Jack", "Bob"); game.ApplyDexterity(dexterity, game.Chars[1]); game.Attack(10 + modifier, game.Chars[1]); game.Chars[1].HitPts.Should().Be(4); }
public void GivenFirstCharacterHasConstitutionWithPositiveModifierWhenRollIsGreaterThanArmorThenFirstCharacterIsAliveAfterAttacks(int constitution, int attacks) { var game = new EvercraftGame(); game.Start("Jack", "Bob"); game.ApplyConstitution(constitution, game.Chars[0]); for (var i = 0; i < attacks; i++) { game.Attack(10, game.Chars[0]); } game.IsDead(game.Chars[0]).Should().Be(false); }
public void GivenCharacterHasOneHitPointLeftWhenRollIsGreaterThanArmorThenCharacterIsDead() { var game = new EvercraftGame(); game.Start("Jack", "Bob"); game.Attack(11, game.Chars[1]); game.Attack(11, game.Chars[1]); game.Attack(11, game.Chars[1]); game.Attack(11, game.Chars[1]); game.Attack(11, game.Chars[1]); game.Chars[1].HitPts.Should().Be(0); game.IsDead(game.Chars[1]).Should().Be(true); }
public void GivenGameIsNotStartedWhenStartNewGameThenDefaultCharactersAreCreated() { var game = new EvercraftGame(); game.Start("Someone", "Other"); game.Chars.Should().HaveCount(2); game.Chars[0].Name.Should().Be("Someone"); game.Chars[0].HitPts.Should().Be(5); game.Chars[0].Arm.Should().Be(10); game.Chars[0].Str.Should().Be(null); game.Chars[0].Dex.Should().Be(null); game.Chars[0].Const.Should().Be(null); game.Chars[1].Name.Should().Be("Other"); game.Chars[1].HitPts.Should().Be(5); game.Chars[1].Arm.Should().Be(10); game.Chars[1].Str.Should().Be(null); game.Chars[1].Dex.Should().Be(null); game.Chars[1].Const.Should().Be(null); }
public void GivenGameWhenLoadFromCsvThenCharactersAreLoadedFromFile() { File.WriteAllText(_filePath, "Character,Armor,Strength,Dexterity,Constitution\n" + "Jack,12,13,14,15\n" + "Bob,13,14,15,16\n"); var game = new EvercraftGame(); game.Load(_filePath); game.Chars[0].Name.Should().Be("Jack"); game.Chars[0].Arm.Should().Be(12); game.Chars[0].Str.Should().Be(13); game.Chars[0].Dex.Should().Be(14); game.Chars[0].Const.Should().Be(15); game.Chars[1].Name.Should().Be("Bob"); game.Chars[1].Arm.Should().Be(13); game.Chars[1].Str.Should().Be(14); game.Chars[1].Dex.Should().Be(15); game.Chars[1].Const.Should().Be(16); }
public void GivenWebDisplayTypeAndCharactersWithAttributesWhenRenderedThenCharacterAttributesAreRenderedUsingHtml() { var game = new EvercraftGame(); game.Start("Thing 1", "Thing 2"); game.ApplyStrength(1, game.Chars[0]); game.ApplyStrength(2, game.Chars[1]); game.ApplyDexterity(3, game.Chars[0]); game.ApplyDexterity(4, game.Chars[1]); game.ApplyConstitution(5, game.Chars[0]); game.ApplyConstitution(6, game.Chars[1]); var display = new EvercraftGameDisplay(DisplayType.Web); var htmlDoc = new HtmlDocument(); htmlDoc.LoadHtml(display.Render(game)); var characters = htmlDoc.DocumentNode.QuerySelectorAll("[data-character]").ToArray(); characters.Should().HaveCount(2); characters.ElementAt(0).QuerySelector("[data-name]").InnerText.Should().Contain("Thing 1"); characters.ElementAt(0).QuerySelector("[data-hit-points]").InnerText.Should().Contain("5"); characters.ElementAt(0).QuerySelector("[data-armor]").InnerText.Should().Contain("10"); characters.ElementAt(0).QuerySelector("[data-strength]").InnerText.Should().Contain("1"); characters.ElementAt(0).QuerySelector("[data-dexterity]").InnerText.Should().Contain("3"); characters.ElementAt(0).QuerySelector("[data-constitution]").InnerText.Should().Contain("5"); characters.ElementAt(1).QuerySelector("[data-name]").InnerText.Should().Contain("Thing 2"); characters.ElementAt(1).QuerySelector("[data-hit-points]").InnerText.Should().Contain("5"); characters.ElementAt(1).QuerySelector("[data-armor]").InnerText.Should().Contain("10"); characters.ElementAt(1).QuerySelector("[data-strength]").InnerText.Should().Contain("2"); characters.ElementAt(1).QuerySelector("[data-dexterity]").InnerText.Should().Contain("4"); characters.ElementAt(1).QuerySelector("[data-constitution]").InnerText.Should().Contain("6"); }
public void GivenConsoleDisplayTypeWhenRenderedThenCharacterInfoIsRenderedUsingAString() { var game = new EvercraftGame(); game.Start("Thing 1", "Thing 2"); var display = new EvercraftGameDisplay(DisplayType.Console); var content = display.Render(game); content.Should().Be("Characters\n" + "Thing 1:\n" + "\tHit Points: 5\n" + "\tArmor: 10\n" + "\tStrength: N/A\n" + "\tDexterity: N/A\n" + "\tConstitution: N/A\n" + "Thing 2:\n" + "\tHit Points: 5\n" + "\tArmor: 10\n" + "\tStrength: N/A\n" + "\tDexterity: N/A\n" + "\tConstitution: N/A\n"); }