namespace HSchool.Simulation.Tests; /// /// What used to be checked through SchoolRegistry. The registry is gone — the server gives /// every school its own worker — but the name and start-date rules it guarded are still the ones /// the create endpoint applies. /// public class SchoolNamesTests { [Theory] [InlineData(null)] [InlineData("")] [InlineData(" ")] [InlineData("\u0009\u000A")] public void BlankNames_AreRejected(string? name) { Assert.False(SchoolNames.TryNormalize(name, out _)); } [Fact] public void OverlongNames_AreRejected() { Assert.False(SchoolNames.TryNormalize(new string('ш', School.MaxNameLength + 1), out _)); Assert.True(SchoolNames.TryNormalize(new string('ш', School.MaxNameLength), out _)); } [Fact] public void SurroundingSpaceAndControlCharacters_AreStripped() { Assert.True(SchoolNames.TryNormalize(" Лицей ", out var normalized)); Assert.Equal("Лицей", normalized); } [Fact] public void StartDatesOutsideTheSupportedRange_AreRejected() { Assert.False(GameClock.IsValidStartDate(new DateTime(1500, 1, 1, 0, 0, 0, DateTimeKind.Utc))); Assert.False(GameClock.IsValidStartDate(new DateTime(3200, 1, 1, 0, 0, 0, DateTimeKind.Utc))); Assert.True(GameClock.IsValidStartDate(new DateTime(2012, 4, 3, 6, 0, 0, DateTimeKind.Utc))); } [Fact] public void SuggestedNames_AreUsableAndNeverRepeatATakenOne() { var generator = new SchoolNameGenerator(new Random(1234)); var taken = new List(); for (var i = 0; i < 20; i++) { var suggestion = generator.Next(taken, SchoolNameLanguage.Russian); Assert.True(SchoolNames.TryNormalize(suggestion, out _), $"\"{suggestion}\" is not a usable name."); Assert.DoesNotContain(suggestion, taken, StringComparer.OrdinalIgnoreCase); taken.Add(suggestion); } } [Fact] public void SuggestedNames_FitTheNameLimitInBothLanguages() { var generator = new SchoolNameGenerator(new Random(1234)); foreach (var language in new[] { SchoolNameLanguage.Russian, SchoolNameLanguage.English }) { for (var i = 0; i < 200; i++) { Assert.InRange(generator.Next([], language).Length, 1, School.MaxNameLength); } } } [Fact] public void SuggestedEnglishNames_AreAscii() { var generator = new SchoolNameGenerator(new Random(1234)); for (var i = 0; i < 50; i++) { Assert.Matches("^[A-Za-z0-9 .]+$", generator.Next([], SchoolNameLanguage.English)); } } }