Pause the school on warning notices until the owner dismisses them.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
Leonid Pershin
2026-08-20 22:33:38 +03:00
co-authored by Cursor
parent e22d9bae33
commit f36af269bb
27 changed files with 993 additions and 51 deletions
@@ -44,6 +44,62 @@ public class SchoolStoreTests
}
}
[Fact]
public void Save_RoundTripsStickyNotices_AndOmitsThemWhenMissing()
{
var directory = Directory.CreateTempSubdirectory("h-school-store-");
try
{
var store = CreateStore(directory.FullName);
store.Save(new SchoolSave
{
Format = 3,
Id = 2,
Name = "Sticky",
GameTime = new DateTime(2012, 3, 31, 6, 0, 0, DateTimeKind.Utc),
Running = false,
SpeedIndex = 1,
Notices =
[
new StickyNoticeSave
{
Id = 9,
DefName = "GenerationFailed",
Severity = 2,
Pause = true,
TtlMs = 0,
},
],
});
var withNotices = Assert.Single(store.LoadAll());
var sticky = Assert.Single(withNotices.Notices!);
Assert.Equal(9u, sticky.Id);
Assert.Equal("GenerationFailed", sticky.DefName);
Assert.True(sticky.Pause);
File.WriteAllText(
Path.Combine(directory.FullName, "3.json"),
"""
{
"format": 3,
"id": 3,
"name": "Plain",
"gameTime": "2012-03-31T06:00:00Z",
"running": false,
"speedIndex": 0
}
""");
var plain = store.LoadAll().Single(save => save.Id == 3);
Assert.True(plain.Notices is null || plain.Notices.Count == 0);
}
finally
{
directory.Delete(recursive: true);
}
}
private static SchoolStore CreateStore(string directory)
{
var options = Options.Create(new SimulationOptions { SavesDirectory = directory });