using SportsDivision.Domain.Entities; using SportsDivision.Domain.Enums; namespace SportsDivision.Domain.Tests; public class StudentTests { [Fact] public void GetAge_BirthdayNotYetPassed_ReturnsCorrectAge() { var student = new Student { DateOfBirth = new DateOnly(2010, 6, 15) }; var referenceDate = new DateOnly(2024, 3, 1); Assert.Equal(13, student.GetAge(referenceDate)); } [Fact] public void GetAge_BirthdayAlreadyPassed_ReturnsCorrectAge() { var student = new Student { DateOfBirth = new DateOnly(2010, 3, 15) }; var referenceDate = new DateOnly(2024, 6, 1); Assert.Equal(14, student.GetAge(referenceDate)); } [Fact] public void GetAge_OnBirthday_ReturnsCorrectAge() { var student = new Student { DateOfBirth = new DateOnly(2010, 6, 15) }; var referenceDate = new DateOnly(2024, 6, 15); Assert.Equal(14, student.GetAge(referenceDate)); } [Fact] public void GetAge_DayBeforeBirthday_ReturnsOneLess() { var student = new Student { DateOfBirth = new DateOnly(2010, 6, 15) }; var referenceDate = new DateOnly(2024, 6, 14); Assert.Equal(13, student.GetAge(referenceDate)); } [Fact] public void GetAge_LeapYearBirthday_Feb29_ReferenceNonLeapYear() { var student = new Student { DateOfBirth = new DateOnly(2012, 2, 29) // leap year }; // March 1, 2025 - non-leap year, birthday hasn't technically passed var referenceDate = new DateOnly(2025, 3, 1); Assert.Equal(13, student.GetAge(referenceDate)); } [Fact] public void GetAge_SameDayAsReference_ReturnsZero() { var student = new Student { DateOfBirth = new DateOnly(2024, 1, 1) }; var referenceDate = new DateOnly(2024, 1, 1); Assert.Equal(0, student.GetAge(referenceDate)); } [Fact] public void FullName_CombinesFirstAndLastName() { var student = new Student { FirstName = "John", LastName = "Doe" }; Assert.Equal("John Doe", student.FullName); } [Fact] public void FullName_DefaultValues_ReturnsSpace() { var student = new Student(); Assert.Equal(" ", student.FullName); } }