using HSchool.Content; using HSchool.People; using HSchool.Server.Game; using HSchool.Simulation; namespace HSchool.Server.Tests; public class PersonCardReaderOffensesTests { private static readonly DateTime Start = new(2012, 4, 3, 9, 0, 0, DateTimeKind.Utc); [Fact] public void Card_ReturnsOffensesInSameOrderAsPerson() { var (catalog, map) = Vanilla(); var roster = RosterGenerator.Generate(catalog, map, schoolSeed: 42, "Russia", Start); var pupil = roster.People.First(person => person.IsStudent && !person.IsParent); var other = roster.People.First(person => person.IsStudent && !person.Id.Equals(pupil.Id, StringComparison.Ordinal)); var t0 = new DateTime(2012, 4, 3, 10, 0, 0, DateTimeKind.Utc); var rules = catalog.BehaviorRules!; OffenseMemory.Record(pupil, OffenseKinds.Quarrel, t0, other.Id, rules); OffenseMemory.Record(pupil, OffenseKinds.Fight, t0.AddMinutes(5), other.Id, rules); var school = School.Create(42, "OffensesCard", Start, catalog, map); using (school) { school.InstallPeople(roster, 42, "Russia", ApplicantPool.Empty); var card = PersonCardReader.Read(school, pupil.Id, "ru"); Assert.NotNull(card); Assert.NotNull(card!.Offenses); Assert.Equal(2, card.Offenses!.Count); Assert.Equal( pupil.Offenses!.Select(row => row.Kind).ToArray(), card.Offenses.Select(row => row.Kind).ToArray()); Assert.Equal(OffenseKinds.Quarrel, card.Offenses[0].Kind); Assert.Equal("ссора", card.Offenses[0].KindLabel); Assert.Equal(other.Id, card.Offenses[0].OtherPersonId); Assert.Equal(other.Name.Full, card.Offenses[0].OtherFullName); Assert.Equal(OffenseKinds.Fight, card.Offenses[1].Kind); Assert.Equal("драка", card.Offenses[1].KindLabel); } } private static (DefCatalog Catalog, MapLayout Map) Vanilla() { var root = Path.Combine(AppContext.BaseDirectory, "vanilla"); Assert.True(Directory.Exists(root), $"Vanilla pack missing at {root}."); var documents = new List(); foreach (var path in Directory.EnumerateFiles(root, "*.*", SearchOption.AllDirectories)) { if (!path.EndsWith(".jsonc", StringComparison.OrdinalIgnoreCase) && !path.EndsWith(".json", StringComparison.OrdinalIgnoreCase)) { continue; } documents.Add(new ContentDocument( CatalogLoader.CorePackId, Path.GetRelativePath(root, path).Replace('\\', '/'), File.ReadAllText(path))); } var catalog = new CatalogLoader().Load([CatalogLoader.CorePackId], documents); var map = CatalogLoader.LastDefaultMap([CatalogLoader.CorePackId], documents); Assert.NotNull(map); return (catalog, map); } }