Rank: Newbie
Groups: Registered
Joined: 5/22/2026(UTC) Posts: 4
|
Here's a stripped back version of the test and hopefully all of the code needed to replicate it. Test case 10 should return false, i have changed it to true here to highlight the issue. Test case number 10 should fail here but the result of test case 20 is all that I see. Code:
public class EvaluateTests
{
[Theory]
[ClassData(typeof(GetChosenSummerSelection))]
internal void MixedLeagueClass_ShouldBeBasedOnSummerLeagueSelectionAndNomination(
TestCase data)
{
var result = CallEvaluate(
data.MixedLeagueRank,
data.SummerSelectedDivisions,
data.SummerNominatedRank);
result.Should().Be(data.Expected);
}
private bool CallEvaluate(
DltcDivisionRank mixedDivision,
List<SummerSelectedDivision> summerSelectedDivisions,
DltcDivisionRank? nominatedSummerDivision)
{
var winterLeagueRule = new MixedLeagueSummerSelectionRule();
return winterLeagueRule.Evaluate(
mixedDivision,
summerSelectedDivisions,
nominatedSummerDivision
);
}
internal class GetChosenSummerSelection : TheoryData<TestCase>
{
public GetChosenSummerSelection()
{
Add(new TestCase(10, DR.Class1, [CreateSelected(DR.Class2, 1)], null, true));
Add(new TestCase(20, DR.Class1, [CreateSelected(DR.Class3, 1)], null, true));
}
private static SummerSelectedDivision CreateSelected(DR rank, int timesSelected)
=> new() { Rank = rank, TimesSelected = timesSelected };
}
internal record TestCase(
int TestNumber,
DR MixedLeagueRank,
List<SummerSelectedDivision> SummerSelectedDivisions,
DR? SummerNominatedRank,
bool Expected)
{
public override string ToString() => $"{TestNumber}";
}
}
Code:
internal enum DltcDivisionRank
{
Premier = 1,
Class1 = 2,
Class2 = 3,
Class3 = 4,
Class4 = 5,
Class5 = 6,
Class6 = 7,
Class7 = 8,
Class8 = 9,
Class9 = 10,
}
Code:
using DR = DltcDivisionRank;
internal class MixedLeagueSummerSelectionRule
{
public bool Evaluate(
DltcDivisionRank mixedDivision,
List<SummerSelectedDivision> selectedDivisions,
DltcDivisionRank? nominatedSummerDivision)
{
return (mixedDivision, RecognisedSummerDivision()) switch
{
var (m, s) when m == DR.Class1 && s < DR.Class3 => false,
var (m, s) when m == DR.Class2 && s < DR.Class5 => false,
var (m, s) when m == DR.Class3 && s < DR.Class6 => false,
var (m, s) when m == DR.Class4 && s < DR.Class7 => false,
_ => true,
};
DR? RecognisedSummerDivision()
{
int totalPlayed = 0;
DR? selectedDivisionRank = null;
foreach (var selectedDivision in selectedDivisions.OrderBy(sd => sd.Rank))
{
totalPlayed += selectedDivision.TimesSelected;
if (totalPlayed > 1)
{
selectedDivisionRank = selectedDivision.Rank;
break;
}
}
if (SelectedRankIsHigher())
return selectedDivisionRank;
return nominatedSummerDivision
?? selectedDivisionRank
?? selectedDivisions.FirstOrDefault()?.Rank;
bool SelectedRankIsHigher()
{
if (nominatedSummerDivision == null)
return false;
if (selectedDivisionRank == null)
return false;
return selectedDivisionRank < nominatedSummerDivision;
}
}
}
}
Code:
internal class SummerSelectedDivision
{
public DltcDivisionRank Rank { get; set; }
public int TimesSelected { get; set; }
}
|