public async Task RunBenchMarksAsync_Should_Return_Results_For_BenchMarkType_when_Cold_And_Warm_Calls_Are_Asked()
        {
            //  Arrange

            var benchMarks = new List <BenchMarkType>()
            {
                // no properties are needer
                new BenchMarkType()
            };
            var coldCalls = 1;
            var warmCalls = 1;

            var benchMarkResponse = new BenchMarkResponse(true, 1);

            _mockIBenchMarkService.Setup(service => service.RunBenchMarkAsync(It.IsAny <string>())).ReturnsAsync(benchMarkResponse);

            var testService = new BenchMarkTypeService(_mockIBenchMarkService.Object, null);



            //  Act

            var benchMarkResults = await testService.RunBenchMarksAsync(benchMarks, coldCalls, warmCalls, 0);



            //  Assert

            Assert.NotNull(benchMarkResults);
            Assert.Equal(2, benchMarkResults.Count);
            // colds are always run before the warm calls
            Assert.True(benchMarkResults[0].IsColdRequest);
            // warms come after the cold calls
            Assert.False(benchMarkResults[1].IsColdRequest);
        }
        public async Task RunBenchMarksAsync_Should_Return_Results_For_BenchMarkType_when_Warm_Calls_Are_Asked()
        {
            //  Arrange

            var benchMarks = new List <BenchMarkType>()
            {
                // no properties are needer
                new BenchMarkType()
            };
            var coldCalls = 0;
            var warmCalls = 1;

            var benchMarkResponse = new BenchMarkResponse(true, 1);

            _mockIBenchMarkService.Setup(service => service.RunBenchMarkAsync(It.IsAny <string>())).ReturnsAsync(benchMarkResponse);

            var testService = new BenchMarkTypeService(_mockIBenchMarkService.Object, null);



            //  Act

            var benchMarkResults = await testService.RunBenchMarksAsync(benchMarks, coldCalls, warmCalls, 0);



            //  Assert

            Assert.NotNull(benchMarkResults);
            Assert.Single(benchMarkResults);
            Assert.False(benchMarkResults[0].IsColdRequest);
        }
        public async Task RunBenchMarksAsync_Should_Return_Results_For_Multiple_BenchMarkTypes_When_Cold_And_Warm_Calls_Are_Asked()
        {
            //  Arrange

            var benchMarks = new List <BenchMarkType>()
            {
                new BenchMarkType()
                {
                    CloudProvider = CloudProvider.Azure,
                },
                new BenchMarkType()
                {
                    CloudProvider = CloudProvider.Firebase,
                }
            };
            var coldCalls = 1;
            var warmCalls = 1;

            var benchMarkResponse = new BenchMarkResponse(true, 1);

            _mockIBenchMarkService.Setup(service => service.RunBenchMarkAsync(It.IsAny <string>())).ReturnsAsync(benchMarkResponse);

            var testService = new BenchMarkTypeService(_mockIBenchMarkService.Object, null);



            //  Act

            var benchMarkResults = await testService.RunBenchMarksAsync(benchMarks, coldCalls, warmCalls, 0);



            //  Assert

            Assert.NotNull(benchMarkResults);
            // 2 types, ,1 cold, 1 warm = 4 total
            Assert.Equal(4, benchMarkResults.Count);

            // FOR THE AZURE TYPE
            // colds are always run before the warm calls
            Assert.True(benchMarkResults[0].IsColdRequest);
            Assert.Equal(CloudProvider.Azure, benchMarkResults[0].CloudProvider); // we need something to identify the difference so use the provider for now
            // warms come after the cold calls
            Assert.False(benchMarkResults[1].IsColdRequest);
            Assert.Equal(CloudProvider.Azure, benchMarkResults[1].CloudProvider); // we need something to identify the difference so use the provider for now

            // FOR THE FIREBASE TYPE
            // colds are always run before the warm calls
            Assert.True(benchMarkResults[2].IsColdRequest);
            Assert.Equal(CloudProvider.Firebase, benchMarkResults[2].CloudProvider); // we need something to identify the difference so use the provider for now
            // warms come after the cold calls
            Assert.False(benchMarkResults[3].IsColdRequest);
            Assert.Equal(CloudProvider.Firebase, benchMarkResults[3].CloudProvider); // we need something to identify the difference so use the provider for now
        }
        public async Task RunBenchMarksAsync_Should_Return_BenchMarkResponse_as_Properly_Converted_Results()
        {
            //  Arrange

            var benchMarks = new List <BenchMarkType>()
            {
                new BenchMarkType()
                {
                    Name             = "TestBenchMark",
                    CloudProvider    = CloudProvider.Firebase,
                    HostEnvironment  = HostEnvironment.Linux,
                    Runtime          = Runtime.Fsharp,
                    SetXFunctionsKey = true,
                },
            };
            var coldCalls = 1;
            var warmCalls = 0;

            var benchMarkResponse = new BenchMarkResponse(true, 567);

            _mockIBenchMarkService.Setup(service => service.RunBenchMarkAsync(It.IsAny <string>())).ReturnsAsync(benchMarkResponse);

            var testService = new BenchMarkTypeService(_mockIBenchMarkService.Object, null);



            //  Act

            var benchMarkResults = await testService.RunBenchMarksAsync(benchMarks, coldCalls, warmCalls, 0);



            //  Assert

            Assert.NotNull(benchMarkResults);
            var validationResult = benchMarkResults[0];

            // from the benchmarktype
            Assert.True(validationResult.IsColdRequest);
            Assert.Equal(CloudProvider.Firebase, validationResult.CloudProvider);
            Assert.Equal(HostEnvironment.Linux, validationResult.HostingEnvironment);
            Assert.Equal(Runtime.Fsharp, validationResult.Runtime);
            // from the actual benchmark
            Assert.Equal(567, validationResult.RequestDuration);
            Assert.True(validationResult.Success);

            // Set by the DB
            Assert.Equal(default(DateTimeOffset), validationResult.CreatedAt);
            Assert.Equal(0, validationResult.Id);
        }
        public async Task RunBenchMarksAsync_Should_Call_RunBenchMarkAsync_With_BenchMarkClient_String()
        {
            //  Arrange

            var benchMarks = new List <BenchMarkType>()
            {
                new BenchMarkType()
                {
                    Name             = "TestBenchMark",
                    CloudProvider    = CloudProvider.Firebase,
                    HostEnvironment  = HostEnvironment.Linux,
                    Runtime          = Runtime.Fsharp,
                    SetXFunctionsKey = true,
                },
            };
            var coldCalls = 1;
            var warmCalls = 0;

            var benchMarkResponse = new BenchMarkResponse(true, 567);

            _mockIBenchMarkService.Setup(service => service.RunBenchMarkAsync(It.IsAny <string>())).ReturnsAsync(benchMarkResponse);

            var testService = new BenchMarkTypeService(_mockIBenchMarkService.Object, null);



            //  Act

            var benchMarkResults = await testService.RunBenchMarksAsync(benchMarks, coldCalls, warmCalls, 0);



            //  Assert

            _mockIBenchMarkService.Verify(service => service.RunBenchMarkAsync(It.Is <string>(clientName => clientName == "TestBenchMarkClient")), Times.Once);
        }