Пример #1
0
        //TODO UNIT TEST
        private int CalculateNeglectImpact(PetMetric petMetric, TimeSpan neglectPeriod, SpeciesVital speciesVital)
        {
            var metric = _metricRepository.Find(petMetric.MetricId);
            var value  = petMetric.Value;
            var rate   = 1 / metric.NaturalChangeOverTime;
            //How frequently we apply the NaturalChangeOverTime rate (not an even distribution)
            var frequencyTimespan = speciesVital.RequiredAttentiveness.ToTimeSpan();

            var numberOfNeglectedPeriods = neglectPeriod.DividedBy(frequencyTimespan);

            for (int i = 0; i == numberOfNeglectedPeriods; i++)
            {
                if (metric.Type == MetricType.DecreasesWithTime)
                {
                    value -= (value * rate);
                }

                if (metric.Type == MetricType.IncreasesWithTime)
                {
                    value += (value * rate);
                }
            }

            return(value);
        }
Пример #2
0
        private int RecalculateMetric(int oldHealth, PetMetric petMetric, SpeciesCareAction careAction)
        {
            var metric = _metricRepository.Find(petMetric.MetricId);

            return(metric.Type == MetricType.DecreasesWithTime
                ? oldHealth + careAction.Value
                : oldHealth - careAction.Value);
        }
Пример #3
0
        Given_a_valid_and_persisted_pet_registration_request_then_when_processed_returns_the_new_pet_data_and_updates_the_user_and_pet_repositories()
        {
            var sut = SetupMockMeJulieLogin();

            ErrorMessage error;

            MockPetPersister.Setup(m => m.TryPersist(ref It.Ref <Pet> .IsAny, out error))
            .Callback(new CallbackPet((ref Pet pet, out ErrorMessage errorCallback) =>
            {
                pet.PetId     = TestData.UsersPets.BurberryPetId + 1;
                errorCallback = null;
            })).Returns(true);

            MockPetMetricPersister.Setup(m => m.TryPersist(ref It.Ref <PetMetric> .IsAny, out error))
            .Callback(new CallbackPetMetric((ref PetMetric metric, out ErrorMessage errorCallback) =>
            {
                metric = new PetMetric(TestData.UsersPets.BurberryPetId + 1,
                                       TestData.AnimalMetrics.Confidence.MetricId, 0, DateTime.UtcNow);
                errorCallback = null;
            })).Returns(true);


            var request = new UserSessionRequest <NopePet>()
            {
                RequestType = RequestType.Create,
                Payload     = NopePet.NewPet("Smeagle", TestData.Animals.ChihuahuaAnimalId),
                UserId      = TestData.Users.MeJulie.UserId,
                PayloadType = typeof(NopePet)
            };

            IResponse response;

            var result = sut.ProcessRequest(request, out response);

            Assert.IsTrue(result);

            Assert.IsNotNull(response as UserSessionPetResponse);
            var responseData = (response as UserSessionPetResponse).Pets;

            Assert.AreEqual(responseData.Count, 1);
            var newPet = responseData.First(item => item.PetName == "Smeagle");

            AssertPetOwnerIsCorrect(newPet.Owner, TestData.Users.MeJulie);

            //Todo additional asserts
        }
Пример #4
0
        private PetVital Build(PetMetric petMetric, SpeciesVital speciesVital)
        {
            var neglectPeriod = DateTime.UtcNow - petMetric.LastInteractionTime;
            var healthDeclineDuringNeglect = CalculateNeglectImpact(petMetric, neglectPeriod, speciesVital);

            return(new PetVital()
            {
                Health = petMetric.Value - healthDeclineDuringNeglect,
                LastTimeCaredFor = petMetric.LastInteractionTime,
                TimeNeglectedFor = neglectPeriod,
                HealthDeclineDuringNeglect = healthDeclineDuringNeglect,
                VitalName = speciesVital.Name,
                VitalStats = speciesVital,
                PetVitalId = petMetric.MetricId,
                PetId = petMetric.PetId,
            });
        }
        public void Given_an_existing_Pet_and_Metric_PetMetrics_can_be_persisted_and_retrieved()
        {
            //Arrange
            var sutProvider  = new DataProvider <PetMetric>(_config, PetMetric.ToDomainConverter);
            var columns      = sutProvider.LoadAllColumns();
            var sutPersister = new PetMetricPersister(columns, _config);

            //Database row dependencies
            var metric = TestData.AnimalMetrics.Confidence;
            var animal = TestData.Animals.Chihuahua;

            ErrorMessage error;

            if (!PersistMetric(out error, ref metric))
            {
                Assert.Fail(error.Message);
            }

            if (!PersistAnimal(out error, ref animal))
            {
                Assert.Fail(error.Message);
            }

            var pet = new Pet(animal.AnimalId, "Princess");

            if (!PersistPet(out error, ref pet))
            {
                Assert.Fail(error.Message);
            }

            var petMetricRecord = new PetMetric(pet.PetId, metric.MetricId, 0, DateTime.UtcNow);

            //Act
            var persistResult = sutPersister.TryPersist(ref petMetricRecord, out error);

            //Assert
            Assert.IsTrue(persistResult);
            Assert.IsNull(error);
            var readResult = sutProvider.LoadAll().First();

            Assert.AreEqual(petMetricRecord, readResult);
        }
Пример #6
0
        public PetVital Rebuild(PetMetric petMetric, SpeciesVital animalVital, SpeciesCareAction speciesCareAction)
        {
            //This will recalculate the health based on last time interacted with. We then add the positive affect of the interaction
            var oldVital = Build(petMetric, animalVital);

            //Todo - straight return, this is just for debug
            var newVital = new PetVital()
            {
                Health                     = RecalculateMetric(oldVital.Health, petMetric, speciesCareAction), //We recalculate this
                LastTimeCaredFor           = DateTime.UtcNow,                                                  //Gets refreshed
                TimeNeglectedFor           = TimeSpan.FromSeconds(1),
                HealthDeclineDuringNeglect = 0,                                                                //No decline yet
                VitalName                  = animalVital.Name,
                VitalStats                 = animalVital,
                PetVitalId                 = animalVital.VitalId,
                PetId = petMetric.PetId
            };

            return(newVital);
        }
 private PetMetric AdjustLastInteractionTime(PetMetric petMetric, TimeSpan minutesUntilCanInteract)
 {
     return(new PetMetric(petMetric.PetId, petMetric.MetricId, 10, DateTime.UtcNow - minutesUntilCanInteract));
 }