namespace HSchool.People.Tests; public class OpinionGeneratorTests { [Fact] public void ParentAndChild_HavePositiveOpinionsBothWays_AfterGeneration() { var roster = Fixtures.Generate(Fixtures.Classrooms(4)); var people = roster.People.ToDictionary(person => person.Id, StringComparer.Ordinal); var child = roster.People.First(person => person.IsStudent && !person.IsParent); var family = roster.Families.Single(row => row.Id.Equals(child.FamilyId, StringComparison.Ordinal)); Assert.NotEmpty(family.ParentIds); foreach (var parentId in family.ParentIds) { Assert.True(child.Opinions.TryGetValue(parentId, out var toParent)); Assert.True(toParent > 0); var parent = people[parentId]; Assert.True(parent.Opinions.TryGetValue(child.Id, out var toChild)); Assert.True(toChild > 0); } } [Fact] public void Classmates_HaveNoOpinionEntry_AfterGeneration() { var roster = Fixtures.Generate(Fixtures.Classrooms(4)); var pupils = roster.People.Where(person => person.IsStudent).ToArray(); Assert.True(pupils.Length >= 2); var first = pupils[0]; var classmate = pupils.First(person => person.Id != first.Id && !OpinionStore.FamilyMemberIds(roster, first).Contains(person.Id)); Assert.False(first.Opinions.ContainsKey(classmate.Id)); Assert.False(classmate.Opinions.ContainsKey(first.Id)); } [Fact] public void ParentToChild_AndChildToParent_CanDiffer() { var roster = Fixtures.Generate(Fixtures.Classrooms(4)); var people = roster.People.ToDictionary(person => person.Id, StringComparer.Ordinal); var child = roster.People.First(person => person.IsStudent && !person.IsParent); var parentId = roster.Families.Single(row => row.Id.Equals(child.FamilyId, StringComparison.Ordinal)).ParentIds[0]; var parent = people[parentId]; Assert.True(parent.Opinions.TryGetValue(child.Id, out var parentView)); Assert.True(child.Opinions.TryGetValue(parentId, out var childView)); Assert.NotEqual(parentView, childView); } }