コード例 #1
0
        public void PetAnimal_ShouldBeMaxHappiness_WhenPettedAt100Happiness()
        {
            Animal animal = new Animal()
            {
                AnimalTypeId = 1,
                Happiness    = 100,
                Hunger       = 40,
                Id           = 1,
                LastChecked  = DateTime.Now,
                Name         = "Molly",
                UserId       = 1
            };


            AnimalTypeDTO animalType = new AnimalTypeDTO()
            {
                AnimalTypeName         = "Dog",
                HappinessDeductionRate = 3,
                HungerIncreaseRate     = 2,
                Id = 1
            };

            animal = animalStateManager.PetAnimal(animal, animalType);

            Assert.AreEqual(100, animal.Happiness);
        }
コード例 #2
0
        public void CalculateAnimalSate_ShouldReturnMaxValues_WhenCalledWithLowestPossibleDateTime()
        {
            Animal animal = new Animal()
            {
                AnimalTypeId = 1,
                Happiness    = 50,
                Hunger       = 50,
                Id           = 1,
                LastChecked  = DateTime.MinValue,
                Name         = "Molly",
                UserId       = 1
            };

            AnimalTypeDTO animalType = new AnimalTypeDTO()
            {
                AnimalTypeName         = "Dog",
                HappinessDeductionRate = 3,
                HungerIncreaseRate     = 2,
                Id = 1
            };

            Animal returnAnimal = animalStateManager.CalculateAnimalState(animal, animalType);

            Assert.AreEqual(100, returnAnimal.Hunger);
            Assert.AreEqual(0, returnAnimal.Happiness);
        }
コード例 #3
0
        public void FeedAnimal_ShouldBeMinimumHunger_WhenFedWhenFull()
        {
            Animal animal = new Animal()
            {
                AnimalTypeId = 1,
                Happiness    = 100,
                Hunger       = 0,
                Id           = 1,
                LastChecked  = DateTime.Now,
                Name         = "Molly",
                UserId       = 1
            };


            AnimalTypeDTO animalType = new AnimalTypeDTO()
            {
                AnimalTypeName         = "Dog",
                HappinessDeductionRate = 3,
                HungerIncreaseRate     = 2,
                Id = 1
            };

            animal = animalStateManager.FeedAnimal(animal, animalType);

            Assert.AreEqual(0, animal.Hunger);
        }
コード例 #4
0
        public AnimalTypeDTO GetAnimalTypeById(int id)
        {
            AnimalType    animalType  = animalTypeRepository.GetAnimalTypeById(id);
            AnimalTypeDTO returnValue = Mapper.Map <AnimalTypeDTO>(animalType);

            return(returnValue);
        }
コード例 #5
0
        public void CalculateAnimalState_ShouldChangeHappinessAndHunger_WhenCalled()
        {
            Animal animal = new Animal()
            {
                AnimalTypeId = 1,
                Happiness    = 50,
                Hunger       = 50,
                Id           = 1,
                LastChecked  = DateTime.Now.AddMinutes(-5),
                Name         = "Albie",
                UserId       = 1
            };

            AnimalTypeDTO animalType = new AnimalTypeDTO()
            {
                AnimalTypeName         = "Dog",
                HappinessDeductionRate = 3,
                HungerIncreaseRate     = 2,
                Id = 1
            };

            Animal returnAnimal = animalStateManager.CalculateAnimalState(animal, animalType);

            Assert.AreEqual(60, returnAnimal.Hunger);
            Assert.AreEqual(35, returnAnimal.Happiness);
        }
コード例 #6
0
        public IEnumerable <AnimalDTO> GetAnimalsByUserId(int id)
        {
            //Create new reference in heap
            List <Animal> animals = animalRepository.GetAnimalsFromUser(id).ToList();

            List <Animal> updatedAnimals = new List <Animal>();


            foreach (var animal in animals)
            {
                AnimalTypeDTO animalType = animalTypeManager.GetAnimalTypeById(animal.AnimalTypeId);
                //Calculate the new animal state values

                Animal tempAnimal;

                tempAnimal = animalStateManager.CalculateAnimalState(animal, animalType);
                //Update the animal in the database
                tempAnimal = animalRepository.UpdateAnimal(tempAnimal);

                updatedAnimals.Add(tempAnimal);
            }


            IEnumerable <AnimalDTO> returnValue = Mapper.Map <IEnumerable <AnimalDTO> >(updatedAnimals);

            return(returnValue);
        }
コード例 #7
0
        public void CalculateAnimalSate_ShouldReturnMaxValues_WhenCalledOutsideMaxRange()
        {
            Animal animal = new Animal()
            {
                AnimalTypeId = 1,
                Happiness    = 50,
                Hunger       = 50,
                Id           = 1,
                LastChecked  = DateTime.Now.AddMinutes(-500000),
                Name         = "Milo",
                UserId       = 1
            };

            AnimalTypeDTO animalType = new AnimalTypeDTO()
            {
                AnimalTypeName         = "Dog",
                HappinessDeductionRate = 3,
                HungerIncreaseRate     = 2,
                Id = 1
            };

            Animal returnAnimal = animalStateManager.CalculateAnimalState(animal, animalType);

            Assert.AreEqual(100, returnAnimal.Hunger);
            Assert.AreEqual(0, returnAnimal.Happiness);
        }
コード例 #8
0
        public Animal FeedAnimal(Animal animal, AnimalTypeDTO animalType)
        {
            //This could be expanded drastically to incorporate Animal Food objects that decrease food more depending upon their type.

            animal.Hunger -= 20;

            return(CalculateAnimalState(animal, animalType));
        }
コード例 #9
0
        public Animal PetAnimal(Animal animal, AnimalTypeDTO animalType)
        {
            //This could be expanded drastically to incorporate Animal Happiness objects that increase happiness more depending upon their type.

            animal.Happiness += 20;

            return(CalculateAnimalState(animal, animalType));
        }
コード例 #10
0
        public Animal CalculateAnimalState(Animal animal, AnimalTypeDTO animalType)
        {
            //Find the length of time since the last request
            TimeSpan timeSpan = DateTime.Now - animal.LastChecked;

            //Find total minutes between last request.
            //This calculate method is simple so will use Ints
            int minutes = Convert.ToInt32(timeSpan.TotalMinutes);

            //Ensure time has passed.
            if (minutes > 0)
            {
                try
                {
                    //Check for overflow... Someone could play this game once and then play it in 100 years
                    animal.Hunger = checked (animal.Hunger + (minutes * animalType.HungerIncreaseRate));
                }
                catch (OverflowException)
                {
                    animal.Hunger = 100;
                }

                try
                {
                    animal.Happiness = checked (animal.Happiness - (minutes * animalType.HappinessDeductionRate));
                }
                catch (OverflowException)
                {
                    animal.Happiness = 0;
                }

                animal.LastChecked = DateTime.Now;
            }
            //Check if values have gone below correct range

            if (animal.Hunger > 100)
            {
                animal.Hunger = 100;
            }
            else if (animal.Hunger < 0)
            {
                animal.Hunger = 0;
            }

            if (animal.Happiness > 100)
            {
                animal.Happiness = 100;
            }
            else if (animal.Happiness < 0)
            {
                animal.Happiness = 0;
            }

            return(animal);
        }
コード例 #11
0
        public void GetAnimalTypeById_ShouldReturnUser_WhenCalledWithValidId()
        {
            var result   = animalTypeController.GetById(1);
            var response = result as OkObjectResult;

            Assert.IsNotNull(response);
            Assert.AreEqual(200, response.StatusCode);

            AnimalTypeDTO animalTypeDTO = response.Value as AnimalTypeDTO;

            Assert.AreEqual(mockAnimalTypes[0].Id, animalTypeDTO.Id);
        }
コード例 #12
0
 public void AddAnimalType(AnimalTypeDTO animalType)
 {
     if (animalType.Id == Guid.Empty)
     {
         animalType.Id = Guid.NewGuid();
     }
     else
     {
         Instance.EditAnimalType(animalType);
     }
     RunCommand(() => Instance.AnimalTypes.Add(AutoMapperImpl.Mapper.Map <AnimalType>(animalType)));
 }
コード例 #13
0
        public AnimalDTO PetAnimal(int userId, int id)
        {
            Animal animal = animalRepository.GetAnimalById(id);

            if (userId != animal.UserId)
            {
                throw new ResourceNotOwnedException();
            }

            //Find the animalType associated with the animal
            AnimalTypeDTO animalType = animalTypeManager.GetAnimalTypeById(animal.AnimalTypeId);

            animal = animalStateManager.PetAnimal(animal, animalType);

            animal = animalRepository.UpdateAnimal(animal);

            AnimalDTO returnValue = Mapper.Map <AnimalDTO>(animal);

            return(returnValue);
        }
コード例 #14
0
        public IActionResult GetById(int id)
        {
            AnimalTypeDTO animalType = null;

            try
            {
                animalType = animalTypeManager.GetAnimalTypeById(id);
            }
            //Manager will throw exceptions to manage responses
            catch (InvalidOperationException)
            {
                return(NotFound($"{id} was not found"));
            }

            catch (Exception)
            {
                return(StatusCode(500));
            }

            return(Ok(animalType));
        }
コード例 #15
0
 public void AddAnimalType(AnimalTypeDTO animalType)
 {
     DatabaseService.Instance.AddAnimalType(animalType);
 }
コード例 #16
0
 public void RemoveAnimalType(AnimalTypeDTO animalType)
 {
     throw new NotImplementedException();
 }
コード例 #17
0
 public void RemoveAnimalType(AnimalTypeDTO animalType)
 {
     DatabaseService.Instance.RemoveAnimalType(animalType);
 }
コード例 #18
0
 public void EditAnimalType(AnimalTypeDTO animalType)
 {
     DatabaseService.Instance.EditAnimalType(animalType);
 }