public void Test_ParsePersonalGameDataHtmlPageAsync_Error_Zero_Matches()
        {
            var parser = new CompetitiveMatchParser(new Mock <ILogger>().Object);

            using (var stream = new FileStream("./TestData/0matches.htm", FileMode.Open, FileAccess.Read))
            {
                Func <Task <List <CompetitiveMatch> > > action = async() => await parser.ParsePersonalGameDataHtmlPageAsync(stream);

                using (new AssertionScope())
                {
                    action.Should().Throw <InvalidOperationException>().WithMessage("No competitve match table rows found.");
                }
            }
        }
        public void Test_ParsePersonalGameDataHtmlPageAsync_Error_Invalid_Match()
        {
            var parser = new CompetitiveMatchParser(new Mock <ILogger>().Object);

            using (var stream = new FileStream("./TestData/1matchInvalid.htm", FileMode.Open, FileAccess.Read))
            {
                Func <Task <List <CompetitiveMatch> > > action = async() => await parser.ParsePersonalGameDataHtmlPageAsync(stream);

                using (new AssertionScope())
                {
                    action.Should().Throw <InvalidOperationException>().WithMessage("Parsing a TimeSpan out of '' is not possible.");
                }
            }
        }
        public async Task Test_ParsePersonalGameDataHtmlPageAsync_Success_Eight_Matches()
        {
            var parser = new CompetitiveMatchParser(new Mock <ILogger>().Object);

            using (var stream = new FileStream("./TestData/8matches.htm", FileMode.Open, FileAccess.Read))
            {
                var matches = await parser.ParsePersonalGameDataHtmlPageAsync(stream);

                using (new AssertionScope())
                {
                    matches.Count.Should().Be(8);
                }
            }
        }