using FluentAssertions; using Marathon.Domain.Enums; using Marathon.Infrastructure.Scraping.Parsers; namespace Marathon.Infrastructure.Tests.Scraping; public sealed class OutcomeCodeMapperTests { [Theory] [InlineData("1", Side.Side1)] [InlineData("draw", Side.Draw)] [InlineData("3", Side.Side2)] public void TryMap_MatchResultVocabulary_ReturnsExpectedSide(string code, Side expected) { OutcomeCodeMapper.TryMap(code).Should().Be(expected); } [Theory] [InlineData("RN_H", Side.Side1)] [InlineData("RN_D", Side.Draw)] [InlineData("RN_A", Side.Side2)] public void TryMap_PeriodResultVocabulary_ReturnsExpectedSide(string code, Side expected) { OutcomeCodeMapper.TryMap(code).Should().Be(expected); } [Theory] [InlineData("HB_H", Side.Side1)] [InlineData("HB_A", Side.Side2)] public void TryMap_HandicapVocabulary_ReturnsExpectedSide(string code, Side expected) { OutcomeCodeMapper.TryMap(code).Should().Be(expected); } [Theory] [InlineData("Under_213.5", Side.Less)] [InlineData("Under_3.5", Side.Less)] [InlineData("Over_213.5", Side.More)] [InlineData("Over_3.5", Side.More)] public void TryMap_TotalVocabulary_ReturnsExpectedSide(string code, Side expected) { OutcomeCodeMapper.TryMap(code).Should().Be(expected); } [Theory] [InlineData("")] [InlineData(" ")] [InlineData("unknown_code")] [InlineData("HD")] [InlineData("yes")] public void TryMap_UnknownOrEmptyCodes_ReturnsNull(string code) { OutcomeCodeMapper.TryMap(code).Should().BeNull(); } [Theory] [InlineData("Under_213.5", 213.5)] [InlineData("Under_3.5", 3.5)] [InlineData("Over_213.5", 213.5)] [InlineData("Over_3.5", 3.5)] [InlineData("Over_1", 1.0)] public void TryParseTotalThreshold_ValidCodes_ReturnsThreshold(string code, decimal expected) { OutcomeCodeMapper.TryParseTotalThreshold(code).Should().Be(expected); } [Theory] [InlineData("1")] [InlineData("RN_H")] [InlineData("HB_H")] [InlineData("")] public void TryParseTotalThreshold_NonTotalCodes_ReturnsNull(string code) { OutcomeCodeMapper.TryParseTotalThreshold(code).Should().BeNull(); } }