public async void ReturnBadRequestIfCertUrlNotFormattedCorrectly(string invalidUrl)
        {
            // Arrange
            var fakeRequest = new Fake <HttpRequest>();
            var fakeLogger  = new Fake <ILogger <AlexaRequestValidation> >();
            var fakeContext = new Fake <HttpContext>();

            var headers = new HeaderDictionary
            {
                { "Signature", "YLGXuQcL6KjIk/H2G86zuDyvvkIX/iFQGOm4WmwHB8mzFn10CQ/DPOmkpRfX3RwrFqVrO7j//RMics5D903hERwiOIux+OpnPA/T3EITQPZrTQTYoCEodDa5cjSCFkoRyqVfCT8jGxER3L6JvOVFMzJ/kpslsy1Vd9keE4CEpC21lUCOQIHgKBtAd/coWjN8WM8Yz8W1ACbqIzZ4vA1V4Kvnz+bmLDH6qsMDYcotcJek8Bsb3PQ4YxtqGNK04R/pGWIcoKNFHMqe+rYqPPz8/7kkuX8aCe0xcxsG0eGcLpvK4zlTO4tSavOsCsKONEJj0mvlPMo7ZK4N074WVWurAQ==" },
                { "SignatureCertChainUrl", invalidUrl }
            };

            A.CallTo(() => fakeRequest.FakedObject.Scheme).Returns("https");
            A.CallTo(() => fakeRequest.FakedObject.Headers).Returns(headers);

            A.CallTo(() => fakeContext.FakedObject.Request).Returns(fakeRequest.FakedObject);

            var sit = new AlexaRequestValidation(next: (innerHttpContext) => Task.FromResult(0),
                                                 logger: fakeLogger.FakedObject);

            // Action
            await sit.Invoke(fakeContext.FakedObject);

            // Assert
            Assert.True(fakeContext.FakedObject.Response.StatusCode == 400); // Bad Request
            A.CallTo(fakeLogger.FakedObject)
            .Where(c => c.Method.Name.Equals("Log") && ((string)c.GetArgument <FormattedLogValues>(2).First().Value == AlexaRequestValidation.MustUseHttps ||
                                                        (string)c.GetArgument <FormattedLogValues>(2).First().Value == AlexaRequestValidation.InvalidCertificatePath ||
                                                        (string)c.GetArgument <FormattedLogValues>(2).First().Value == AlexaRequestValidation.InvalidHostName))
            .MustHaveHappened();
        }
        public async void ReturnBadRequestIfHeadersNotPresent()
        {
            // Arrange
            var fakeRequest = new Fake <HttpRequest>();
            var fakeLogger  = new Fake <ILogger <AlexaRequestValidation> >();
            var fakeContext = new Fake <HttpContext>();

            var headers = new HeaderDictionary
            {
                { "Signature", "Sig" },
            };

            A.CallTo(() => fakeRequest.FakedObject.Scheme).Returns("https");
            A.CallTo(() => fakeRequest.FakedObject.Headers).Returns(headers);

            A.CallTo(() => fakeContext.FakedObject.Request).Returns(fakeRequest.FakedObject);

            var sit = new AlexaRequestValidation(next: (innerHttpContext) => Task.FromResult(0),
                                                 logger: fakeLogger.FakedObject);

            // Action
            await sit.Invoke(fakeContext.FakedObject);

            // Assert
            Assert.True(fakeContext.FakedObject.Response.StatusCode == 400); // Bad Request
            A.CallTo(fakeLogger.FakedObject)
            .Where(c => c.Method.Name.Equals("Log") && (string)c.GetArgument <FormattedLogValues>(2).First().Value == AlexaRequestValidation.SignatureHeadersMissing)
            .MustHaveHappened();
        }