public void CanCalculateTop3AllTimeAsync()
        {
            // Arrange
            var expectedResults = new[] {
                new { AlpacaName = "Pablo", Date = new DateTime(2014, 7, 11), Yield = 2488 },
                new { AlpacaName = "Juanita", Date = new DateTime(2009, 7, 19), Yield = 2487 },
                new { AlpacaName = "Gertrude", Date = new DateTime(2014, 7, 13), Yield = 2486 },
            };
            const int expectedDbOperations = 1;
            var       statsService         = new ShearingStatsService(TestContext.DbContextFactory);

            // Act
            TestContext.StartCollect();
            // ----------------------------------------------------------------------------------------
            ShearingStatsService.TopShearingResult[] actualResults = statsService.GetTop3AllTimeAsync()
                                                                     .GetAwaiter().GetResult();
            // ----------------------------------------------------------------------------------------
            var log = TestContext.EndCollect();

            TestContext.Attach(log);

            // Assert
            Assert.Equal(3, actualResults.Length);
            for (int i = 0; i < expectedResults.Length; i++)
            {
                Assert.Equal(expectedResults[i].AlpacaName, actualResults[i].AlpacaName);
                Assert.Equal(expectedResults[i].Date, actualResults[i].Date);
                Assert.Equal(expectedResults[i].Yield, actualResults[i].Yield);
            }
            Assert.Equal(expectedDbOperations, GetLogEntryCount(log, LogCategories.EfDbCommand));
        }
        public void CanInitializeService()
        {
            // Arrange
            ShearingStatsService service;

            // Act
            // --------------------------------------------------------------
            service = new ShearingStatsService(TestContext.DbContextFactory);
            // --------------------------------------------------------------

            // Assert
            Assert.NotNull(service);
        }
        [InlineData(2001, new string[] { })] // edge case - no shearings for that year
        public void CanCalculateTop3ForYear(int year, string[] expected)
        {
            // Arrange
            ShearingStatsService sut = new ShearingStatsService(TestContext.DbContextFactory);
            const int            expectedDbOperations = 1;

            // Act
            TestContext.StartCollect();
            // -------------------------------------------------------------------------------
            ShearingStatsService.TopShearingResult[] actualResults = sut.GetTop3ForYear(year);
            // -------------------------------------------------------------------------------
            var log = TestContext.EndCollect();

            TestContext.Attach(log);

            // Assert
            Assert.Equal(expected, actualResults.Select(a => a.AlpacaName).ToArray());
            Assert.Equal(expectedDbOperations, GetLogEntryCount(log, LogCategories.EfDbCommand));
        }