Exemple #1
0
        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);
        }
Exemple #2
0
        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);
        }
Exemple #4
0
        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);
        }
Exemple #7
0
        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);
        }
Exemple #8
0
        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);
        }
Exemple #9
0
        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);
        }
Exemple #10
0
        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);
        }
Exemple #13
0
        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);
        }
Exemple #14
0
        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);
         }
     }
 }
Exemple #16
0
        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);
        }
Exemple #18
0
        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);
        }
Exemple #19
0
        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);
        }
Exemple #20
0
        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);
        }
Exemple #21
0
        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);
        }
Exemple #22
0
        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);
        }
Exemple #23
0
        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);
        }
Exemple #24
0
        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);
 }
Exemple #27
0
 public ActionResult <DomainCharacter> AddDomainCharacter([FromBody] DomainCharacter characterToAdd)
 {
     return(repositoryAdapter.SaveCharacter(characterToAdd));
 }
Exemple #28
0
 public ActionResult <DomainCharacter> UpdateDomainCharacter(DomainCharacter characterToUpdate, long id)
 {
     characterToUpdate.Id = id;
     return(repositoryAdapter.UpdateCharacter(characterToUpdate));
 }