Add tests for event occurrence parsing results for 2024 and 2025 competitions

This commit introduces new unit tests in EventOccurrenceParser_Tests to analyze and validate the parsing results for the 2025 Nationals, 2025 State, and 2024 State competitions. Each test verifies that the parser returns valid results without exceptions and provides detailed output on the total lines, occurrences parsed, and issues found. Additionally, a new method in TestEntityHandler has been added to retrieve the 2024 State competition event times file, supporting the new tests.
This commit is contained in:
2026-01-07 08:37:00 -05:00
parent 2d3b29176f
commit c937192496
2 changed files with 138 additions and 0 deletions
@@ -1,4 +1,5 @@
using Core.Entities;
using Core.Models;
using Core.Parsers;
namespace Tests.Parsers;
@@ -134,4 +135,136 @@ public class EventOccurrenceParser_Tests
Assert.Pass();
}
[Test]
public void Analyze_2025Nationals_ParsingResults()
{
// Arrange
var events = TestEntityHandler.GetEvents();
var fileInfo = TestEntityHandler.GetEventOccurrenceNationalsFileInfo();
var locationConfig = LocationParsingConfiguration.Default;
var parser = new EventOccurrenceParser(fileInfo, events, locationConfig);
// Act
var result = parser.Parse();
// Assert - Should parse without exceptions
Assert.That(result, Is.Not.Null, "Parser should return a result");
// Analyze and report results
var totalLines = File.ReadAllLines(fileInfo.FullName).Length;
var issuesByType = result.Issues.GroupBy(i => i.IssueType).ToDictionary(g => g.Key, g => g.Count());
var totalParsed = result.Occurrences.Values.Sum(list => list.Count);
Console.WriteLine($"\n=== 2025 TSA Nationals Competition Event Times Analysis ===");
Console.WriteLine($"Total lines in file: {totalLines}");
Console.WriteLine($"Total occurrences parsed: {totalParsed}");
Console.WriteLine($"Total issues found: {result.Issues.Count}");
Console.WriteLine($"Issues by type:");
foreach (var kvp in issuesByType.OrderByDescending(x => x.Value))
{
Console.WriteLine($" {kvp.Key}: {kvp.Value}");
}
Console.WriteLine($"Events with occurrences: {result.Occurrences.Count}");
Console.WriteLine($"Special events found:");
if (result.Occurrences.ContainsKey(EventDefinition.GeneralSchedule))
Console.WriteLine($" GeneralSchedule: {result.Occurrences[EventDefinition.GeneralSchedule].Count} occurrences");
if (result.Occurrences.ContainsKey(EventDefinition.MeetTheCandidates))
Console.WriteLine($" MeetTheCandidates: {result.Occurrences[EventDefinition.MeetTheCandidates].Count} occurrences");
if (result.Occurrences.ContainsKey(EventDefinition.ChapterOfficerMeeting))
Console.WriteLine($" ChapterOfficerMeeting: {result.Occurrences[EventDefinition.ChapterOfficerMeeting].Count} occurrences");
if (result.Occurrences.ContainsKey(EventDefinition.VotingDelegateMeeting))
Console.WriteLine($" VotingDelegateMeeting: {result.Occurrences[EventDefinition.VotingDelegateMeeting].Count} occurrences");
// Test passes if no exceptions were thrown
Assert.Pass($"Successfully parsed {totalParsed} occurrences with {result.Issues.Count} issues");
}
[Test]
public void Analyze_2025State_ParsingResults()
{
// Arrange
var events = TestEntityHandler.GetEvents();
var fileInfo = TestEntityHandler.GetEventOccurrenceStateFileInfo();
var locationConfig = LocationParsingConfiguration.Default;
var parser = new EventOccurrenceParser(fileInfo, events, locationConfig);
// Act
var result = parser.Parse();
// Assert - Should parse without exceptions
Assert.That(result, Is.Not.Null, "Parser should return a result");
// Analyze and report results
var totalLines = File.ReadAllLines(fileInfo.FullName).Length;
var issuesByType = result.Issues.GroupBy(i => i.IssueType).ToDictionary(g => g.Key, g => g.Count());
var totalParsed = result.Occurrences.Values.Sum(list => list.Count);
Console.WriteLine($"\n=== 2025 TN TSA State Competition Event Times Analysis ===");
Console.WriteLine($"Total lines in file: {totalLines}");
Console.WriteLine($"Total occurrences parsed: {totalParsed}");
Console.WriteLine($"Total issues found: {result.Issues.Count}");
Console.WriteLine($"Issues by type:");
foreach (var kvp in issuesByType.OrderByDescending(x => x.Value))
{
Console.WriteLine($" {kvp.Key}: {kvp.Value}");
}
Console.WriteLine($"Events with occurrences: {result.Occurrences.Count}");
Console.WriteLine($"Special events found:");
if (result.Occurrences.ContainsKey(EventDefinition.GeneralSchedule))
Console.WriteLine($" GeneralSchedule: {result.Occurrences[EventDefinition.GeneralSchedule].Count} occurrences");
if (result.Occurrences.ContainsKey(EventDefinition.MeetTheCandidates))
Console.WriteLine($" MeetTheCandidates: {result.Occurrences[EventDefinition.MeetTheCandidates].Count} occurrences");
if (result.Occurrences.ContainsKey(EventDefinition.ChapterOfficerMeeting))
Console.WriteLine($" ChapterOfficerMeeting: {result.Occurrences[EventDefinition.ChapterOfficerMeeting].Count} occurrences");
if (result.Occurrences.ContainsKey(EventDefinition.VotingDelegateMeeting))
Console.WriteLine($" VotingDelegateMeeting: {result.Occurrences[EventDefinition.VotingDelegateMeeting].Count} occurrences");
// Test passes if no exceptions were thrown
Assert.Pass($"Successfully parsed {totalParsed} occurrences with {result.Issues.Count} issues");
}
[Test]
public void Analyze_2024State_ParsingResults()
{
// Arrange
var events = TestEntityHandler.GetEvents();
var fileInfo = TestEntityHandler.GetEventOccurrenceState2024FileInfo();
var locationConfig = LocationParsingConfiguration.Default;
var parser = new EventOccurrenceParser(fileInfo, events, locationConfig);
// Act
var result = parser.Parse();
// Assert - Should parse without exceptions
Assert.That(result, Is.Not.Null, "Parser should return a result");
// Analyze and report results
var totalLines = File.ReadAllLines(fileInfo.FullName).Length;
var issuesByType = result.Issues.GroupBy(i => i.IssueType).ToDictionary(g => g.Key, g => g.Count());
var totalParsed = result.Occurrences.Values.Sum(list => list.Count);
Console.WriteLine($"\n=== 2024 TN TSA State Competition Event Times Analysis ===");
Console.WriteLine($"Total lines in file: {totalLines}");
Console.WriteLine($"Total occurrences parsed: {totalParsed}");
Console.WriteLine($"Total issues found: {result.Issues.Count}");
Console.WriteLine($"Issues by type:");
foreach (var kvp in issuesByType.OrderByDescending(x => x.Value))
{
Console.WriteLine($" {kvp.Key}: {kvp.Value}");
}
Console.WriteLine($"Events with occurrences: {result.Occurrences.Count}");
Console.WriteLine($"Special events found:");
if (result.Occurrences.ContainsKey(EventDefinition.GeneralSchedule))
Console.WriteLine($" GeneralSchedule: {result.Occurrences[EventDefinition.GeneralSchedule].Count} occurrences");
if (result.Occurrences.ContainsKey(EventDefinition.MeetTheCandidates))
Console.WriteLine($" MeetTheCandidates: {result.Occurrences[EventDefinition.MeetTheCandidates].Count} occurrences");
if (result.Occurrences.ContainsKey(EventDefinition.ChapterOfficerMeeting))
Console.WriteLine($" ChapterOfficerMeeting: {result.Occurrences[EventDefinition.ChapterOfficerMeeting].Count} occurrences");
if (result.Occurrences.ContainsKey(EventDefinition.VotingDelegateMeeting))
Console.WriteLine($" VotingDelegateMeeting: {result.Occurrences[EventDefinition.VotingDelegateMeeting].Count} occurrences");
// Test passes if no exceptions were thrown
Assert.Pass($"Successfully parsed {totalParsed} occurrences with {result.Issues.Count} issues");
}
}
+5
View File
@@ -27,6 +27,11 @@ public static class TestEntityHandler
return FileUtility.GetContentFile(ContentDirectory, "2025 TN TSA State Competition Event Times.txt");
}
public static FileInfo GetEventOccurrenceState2024FileInfo()
{
return FileUtility.GetContentFile(ContentDirectory, "2024 TN TSA State Competition Event Times.txt");
}
public static Student[] GetStudents(IList<EventDefinition> events)
{
//var studentEventRankingsCsv = "Student Event Rankings.csv";