50 lines
1.7 KiB
C#
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);
|
|
}
|
|
}
|