using Jiaowu.Api.Domain.Academic; using Jiaowu.Api.Infrastructure.Academic; namespace Jiaowu.Api.Tests; public sealed class PhysicalFitnessScoringTests { [Fact] public void MaleFreshman_AtAllPerfectThresholds_ScoresOneHundred() { var result = PhysicalFitnessScoringService.Calculate( Gender.Male, 1, new PhysicalFitnessMeasurements(175, 70, 5040, 6.7m, 24.9m, 273, 19, 197)); Assert.Equal(100m, result.StandardScore); Assert.Equal(0m, result.BonusScore); Assert.Equal(100m, result.TotalScore); Assert.Equal(PhysicalTestGrade.Excellent, result.Grade); Assert.Equal(9, result.Items.Count); Assert.Equal(22.9m, result.Items.Single(x => x.ItemCode == PhysicalTestItemCode.Bmi).Value); } [Fact] public void FemaleSenior_UsesSeniorFemaleThresholdsAndBonus() { var result = PhysicalFitnessScoringService.Calculate( Gender.Female, 4, new PhysicalFitnessMeasurements(165, 55, 3450, 7.4m, 26.3m, 208, 70, 146)); Assert.Equal(100m, result.StandardScore); Assert.Equal(20m, result.BonusScore); Assert.Equal(120m, result.TotalScore); Assert.Equal(10m, result.Items.Single(x => x.ItemCode == PhysicalTestItemCode.Strength).BonusScore); Assert.Equal(10m, result.Items.Single(x => x.ItemCode == PhysicalTestItemCode.EnduranceRun).BonusScore); } [Fact] public void UnknownGender_IsRejected() { var error = Assert.Throws(() => PhysicalFitnessScoringService.Calculate( Gender.Unknown, 1, new PhysicalFitnessMeasurements(170, 60, 3000, 8, 10, 200, 10, 240))); Assert.Contains("性别", error.Message); } }