Lock slice-2 filters and the staff-parent intake path later slices left untested.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
Leonid Pershin
2026-08-20 14:53:56 +03:00
co-authored by Cursor
parent d0a8d4a075
commit c2e01f09d3
2 changed files with 110 additions and 1 deletions
@@ -65,10 +65,82 @@ public class RosterBrowserTests
Assert.All(page.People, person => Assert.True(person.IsParent));
}
[Fact]
public void FilterBySex_KeepsOnlyThatSex()
{
var roster = Fixtures.Generate(Fixtures.Classrooms(4));
var page = RosterBrowser.Apply(
roster,
Fixtures.AsOf,
Query(female: true, pageSize: RosterBrowser.MaxPageSize));
Assert.NotEmpty(page.People);
Assert.True(page.Total < roster.People.Count);
Assert.All(page.People, person => Assert.True(person.Female));
}
[Fact]
public void FilterByLetter_KeepsOnlyThatClassLetter()
{
var roster = Fixtures.Generate(Fixtures.Classrooms(4));
var letter = roster.Classes[0].Letter;
var page = RosterBrowser.Apply(
roster,
Fixtures.AsOf,
Query(letter: letter, pageSize: RosterBrowser.MaxPageSize));
var classes = roster.Classes.ToDictionary(schoolClass => schoolClass.Id, StringComparer.Ordinal);
Assert.NotEmpty(page.People);
Assert.All(page.People, person =>
Assert.Equal(letter, person.ClassId is { } classId ? classes[classId].Letter : null));
}
[Fact]
public void FilterByAgeRange_KeepsAgesInside()
{
var roster = Fixtures.Generate(Fixtures.Classrooms(4));
var pupil = roster.People.First(person => person.IsStudent);
var age = pupil.AgeOn(Fixtures.AsOf);
var page = RosterBrowser.Apply(
roster,
Fixtures.AsOf,
Query(ageMin: age, ageMax: age, pageSize: RosterBrowser.MaxPageSize));
Assert.Contains(page.People, person => person.Id == pupil.Id);
Assert.All(page.People, person => Assert.Equal(age, person.AgeOn(Fixtures.AsOf)));
}
[Fact]
public void FilterByPosition_KeepsThatJob()
{
var roster = Fixtures.Generate(Fixtures.Classrooms(4));
var parent = roster.People.First(person => person.IsParent);
roster = roster with
{
People = roster.People
.Select(person => person.Id.Equals(parent.Id, StringComparison.Ordinal)
? person with { IsStaff = true, Position = "Librarian" }
: person)
.ToArray(),
};
var page = RosterBrowser.Apply(
roster,
Fixtures.AsOf,
Query(position: "Librarian", pageSize: RosterBrowser.MaxPageSize));
Assert.Equal(parent.Id, Assert.Single(page.People).Id);
}
private static RosterQuery Query(
string? role = null,
int? year = null,
string? letter = null,
string? position = null,
bool? female = null,
int? ageMin = null,
int? ageMax = null,
int page = 1,
int pageSize = RosterBrowser.DefaultPageSize) =>
new(role, year, Letter: null, Position: null, Female: null, AgeMin: null, AgeMax: null, PersonSort.Surname, Descending: false, page, pageSize);
new(role, year, letter, position, female, ageMin, ageMax, PersonSort.Surname, Descending: false, page, pageSize);
}