public void DamageCharacter_ShouldReduceHp_Update_AndReturnCharacter_WithMatchingImmunityDefense() { DomainCharacter retrievedCharacter = new DomainCharacter { CurrentHitpoints = 10, MaxHitpoints = 100, Immunities = new List <string> { "slashing" } }; mockDbAdapter.Setup(adapter => adapter.GetCharacter(It.IsAny <long>())).Returns(retrievedCharacter); DomainCharacter expectedCharacter = new DomainCharacter { CurrentHitpoints = 10, MaxHitpoints = 100, Immunities = new List <string> { "slashing" } }; DomainCharacter actualCharacter = characterService.DamageCharacter(0, 10, "slashing"); mockDbAdapter.Verify(adapter => adapter.UpdateCharacter(It.Is <DomainCharacter>(c => c.CurrentHitpoints == expectedCharacter.CurrentHitpoints))); Assert.Equal(expectedCharacter.MaxHitpoints, actualCharacter.MaxHitpoints); Assert.Equal(expectedCharacter.CurrentHitpoints, actualCharacter.CurrentHitpoints); }
public void ToDomain_ShouldCalculateHpCorrectly_NoItems_MultipleClasses_WithConMod() { RpgClass firstClass = new RpgClass { ClassLevel = 2, HitDiceValue = 10, Name = "firstClass" }; RpgClass secondClass = new RpgClass { ClassLevel = 1, HitDiceValue = 6, Name = "secondClass" }; RpgClass thirdClass = new RpgClass { ClassLevel = 5, HitDiceValue = 12, Name = "thirdClass" }; List <RpgClass> singletonClass = new List <RpgClass> { firstClass, secondClass, thirdClass }; Stats conMod = new Stats { Constitution = 14 }; Character noItemCharacter = new Character { Classes = singletonClass, Stats = conMod, }; DomainCharacter actualCharacter = CharacterConverter.ToDomain(noItemCharacter); Assert.Equal(67, actualCharacter.MaxHitpoints); Assert.Equal(67, actualCharacter.CurrentHitpoints); }
public DomainCharacter DamageCharacter(long characterId, int damageAmount, string damageType) { DomainCharacter character = repositoryAdapter.GetCharacter(characterId); int adjustedDamageAmount = damageAmount; Console.WriteLine(damageType); if (character.Resistances != null && character.Resistances.Contains(damageType, StringComparer.OrdinalIgnoreCase)) { adjustedDamageAmount /= 2; } if (character.Vulnerabilities != null && character.Vulnerabilities.Contains(damageType, StringComparer.OrdinalIgnoreCase)) { adjustedDamageAmount *= 2; } if (character.Immunities != null && character.Immunities.Contains(damageType, StringComparer.OrdinalIgnoreCase)) { adjustedDamageAmount = 0; } if (adjustedDamageAmount > character.TemporaryHitpoints) { character.CurrentHitpoints = character.CurrentHitpoints - (adjustedDamageAmount - character.TemporaryHitpoints); character.TemporaryHitpoints = 0; } else { character.TemporaryHitpoints -= adjustedDamageAmount; } repositoryAdapter.UpdateCharacter(character); return(character); }
public void ToDomain_ShouldTranslateCharacterName() { Character namedCharacter = new Character { Name = "bob" }; DomainCharacter actualCharacter = CharacterConverter.ToDomain(namedCharacter); Assert.Equal("bob", actualCharacter.Name); }
public DomainCharacter HealCharacter(long characterId, int healAmount) { DomainCharacter character = repositoryAdapter.GetCharacter(characterId); int updatedHp = Math.Min(Math.Max(character.CurrentHitpoints, 0) + healAmount, character.MaxHitpoints); character.CurrentHitpoints = updatedHp; repositoryAdapter.UpdateCharacter(character); return(character); }
public DomainCharacter AddTemporaryHitpoints(long characterId, int addedTempHp) { DomainCharacter character = repositoryAdapter.GetCharacter(characterId); character.TemporaryHitpoints = Math.Max(character.TemporaryHitpoints, addedTempHp); repositoryAdapter.UpdateCharacter(character); return(character); }
public void DamageCharacter_shouldCallServiceAndReturnResult() { DomainCharacter damagedCharacter = new DomainCharacter { Name = "bob" }; mockCharacterService.Setup(service => service.DamageCharacter(3, 3, "fire")).Returns(damagedCharacter); DomainCharacter actualCharacter = healthTrackingController.DamageCharacter(3, 3, "fire").Value; Assert.Equal(damagedCharacter, actualCharacter); }
public void GetCharacter_ShouldFindCharacterWithMatchingIdAndReturn() { DomainCharacter retrievedCharacter = new DomainCharacter { Name = "sue" }; mockDbContext.Setup(dbContext => dbContext.Find <DomainCharacter>(It.Is <long>(l => l == 3))).Returns(retrievedCharacter); DomainCharacter actualCharacter = repository.GetCharacter(3); Assert.Equal(retrievedCharacter, actualCharacter); }
public void AddTempHp_shouldCallServiceAndReturnResult() { DomainCharacter tempHpCharacter = new DomainCharacter { Name = "bob" }; mockCharacterService.Setup(service => service.AddTemporaryHitpoints(3, 3)).Returns(tempHpCharacter); DomainCharacter actualCharacter = healthTrackingController.AddTemporaryHitpoints(3, 3).Value; Assert.Equal(tempHpCharacter, actualCharacter); }
public void HealCharacter_shouldCallServiceAndReturnResult() { DomainCharacter healedCharacter = new DomainCharacter { Name = "bob" }; mockCharacterService.Setup(service => service.HealCharacter(3, 3)).Returns(healedCharacter); DomainCharacter actualCharacter = healthTrackingController.HealCharacter(3, 3).Value; Assert.Equal(healedCharacter, actualCharacter); }
public void UpdateDomainCharacter_ShouldReturnCharacterRetrieval() { DomainCharacter characterToGet = new DomainCharacter { Name = "banana", Id = 3 }; mockDbAdapter.Setup(adapter => adapter.GetCharacter(It.Is <long>(l => l == 3))).Returns(characterToGet); ActionResult <DomainCharacter> gottenCharacter = domainCharacterController.GetDomainCharacter(3); mockDbAdapter.Verify(adapter => adapter.GetCharacter(It.Is <long>(l => l == 3))); Assert.Equal(characterToGet, gottenCharacter.Value); }
public void AddDomainCharacter_ShouldAddDomainCharacterToDb() { DomainCharacter characterToAdd = new DomainCharacter { Name = "banana" }; mockDbAdapter.Setup(adapter => adapter.SaveCharacter(It.IsAny <DomainCharacter>())).Returns(characterToAdd); ActionResult <DomainCharacter> addedCharacter = domainCharacterController.AddDomainCharacter(characterToAdd); mockDbAdapter.Verify(adapter => adapter.SaveCharacter(characterToAdd)); Assert.Equal(characterToAdd.Name, addedCharacter.Value.Name); }
public void SaveCharacter_ShouldUpdateCharacterInDb_returnCharacter() { DomainCharacter characterToUpdate = new DomainCharacter { Name = "sue" }; mockDbContext.Setup(dbContext => dbContext.DomainCharacters).Returns(GetQueryableMockDbSet <DomainCharacter>(new List <DomainCharacter>())); DomainCharacter character = repository.UpdateCharacter(characterToUpdate); mockDbContext.Verify(context => context.Update(It.Is <DomainCharacter>(c => c.Name == characterToUpdate.Name))); mockDbContext.Verify(context => context.SaveChanges(), Times.Once()); Assert.Equal(characterToUpdate, character); }
public void AddTemporaryHp_ShouldAddTemporaryHpAccordingToRules_Update_AndReturnCharacter(int addedTempHp, int currentTempHp, int expectedTempHp) { DomainCharacter retrievedCharacter = new DomainCharacter { TemporaryHitpoints = currentTempHp, }; mockDbAdapter.Setup(adapter => adapter.GetCharacter(It.IsAny <long>())).Returns(retrievedCharacter); DomainCharacter actualCharacter = characterService.AddTemporaryHitpoints(0, addedTempHp); mockDbAdapter.Verify(adapter => adapter.UpdateCharacter(It.Is <DomainCharacter>(c => c.TemporaryHitpoints == expectedTempHp))); Assert.Equal(expectedTempHp, actualCharacter.TemporaryHitpoints); }
public static void SeedDatabase(IApplicationBuilder app) { using (var serviceScope = app.ApplicationServices.CreateScope()) { ICharacterRepositoryAdapter adapter = serviceScope.ServiceProvider.GetService <ICharacterRepositoryAdapter>(); using (StreamReader r = new StreamReader("briv.json")) { string json = r.ReadToEnd(); Character character = JsonConvert.DeserializeObject <Character>(json); DomainCharacter initialChar = CharacterConverter.ToDomain(character); adapter.SaveCharacter(initialChar); } } }
public static DomainCharacter ToDomain(Character character) { if (character == null) { return(null); } DomainCharacter domainCharacter = new DomainCharacter(); int totalHp = 0; if (character.Classes != null) { foreach (RpgClass rpgClass in character.Classes) { totalHp += rpgClass.ClassLevel * ((rpgClass.HitDiceValue / 2) + 1); totalHp += rpgClass.ClassLevel * CalculateConMod(character.Items, character.Stats.Constitution); } } List <string> immunities = new List <string>(); List <string> resistances = new List <string>(); List <string> vulnerabilities = new List <string>(); if (character.Defenses != null) { foreach (CharacterDefense defense in character.Defenses) { if (defense.Defense.Equals("immunity", StringComparison.OrdinalIgnoreCase)) { immunities.Add(defense.Type); } else if (defense.Defense.Equals("vulnerable", StringComparison.OrdinalIgnoreCase)) { vulnerabilities.Add(defense.Type); } else if (defense.Defense.Equals("resistance", StringComparison.OrdinalIgnoreCase)) { resistances.Add(defense.Type); } } } domainCharacter.MaxHitpoints = totalHp; domainCharacter.CurrentHitpoints = totalHp; domainCharacter.Immunities = immunities; domainCharacter.Vulnerabilities = vulnerabilities; domainCharacter.Resistances = resistances; domainCharacter.Name = character.Name; return(domainCharacter); }
public void UpdateDomainCharacter_ShouldCallUpdateAndReturnCharacter() { DomainCharacter characterToUpdate = new DomainCharacter { Name = "banana" }; DomainCharacter characterToUpdateWithId = new DomainCharacter { Name = "banana", Id = 3 }; mockDbAdapter.Setup(adapter => adapter.UpdateCharacter(It.Is <DomainCharacter>(c => c.Id == 3))).Returns(characterToUpdateWithId); ActionResult <DomainCharacter> addedCharacter = domainCharacterController.UpdateDomainCharacter(characterToUpdate, 3); mockDbAdapter.Verify(adapter => adapter.UpdateCharacter(It.Is <DomainCharacter>(c => (c.Name == characterToUpdateWithId.Name) && (c.Id == characterToUpdateWithId.Id)))); Assert.Equal(characterToUpdateWithId, addedCharacter.Value); }
public void ToDomain_ShouldTranslateDefenseResistances() { CharacterDefense fireImmunity = new CharacterDefense { Defense = "resistance", Type = "radiant" }; CharacterDefense slashingImmunity = new CharacterDefense { Defense = "resistance", Type = "force" }; Character characterWithImmunities = new Character { Defenses = new List <CharacterDefense> { fireImmunity, slashingImmunity } }; DomainCharacter actualCharacter = CharacterConverter.ToDomain(characterWithImmunities); Assert.Equal(new List <string> { "radiant", "force" }, actualCharacter.Resistances); }
public void ToDomain_ShouldTranslateDefenseVulnerabilities() { CharacterDefense fireImmunity = new CharacterDefense { Defense = "vulnerable", Type = "bludgeoning" }; CharacterDefense slashingImmunity = new CharacterDefense { Defense = "vulnerable", Type = "slashing" }; Character characterWithImmunities = new Character { Defenses = new List <CharacterDefense> { fireImmunity, slashingImmunity } }; DomainCharacter actualCharacter = CharacterConverter.ToDomain(characterWithImmunities); Assert.Equal(new List <string> { "bludgeoning", "slashing" }, actualCharacter.Vulnerabilities); }
public void DamageCharacter_ShouldReduceHp_Update_AndReturnCharacter_NoDefense(int damageAmount, int currentHp, int expectedHp) { DomainCharacter retrievedCharacter = new DomainCharacter { CurrentHitpoints = currentHp, MaxHitpoints = 100, }; mockDbAdapter.Setup(adapter => adapter.GetCharacter(It.IsAny <long>())).Returns(retrievedCharacter); DomainCharacter expectedCharacter = new DomainCharacter { CurrentHitpoints = expectedHp, MaxHitpoints = 100, }; DomainCharacter actualCharacter = characterService.DamageCharacter(0, damageAmount, "slashing"); mockDbAdapter.Verify(adapter => adapter.UpdateCharacter(It.Is <DomainCharacter>(c => c.CurrentHitpoints == expectedHp))); Assert.Equal(expectedCharacter.MaxHitpoints, actualCharacter.MaxHitpoints); Assert.Equal(expectedCharacter.CurrentHitpoints, actualCharacter.CurrentHitpoints); }
public void HealCharacter_ShouldAddHealAmountToCurrentHitpoints_Update_AndReturnCharacter(int healAmount, int currentHp, int maxHp, int expectedHp) { DomainCharacter retrievedCharacter = new DomainCharacter { CurrentHitpoints = currentHp, MaxHitpoints = maxHp, }; mockDbAdapter.Setup(adapter => adapter.GetCharacter(It.IsAny <long>())).Returns(retrievedCharacter); DomainCharacter expectedCharacter = new DomainCharacter { CurrentHitpoints = expectedHp, MaxHitpoints = maxHp, }; DomainCharacter actualCharacter = characterService.HealCharacter(0, healAmount); mockDbAdapter.Verify(adapter => adapter.UpdateCharacter(It.Is <DomainCharacter>(c => c.CurrentHitpoints == expectedHp))); Assert.Equal(expectedCharacter.MaxHitpoints, actualCharacter.MaxHitpoints); Assert.Equal(expectedCharacter.CurrentHitpoints, actualCharacter.CurrentHitpoints); }
public void ToDomain_ShouldCalculateHpCorrectly_WithItemsThatModifyCon() { RpgClass firstClass = new RpgClass { ClassLevel = 2, HitDiceValue = 10, Name = "firstClass" }; RpgClass secondClass = new RpgClass { ClassLevel = 1, HitDiceValue = 6, Name = "secondClass" }; RpgClass thirdClass = new RpgClass { ClassLevel = 5, HitDiceValue = 12, Name = "thirdClass" }; List <RpgClass> singletonClass = new List <RpgClass> { firstClass, secondClass, thirdClass }; Modifier conModification = new Modifier { AffectedObject = "stats", AffectedValue = "constitution", Value = 2 }; Item item = new Item { Name = "Ioun Stone of Fortitude", Modifier = conModification }; Stats conMod = new Stats { Constitution = 14 }; Character characterWithConItem = new Character { Classes = singletonClass, Stats = conMod, Items = new List <Item> { item, item } }; DomainCharacter actualCharacter = CharacterConverter.ToDomain(characterWithConItem); Assert.Equal(83, actualCharacter.MaxHitpoints); Assert.Equal(83, actualCharacter.CurrentHitpoints); }
public void DamageCharacter_ShouldReduceHp_Update_AndReturnCharacter_NonMatchingDefenses() { DomainCharacter retrievedCharacter = new DomainCharacter { CurrentHitpoints = 10, MaxHitpoints = 100, Immunities = new List <string> { "slashing" }, Vulnerabilities = new List <string> { "bludgeoning" }, Resistances = new List <string> { "piercing" }, }; mockDbAdapter.Setup(adapter => adapter.GetCharacter(It.IsAny <long>())).Returns(retrievedCharacter); DomainCharacter expectedCharacter = new DomainCharacter { CurrentHitpoints = 0, MaxHitpoints = 100, Immunities = new List <string> { "slashing" }, Vulnerabilities = new List <string> { "bludgeoning" }, Resistances = new List <string> { "piercing" }, }; DomainCharacter actualCharacter = characterService.DamageCharacter(0, 10, "fire"); mockDbAdapter.Verify(adapter => adapter.UpdateCharacter(It.Is <DomainCharacter>(c => c.CurrentHitpoints == expectedCharacter.CurrentHitpoints))); Assert.Equal(expectedCharacter.MaxHitpoints, actualCharacter.MaxHitpoints); Assert.Equal(expectedCharacter.CurrentHitpoints, actualCharacter.CurrentHitpoints); }
public void ToDomain_ShouldCalculateHpCorrectly_NoItems_SingleClass_WithConMod(int constitutionScore, int classLevel, int hitDiceValue, int expectedHp) { RpgClass onlyClass = new RpgClass { ClassLevel = classLevel, HitDiceValue = hitDiceValue, Name = "singleClass" }; List <RpgClass> singletonClass = new List <RpgClass> { onlyClass }; Stats conMod = new Stats { Constitution = constitutionScore }; Character noItemCharacter = new Character { Classes = singletonClass, Stats = conMod, }; DomainCharacter actualCharacter = CharacterConverter.ToDomain(noItemCharacter); Assert.Equal(expectedHp, actualCharacter.MaxHitpoints); Assert.Equal(expectedHp, actualCharacter.CurrentHitpoints); }
public DomainCharacter SaveCharacter(DomainCharacter character) { dbContext.Add(character); dbContext.SaveChanges(); return(character); }
public DomainCharacter UpdateCharacter(DomainCharacter characterToUpdate) { dbContext.Update(characterToUpdate); dbContext.SaveChanges(); return(characterToUpdate); }
public ActionResult <DomainCharacter> AddDomainCharacter([FromBody] DomainCharacter characterToAdd) { return(repositoryAdapter.SaveCharacter(characterToAdd)); }
public ActionResult <DomainCharacter> UpdateDomainCharacter(DomainCharacter characterToUpdate, long id) { characterToUpdate.Id = id; return(repositoryAdapter.UpdateCharacter(characterToUpdate)); }