Files
Academic-Affairs-System/tests/Jiaowu.Api.Tests/PhysicalFitnessScoringTests.cs
T
2026-09-29 10:24:14 +08:00

50 lines
1.7 KiB
C#

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<ArgumentException>(() => PhysicalFitnessScoringService.Calculate(
Gender.Unknown,
1,
new PhysicalFitnessMeasurements(170, 60, 3000, 8, 10, 200, 10, 240)));
Assert.Contains("性别", error.Message);
}
}