using Core.Entities; namespace Tests.Builders; /// /// Fluent builder for creating Student test entities. /// public class StudentBuilder { private static int _idCounter = 1; private int _id = _idCounter++; private string _firstName = "Test"; private string _lastName = "Student"; private int _grade = 9; private string? _email = null; private string? _phoneNumber = null; private int _tsaYear = 1; private string? _stateId = null; private string? _regionalId = null; private string? _nationalId = null; private OfficerRole? _officerRole = null; private List<(EventDefinition eventDef, int rank)> _rankings = new(); public StudentBuilder WithName(string firstName, string lastName) { _firstName = firstName; _lastName = lastName; return this; } public StudentBuilder WithFirstName(string firstName) { _firstName = firstName; return this; } public StudentBuilder WithLastName(string lastName) { _lastName = lastName; return this; } public StudentBuilder WithGrade(int grade) { _grade = grade; return this; } public StudentBuilder WithEmail(string email) { _email = email; return this; } public StudentBuilder WithPhone(string phoneNumber) { _phoneNumber = phoneNumber; return this; } public StudentBuilder WithTsaYear(int year) { _tsaYear = year; return this; } public StudentBuilder WithStateId(string stateId) { _stateId = stateId; return this; } public StudentBuilder WithRegionalId(string regionalId) { _regionalId = regionalId; return this; } public StudentBuilder WithNationalId(string nationalId) { _nationalId = nationalId; return this; } public StudentBuilder AsOfficer(OfficerRole role) { _officerRole = role; return this; } public StudentBuilder AsPresident() { _officerRole = OfficerRole.President; return this; } public StudentBuilder AsVicePresident() { _officerRole = OfficerRole.VicePresident; return this; } public StudentBuilder AsSecretary() { _officerRole = OfficerRole.Secretary; return this; } public StudentBuilder AsTreasurer() { _officerRole = OfficerRole.Treasurer; return this; } public StudentBuilder WithRanking(EventDefinition eventDef, int rank) { _rankings.Add((eventDef, rank)); return this; } public Student Build() { var student = new Student { Id = _id, FirstName = _firstName, LastName = _lastName, Grade = _grade, Email = _email, PhoneNumber = _phoneNumber, TsaYear = _tsaYear, StateId = _stateId, RegionalId = _regionalId, NationalId = _nationalId, OfficerRole = _officerRole, Teams = new List() // Initialize Teams collection }; // Set up event rankings if any were specified foreach (var (eventDef, rank) in _rankings) { var ranking = new StudentEventRanking { Student = student, EventDefinition = eventDef, Rank = rank }; student.EventRankings.Add(ranking); } return student; } // Static factory methods public static StudentBuilder Default() => new StudentBuilder(); public static StudentBuilder Create(string firstName, string lastName) => new StudentBuilder() .WithName(firstName, lastName); /// /// Reset the ID counter for test isolation. Call this in test SetUp. /// public static void ResetIdCounter() => _idCounter = 1; }