//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); }
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); }
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 }
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); }
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)); }