Files
h-school/tests/HSchool.People.Tests/RosterBrowserTests.cs
T

68 lines
2.4 KiB
C#

namespace HSchool.People.Tests;
public class RosterBrowserTests
{
[Fact]
public void FilterByRoleAndYear_KeepsOnlyThosePupils()
{
var roster = Fixtures.Generate(Fixtures.Classrooms(4));
var page = RosterBrowser.Apply(
roster,
Fixtures.AsOf,
Query(role: PersonRoles.Student, year: 1, pageSize: RosterBrowser.MaxPageSize));
Assert.NotEmpty(page.People);
Assert.Equal(page.People.Count, page.Total);
Assert.All(page.People, person =>
{
Assert.True(person.IsStudent);
var schoolClass = roster.Classes.Single(candidate => candidate.Id == person.ClassId);
Assert.Equal(1, schoolClass.Year);
});
}
[Fact]
public void SortBySurname_IsAscendingOrdinal()
{
var roster = Fixtures.Generate(Fixtures.Classrooms(4));
var page = RosterBrowser.Apply(roster, Fixtures.AsOf, Query(pageSize: 20));
var surnames = page.People.Select(person => person.Name.Surname).ToArray();
var expected = surnames.OrderBy(name => name, StringComparer.Ordinal).ToArray();
Assert.Equal(expected, surnames);
}
[Fact]
public void PagePastTheEnd_IsEmptyButKeepsTheTotal()
{
var roster = Fixtures.Generate(Fixtures.Classrooms(2));
var first = RosterBrowser.Apply(roster, Fixtures.AsOf, Query(page: 1, pageSize: 10));
var past = RosterBrowser.Apply(roster, Fixtures.AsOf, Query(page: 999, pageSize: 10));
Assert.True(first.Total > 10);
Assert.Equal(10, first.People.Count);
Assert.Equal(first.Total, past.Total);
Assert.Empty(past.People);
}
[Fact]
public void ParentFilter_IncludesStaffWhoAreAlsoParents()
{
var roster = Fixtures.Generate(Fixtures.Classrooms(4));
var page = RosterBrowser.Apply(
roster,
Fixtures.AsOf,
Query(role: PersonRoles.Parent, pageSize: RosterBrowser.MaxPageSize));
Assert.Contains(page.People, person => person.IsStaff && person.IsParent);
Assert.All(page.People, person => Assert.True(person.IsParent));
}
private static RosterQuery Query(
string? role = null,
int? year = 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);
}