Record slice 7 B-C recheck after later slices drifted climate and dress paths.
Adds a weather-drop walk test so a jacket is not teleported onto the body; PE change regressions already red on main stay open. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -249,6 +249,70 @@ public class AppropriatenessSimulationTests
|
||||
Assert.Equal(0, BrightWornCount(school));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void WeatherDrop_WalksToChangingRoom_DoesNotTeleportJacket()
|
||||
{
|
||||
var (school, pupilId) = StaffedClassWithLocker();
|
||||
using (school)
|
||||
{
|
||||
MorningDress.Apply(school);
|
||||
AdvanceTo(school, new DateTime(2012, 4, 3, 8, 30, 0, DateTimeKind.Utc));
|
||||
|
||||
var here = school.CapturePresence()
|
||||
.Where(row => row.NodeId is not null)
|
||||
.Select(row => row.PersonId)
|
||||
.ToHashSet(StringComparer.Ordinal);
|
||||
Assert.Contains(pupilId, here);
|
||||
var pupil = school.Roster!.People.Single(person => person.Id == pupilId);
|
||||
var items = pupil.Items
|
||||
.Select(item =>
|
||||
item.Location == ItemLocations.Worn
|
||||
&& school.Catalog!.Things[item.Def].Layers.Contains(ApparelLayers.Outer, StringComparer.Ordinal)
|
||||
? item with { Location = ItemLocations.Locker }
|
||||
: item)
|
||||
.ToList();
|
||||
items.Add(new InventoryItem("Jacket", "Blue", 1f, ItemLocations.Locker));
|
||||
ReplaceItems(pupil, items);
|
||||
|
||||
school.ForceWeather(new OutdoorWeather(-8f, Precipitation.Snow));
|
||||
pupil = school.Roster.People.Single(person => person.Id == pupil.Id);
|
||||
Assert.DoesNotContain(
|
||||
pupil.Items,
|
||||
item => item.Location == ItemLocations.Worn
|
||||
&& school.Catalog!.Things[item.Def].Layers.Contains(ApparelLayers.Outer, StringComparer.Ordinal));
|
||||
|
||||
AdvanceTo(school, new DateTime(2012, 4, 3, 8, 32, 0, DateTimeKind.Utc));
|
||||
pupil = school.Roster.People.Single(person => person.Id == pupil.Id);
|
||||
Assert.DoesNotContain(
|
||||
pupil.Items,
|
||||
item => item.Location == ItemLocations.Worn
|
||||
&& school.Catalog!.Things[item.Def].Layers.Contains(ApparelLayers.Outer, StringComparer.Ordinal));
|
||||
var duringLesson = school.CapturePresence().Single(item => item.PersonId == pupil.Id);
|
||||
Assert.NotEqual(
|
||||
pupil.Female ? "girls-changing-room" : "boys-changing-room",
|
||||
duringLesson.NodeId);
|
||||
|
||||
AdvanceTo(school, new DateTime(2012, 4, 3, 11, 08, 0, DateTimeKind.Utc));
|
||||
pupil = school.Roster.People.Single(person => person.Id == pupil.Id);
|
||||
Assert.DoesNotContain(
|
||||
pupil.Items,
|
||||
item => item.Location == ItemLocations.Worn
|
||||
&& school.Catalog!.Things[item.Def].Layers.Contains(ApparelLayers.Outer, StringComparer.Ordinal));
|
||||
var row = school.CapturePresence().Single(item => item.PersonId == pupil.Id);
|
||||
var room = pupil.Female ? "girls-changing-room" : "boys-changing-room";
|
||||
Assert.True(
|
||||
row.NodeId == room || row.Path.Contains(room, StringComparer.Ordinal),
|
||||
$"expected a walk toward {room}, sat at {row.NodeId} path [{string.Join(',', row.Path)}]");
|
||||
|
||||
AdvanceTo(school, new DateTime(2012, 4, 3, 11, 20, 0, DateTimeKind.Utc));
|
||||
pupil = school.Roster.People.Single(person => person.Id == pupil.Id);
|
||||
Assert.Contains(
|
||||
pupil.Items,
|
||||
item => item.Location == ItemLocations.Worn
|
||||
&& school.Catalog!.Things[item.Def].Layers.Contains(ApparelLayers.Outer, StringComparer.Ordinal));
|
||||
}
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void WhiteTopBlackBottom_AfterMorning_WhiteShirtsOnStudents()
|
||||
{
|
||||
@@ -317,6 +381,29 @@ public class AppropriatenessSimulationTests
|
||||
}
|
||||
}
|
||||
|
||||
private static (School School, string PupilId) StaffedClassWithLocker()
|
||||
{
|
||||
var (catalog, map) = Vanilla();
|
||||
var roster = RosterGenerator.Generate(catalog, map, schoolSeed: 1, "Russia", TuesdayMorning);
|
||||
roster = LockerAssigner.Apply(catalog, map, roster);
|
||||
roster = DressGenerator.EnsureRoster(catalog, roster, schoolSeed: 1, TuesdayMorning);
|
||||
var pool = ApplicantPool.Create(catalog, roster, schoolSeed: 1, "Russia", TuesdayMorning);
|
||||
var pupil = roster.People.First(person => person.IsStudent && person.LockerRoomId is not null);
|
||||
var schoolClass = roster.Classes.First(row => row.PupilIds.Contains(pupil.Id));
|
||||
var school = School.Create(1, "Погода одежда", TuesdayMorning, catalog, map);
|
||||
school.InstallPeople(roster, seed: 1, "Russia", pool, climatePresetId: "TemperateContinental");
|
||||
school.SetTimetable(new Timetable(
|
||||
[
|
||||
new LessonPlacement(schoolClass.Id, "Mathematics", "t1", schoolClass.RoomId, Day: 1, Period: 1),
|
||||
new LessonPlacement(schoolClass.Id, "Mathematics", "t1", schoolClass.RoomId, Day: 1, Period: 2),
|
||||
new LessonPlacement(schoolClass.Id, "Mathematics", "t1", schoolClass.RoomId, Day: 1, Period: 3),
|
||||
new LessonPlacement(schoolClass.Id, "Mathematics", "t1", schoolClass.RoomId, Day: 1, Period: 4),
|
||||
],
|
||||
[]));
|
||||
school.ConfigurePresence(weekDays: 5, maxDecisionsPerTick: 10_000);
|
||||
return (school, pupil.Id);
|
||||
}
|
||||
|
||||
private static (School School, string PupilId) StaffedPeClass(bool forceBoy = false)
|
||||
{
|
||||
var (catalog, map) = Vanilla();
|
||||
|
||||
Reference in New Issue
Block a user