using Core.Entities; namespace Tests.Builders; /// /// Fluent builder for creating EventDefinition test entities. /// public class EventDefinitionBuilder { private static int _idCounter = 1; private int _id = _idCounter++; private string _name = "Test Event"; private string _shortName = "Test"; private EventFormat _format = EventFormat.Individual; private int _minTeamSize = 1; private int _maxTeamSize = 1; private string? _semifinalistActivity = null; private bool _onSiteActivity = false; private int _regionalCount = 0; private int _stateCount = 2; private bool _presubmission = false; private string _eligibility = "All students"; private string? _theme = null; private string? _description = null; private int? _levelOfEffort = null; private string? _documentation = null; private string? _notes = null; public EventDefinitionBuilder WithName(string name) { _name = name; if (_shortName == "Test") _shortName = name; // Auto-sync short name return this; } public EventDefinitionBuilder WithShortName(string shortName) { _shortName = shortName; return this; } public EventDefinitionBuilder AsTeamEvent(int minSize, int maxSize) { _format = EventFormat.Team; _minTeamSize = minSize; _maxTeamSize = maxSize; return this; } public EventDefinitionBuilder AsIndividualEvent() { _format = EventFormat.Individual; _minTeamSize = 1; _maxTeamSize = 1; return this; } public EventDefinitionBuilder WithInterview() { _semifinalistActivity = "Interview"; return this; } public EventDefinitionBuilder WithPresentation() { _semifinalistActivity = "Presentation"; return this; } public EventDefinitionBuilder WithSemifinalistActivity(string activity) { _semifinalistActivity = activity; return this; } public EventDefinitionBuilder AsOnSite() { _onSiteActivity = true; return this; } public EventDefinitionBuilder AsRegionalEvent(int count = 3) { _regionalCount = count; return this; } public EventDefinitionBuilder WithStateCount(int count) { _stateCount = count; return this; } public EventDefinitionBuilder WithPresubmission() { _presubmission = true; return this; } public EventDefinitionBuilder WithEligibility(string eligibility) { _eligibility = eligibility; return this; } public EventDefinitionBuilder WithTheme(string theme) { _theme = theme; return this; } public EventDefinitionBuilder WithDescription(string description) { _description = description; return this; } public EventDefinitionBuilder WithLevelOfEffort(int level) { _levelOfEffort = level; return this; } public EventDefinitionBuilder WithDocumentation(string documentation) { _documentation = documentation; return this; } public EventDefinitionBuilder WithNotes(string notes) { _notes = notes; return this; } public EventDefinition Build() { return new EventDefinition { Id = _id, Name = _name, ShortName = _shortName, EventFormat = _format, MinTeamSize = _minTeamSize, MaxTeamSize = _maxTeamSize, SemifinalistActivity = _semifinalistActivity, OnSiteActivity = _onSiteActivity, ChapterEligibilityCountRegionals = _regionalCount, ChapterEligibilityCountState = _stateCount, Presubmission = _presubmission, Eligibility = _eligibility, Theme = _theme, Description = _description, LevelOfEffort = _levelOfEffort, Documentation = _documentation, Notes = _notes }; } // Static factory methods public static EventDefinitionBuilder Default() => new EventDefinitionBuilder(); public static EventDefinitionBuilder Individual(string name) => new EventDefinitionBuilder() .WithName(name) .AsIndividualEvent(); public static EventDefinitionBuilder Team(string name, int minSize, int maxSize) => new EventDefinitionBuilder() .WithName(name) .AsTeamEvent(minSize, maxSize); /// /// Reset the ID counter for test isolation. Call this in test SetUp. /// public static void ResetIdCounter() => _idCounter = 1; }