Close phase 36 apparel-changed log tail.
Add simulation and paged day-log tests; mark the log task complete in the phase doc. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -25,8 +25,8 @@
|
|||||||
- [x] История за сегодня под текущим делом: поиск, сортировка, пейджинг
|
- [x] История за сегодня под текущим делом: поиск, сортировка, пейджинг
|
||||||
- [x] `GET /api/schools/{id}/people/{personId}/log` — страница и фильтр; не сокет, не лента
|
- [x] `GET /api/schools/{id}/people/{personId}/log` — страница и фильтр; не сокет, не лента
|
||||||
школы. Граница суток — шесть утра; skip ночи обнуляет вчерашнее
|
школы. Граница суток — шесть утра; skip ночи обнуляет вчерашнее
|
||||||
- [ ] Запись в лог: начало/конец действия есть; утренняя выдача одежды — тип
|
- [x] Запись в лог: начало/конец действия есть; утренняя выдача одежды — тип
|
||||||
`apparel-replaced` подхватывается, пишет фаза 34; переодевание — после фазы 35
|
`apparel-replaced` подхватывается, пишет фаза 34; переодевание — `apparel-changed` из фазы 35
|
||||||
- [x] Vitest: переключение вкладок, пейджер лога, «дома» когда activity пустая и человек away
|
- [x] Vitest: переключение вкладок, пейджер лога, «дома» когда activity пустая и человек away
|
||||||
- [x] `docs/protocol.md` — HTTP лога в том же коммите
|
- [x] `docs/protocol.md` — HTTP лога в том же коммите
|
||||||
|
|
||||||
|
|||||||
@@ -101,6 +101,38 @@ public class AppropriatenessSimulationTests
|
|||||||
Assert.Contains(pupil.Items, item => item.Def == "TShirt" && item.Color == "Red" && item.Location == ItemLocations.Bag);
|
Assert.Contains(pupil.Items, item => item.Def == "TShirt" && item.Color == "Red" && item.Location == ItemLocations.Bag);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void RedressPerson_WritesApparelChangedRows()
|
||||||
|
{
|
||||||
|
using var school = Open(TuesdayMorning, seed: 31);
|
||||||
|
school.DressRules = school.DressRules with
|
||||||
|
{
|
||||||
|
Students = new DressRulePair(FormPolicies.Regular, ColorPolicies.NoBright),
|
||||||
|
};
|
||||||
|
var pupil = school.Roster!.People.First(person => person.IsStudent && person.LockerRoomId is null);
|
||||||
|
var items = pupil.Items.ToList();
|
||||||
|
items.Add(new InventoryItem("TShirt", "Red", 1f, ItemLocations.Worn));
|
||||||
|
ReplaceItems(pupil, items);
|
||||||
|
|
||||||
|
ApparelDresser.RedressPerson(school, pupil, ApparelMode.Everyday, includeHome: false);
|
||||||
|
|
||||||
|
Assert.Contains(
|
||||||
|
school.DayLog,
|
||||||
|
row => row.PersonId == pupil.Id
|
||||||
|
&& row.Type == PersonLogTypes.ApparelChanged
|
||||||
|
&& row.ThingDef == "TShirt");
|
||||||
|
var page = PersonLogBrowser.Apply(
|
||||||
|
school.DayLog,
|
||||||
|
pupil.Id,
|
||||||
|
new PersonLogQuery(null, Descending: true, Page: 1, PageSize: 20),
|
||||||
|
school.Catalog,
|
||||||
|
"ru");
|
||||||
|
Assert.Contains(page.Entries, entry => entry.Type == PersonLogTypes.ApparelChanged);
|
||||||
|
Assert.Contains(
|
||||||
|
page.Entries,
|
||||||
|
entry => entry.Label.StartsWith("переоделся:", StringComparison.Ordinal));
|
||||||
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void PendingStrictRule_DoesNotApplyUntilNextMorning()
|
public void PendingStrictRule_DoesNotApplyUntilNextMorning()
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -99,6 +99,25 @@ public class PersonDayLogTests
|
|||||||
Assert.Equal("UseToilet", page.Entries[0].ThingDef);
|
Assert.Equal("UseToilet", page.Entries[0].ThingDef);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void ApparelReplaced_FlowsThroughPagedLog()
|
||||||
|
{
|
||||||
|
using var school = OpenEmpty(TuesdayNoon);
|
||||||
|
var person = school.Roster!.People.First();
|
||||||
|
school.AppendDayLog(new PersonLogEvent(person.Id, TuesdayNoon, PersonLogTypes.ApparelReplaced, "Shirt"));
|
||||||
|
|
||||||
|
var page = PersonLogBrowser.Apply(
|
||||||
|
school.DayLog,
|
||||||
|
person.Id,
|
||||||
|
new PersonLogQuery(null, Descending: true, Page: 1, PageSize: 20),
|
||||||
|
school.Catalog,
|
||||||
|
"ru");
|
||||||
|
|
||||||
|
Assert.Single(page.Entries);
|
||||||
|
Assert.Equal(PersonLogTypes.ApparelReplaced, page.Entries[0].Type);
|
||||||
|
Assert.StartsWith("получил новую ", page.Entries[0].Label, StringComparison.Ordinal);
|
||||||
|
}
|
||||||
|
|
||||||
private static void TickMinutes(School school, int minutes)
|
private static void TickMinutes(School school, int minutes)
|
||||||
{
|
{
|
||||||
for (var i = 0; i < minutes; i++)
|
for (var i = 0; i < minutes; i++)
|
||||||
|
|||||||
Reference in New Issue
Block a user