public void AddMoreDesiresTest() { Config.IsInUnitTesting = true; CalcParameters parameters = CalcParametersFactory.MakeGoodDefaults(); HouseholdKey key = new HouseholdKey("hh5"); var persons = new List <ModularHouseholdPerson>(); var p = new Person("blub", 1, 1, 1, 1, PermittedGender.Male, string.Empty, string.Empty, Guid.NewGuid().ToStrGuid()); var tt = new TraitTag("traittag", "", TraitLimitType.NoLimit, TraitPriority.All, Guid.NewGuid().ToStrGuid()); var mhp = new ModularHouseholdPerson(null, -1, p.PrettyName, "", p, tt, Guid.NewGuid().ToStrGuid()); persons.Add(mhp); var hhVacations = new List <VacationTimeframe>(); Random r = new Random(1); NormalRandom nr = new NormalRandom(0, 1, r); //DeviceCategoryPicker picker = new DeviceCategoryPicker(r,null); //var parameters = new CalcFactoryParameters(picker); //CalcFactoryParameters.SetSkipChecking(true); //var cloc = new CalcLocation("cloc", 1, Guid.NewGuid().ToStrGuid()); //var mock = new Mock<ILogFile>(); CalcParameters calcParameters = CalcParametersFactory.MakeGoodDefaults(); VacationDtoFactory vfac = new VacationDtoFactory(calcParameters, r); CalcPersonDtoFactory cpf = new CalcPersonDtoFactory(parameters, r, nr, vfac); var hhtDesires = new List <ModularHousehold.PersonTraitDesireEntry>(); var d = new Desire("desire", 1, 1, 1, string.Empty, 1, false, 1, "", Guid.NewGuid().ToStrGuid()); var hhtDesire = new HHTDesire(1, 1, 1, d, HealthStatus.Healthy, 1, 1, string.Empty, "name", 1, 100, PermittedGender.All, Guid.NewGuid().ToStrGuid()); var hht = new HouseholdTrait("blub", null, "", "", "", 1, 1, 1, 1, 1, TimeType.Day, 1, 1, TimeType.Day, 1, 1, EstimateType.FromCalculations, "", Guid.NewGuid().ToStrGuid()); hhtDesires.Add( new ModularHousehold.PersonTraitDesireEntry( ModularHouseholdTrait.ModularHouseholdTraitAssignType.Age, null, hhtDesire, hht)); //var sharedDesireValues = new Dictionary<Desire, SharedDesireValue>(); var cpersons = cpf.MakePersonDtos(persons, key, hhVacations, hhtDesires, "hhname"); cpersons.Count.Should().Be(1); var cp = cpersons[0]; //CalcPersonFactory.AddTraitDesires(hhtDesires, cpersons, 1, "name", sharedDesireValues); cp.Desires.Count.Should().Be(1); cp.Desires.Count.Should().Be(1); p.PrettyName.Should().Be(cp.Name); p.Age.Should().Be(cp.Age); // id 1 for the dictionary Assert.Equal(d.PrettyName, cp.Desires[0].Name); }
public void SwapTagTest() { using (var db = new DatabaseSetup(Utili.GetCurrentMethodAndClass())) { Simulator sim = new Simulator(db.ConnectionString); ModularHousehold mhh = sim.ModularHouseholds.It[0]; ModularHouseholdPerson mhhPerson = mhh.Persons[0]; Person dstPerson = mhhPerson.Person; TraitTag dstTag = sim.TraitTags.It[10]; int traitsBefore = mhh.Traits.Count; mhh.SwapPersons(mhhPerson, dstPerson, dstTag); int traitsAfter = mhh.Traits.Count; (traitsAfter).Should().Be(traitsBefore); db.Cleanup(); } }
public static List <ModularHousehold> RunCalculationTests([NotNull] Simulator sim) { var allhh = new List <ModularHousehold>(); Logger.Info("Starting sync"); foreach (var templatePerson in sim.TemplatePersons.It) { var personCode = templatePerson.Name.Substring(0, 4); if (!personCode.StartsWith("TP", StringComparison.Ordinal)) { Logger.Warning("Ignoring " + templatePerson.Name + " because name doesn't start with TP"); continue; } // Person var p = sim.Persons.It.FirstOrDefault(x => x.Name == templatePerson.Name); if (p == null) { Logger.Info("Creating person " + templatePerson.Name); p = sim.Persons.CreateNewItem(sim.ConnectionString); } else { Logger.Warning("Person " + templatePerson.Name + " already existed."); } p.Name = templatePerson.Name; p.Gender = templatePerson.Gender; p.Age = templatePerson.Age; p.SickDays = templatePerson.SickDays; p.Description = "Created to test the template person " + templatePerson.Name; p.SaveToDB(); // modular Household var chh = sim.ModularHouseholds.It.FirstOrDefault(x => x.Name == templatePerson.Name); if (chh == null) { Logger.Info("Creating modular household " + templatePerson.Name); chh = sim.ModularHouseholds.CreateNewItem(sim.ConnectionString); } else { Logger.Warning("Modular Household " + templatePerson.Name + " already existed."); } chh.Name = templatePerson.Name; chh.Vacation = sim.Vacations[1]; chh.SaveToDB(); chh.Description = "Created to test the template person " + templatePerson.Name; if (templatePerson.BaseHousehold == null) { throw new LPGException("base household was null"); } //TODO: add traittag to template person ModularHouseholdPerson mhhperson = templatePerson.BaseHousehold.Persons.FirstOrDefault(x => x.Person == templatePerson.BasePerson); TraitTag tt = null; if (mhhperson != null) { tt = mhhperson.TraitTag; } else { Logger.Error("no tag"); } chh.AddPerson(p, tt); allhh.Add(chh); var i = 0; foreach (var personTrait in templatePerson.Traits) { if (personTrait.Trait.Name.Contains("boardgame")) { continue; } chh.AddTrait(personTrait.Trait, ModularHouseholdTrait.ModularHouseholdTraitAssignType.Name, p); i++; } Logger.Info("Added " + i + " traits."); var traits = templatePerson.Traits.Select(x => x.Trait).ToList(); var traitsToDelete = new List <ModularHouseholdTrait>(); i = 0; foreach (var chhtrait in chh.Traits) { if (!traits.Contains(chhtrait.HouseholdTrait)) { traitsToDelete.Add(chhtrait); i++; } } foreach (var trait in traitsToDelete) { chh.DeleteTraitFromDB(trait); } Logger.Info("Deleted " + i + " traits."); } return(allhh); }
private void CheckMinimumPersonRequirements([NotNull] ModularHousehold modularHousehold, [NotNull] ModularHouseholdPerson modularHouseholdPerson) { if (!PerformCleanupChecks) { return; } if (modularHouseholdPerson.Person.Name.ToUpperInvariant().Contains("MAID") || modularHouseholdPerson.Person.Description.ToUpperInvariant().Contains("MAID")) { return; } var traitsForPerson = modularHousehold.Traits.Where(x => x.DstPerson == modularHouseholdPerson.Person).ToList(); var traitNames = traitsForPerson.Select(x => x.HouseholdTrait.PrettyName.ToUpperInvariant()).ToList(); var shower = traitNames.Any(x => x.Contains("SHOWER")); if (!shower && modularHouseholdPerson.Person.Age > 10) { throw new DataIntegrityException( "No shower in the household " + modularHousehold.PrettyName + " for " + modularHouseholdPerson.Person.PrettyName, modularHousehold); } var sleep = traitNames.Any(x => x.Contains("SLEEP")); if (!sleep) { throw new DataIntegrityException( "No sleep in the household " + modularHousehold.PrettyName + " for " + modularHouseholdPerson.Person.PrettyName, modularHousehold); } var unhungry = traitNames.Any(x => x.Contains("UNHUNGRY")); if (!unhungry) { //var hungryTrait = sim.HouseholdTraits.It.First(x => x.Name.Contains("Desire for food, join only")); //modularHousehold.AddTrait(hungryTrait,ModularHouseholdTrait.ModularHouseholdTraitAssignType.Name, modularHouseholdPerson.Person); throw new DataIntegrityException("Unhungry not set in the household " + modularHousehold.PrettyName + " for " + modularHouseholdPerson.Person.PrettyName, modularHousehold); } var sickness = traitNames.Any(x => x.Contains("SICKNESS")); if (!sickness) { throw new DataIntegrityException( "No sickness activities in the household " + modularHousehold.PrettyName + " for " + modularHouseholdPerson.Person.PrettyName, modularHousehold); } var toilet = traitNames.Any(x => x.Contains("TOILET")); if (!toilet && modularHouseholdPerson.Person.Age > 3) { throw new DataIntegrityException( "No toilet activities in the household " + modularHousehold.PrettyName + " for " + modularHouseholdPerson.Person.PrettyName, modularHousehold); } var getready = traitNames.Any(x => x.Contains("READY")); if (!getready && modularHouseholdPerson.Person.Age > 5) { throw new DataIntegrityException( "No get ready activities in the household " + modularHousehold.PrettyName + " for " + modularHouseholdPerson.Person.PrettyName, modularHousehold); } var work = traitNames.Any(x => x.Contains("WORK")); var school = traitsForPerson.Any(y => y.HouseholdTrait.Tags.Any(x => x.Name.ToUpperInvariant() == "CHILD / SCHOOL")); var outsideafternoonTraits = traitsForPerson.Where( x => x.HouseholdTrait.Tags.Any( y => y.Name.ToUpperInvariant().Contains("OUTSIDE AFTERNOON ENTERTAINMENT"))).ToList(); if (outsideafternoonTraits.Count == 0 && !work && !school && modularHouseholdPerson.Person.Age > 10) { throw new DataIntegrityException( "Not a single outside afternoon entertainment in the household " + modularHousehold.PrettyName + " for " + modularHouseholdPerson.Person.PrettyName, modularHousehold); } if (school) { var homework = traitsForPerson.Any(x => x.HouseholdTrait.Name.ToLower(CultureInfo.InvariantCulture).Contains("homework")); if (!homework) { throw new DataIntegrityException("No homework in the household " + modularHousehold.PrettyName + " for the person " + modularHouseholdPerson.Person.PrettyName, modularHousehold); } } var outsideEveningTraits = traitsForPerson.Where( x => x.HouseholdTrait.Tags.Any( y => y.Name.ToUpperInvariant().Contains("OUTSIDE EVENING ENTERTAINMENT"))).ToList(); if (outsideEveningTraits.Count == 0 && modularHouseholdPerson.Person.Age > 15) { throw new DataIntegrityException( "Not a single outside evening entertainment in the household " + modularHousehold.PrettyName + " for " + modularHouseholdPerson.Person.PrettyName, modularHousehold); } var hobby = traitsForPerson.Where(x => x.HouseholdTrait.Tags.Any(y => y.Name.ToUpperInvariant().Contains("HOBBY"))) .ToList(); if (hobby.Count == 0 && modularHouseholdPerson.Person.Age > 15) { throw new DataIntegrityException( "Not a single hobby in the household " + modularHousehold.PrettyName + " for " + modularHouseholdPerson.Person.PrettyName, modularHousehold); } }