public async Task ValidCasesAsync(WebHook validWebHook)
        {
            var schema = new OpenApiSchema
            {
                Properties = new Dictionary <string, OpenApiSchema>
                {
                    ["param1"] = new OpenApiSchema {
                        Type = "integer"
                    },
                    ["param2"] = new OpenApiSchema {
                        Type = "string"
                    },
                }
            };
            var triggersById = new Dictionary <string, WebHookTrigger>
            {
                ["valid"] = new WebHookTrigger {
                    Id = "valid", Schema = schema
                },
            };

            var triggers = new Mock <IWebHookTriggerProvider>();

            triggers.Setup(s => s.GetAvailableTriggers()).Returns(triggersById);
            var logger  = new Mock <ILogger <DefaultWebHookValidator> >();
            var client  = HttpClientMocker.ReturnQueryParam("echo");
            var service = new DefaultWebHookValidator(triggers.Object, logger.Object, client);

            await service.ValidateAsync(validWebHook);

            Assert.NotEqual(default, validWebHook.Id);
Пример #2
0
        public void ArgNullEfSender()
        {
            var logger     = new Mock <ILogger <EFWebHookSender <TestContext1> > >();
            var httpClient = HttpClientMocker.Static(System.Net.HttpStatusCode.OK, "");
            var signature  = new Mock <ISignatureService>();

            Assert.Throws <ArgumentNullException>(() => new EFWebHookSender <TestContext1>(httpClient, signature.Object, logger.Object, null));
        }
Пример #3
0
        public async Task Delete_WhenNoRequestContentIsSent_RequestContentShouldBeNull()
        {
            var mocker = HttpClientMocker.Create();

            var client = mocker.Build();

            await client.DeleteAsync("https://path.to.url");

            Assert.Null(mocker.RequestContent);
        }
Пример #4
0
        public async Task Patch_WhenRequestContentIsSent_GetsResponse()
        {
            var requestContent = "request content";
            var mocker         = HttpClientMocker.Create();

            var client = mocker.Build();

            await client.PatchAsync("https://path.to.url", new StringContent(requestContent));

            Assert.Equal(requestContent, mocker.RequestContent);
        }
Пример #5
0
        public async Task RetrievesAbsoluteUri()
        {
            var expectedUrl = "https://path.to.url/";
            var mocker      = HttpClientMocker.Create();

            var client = mocker.Build();

            await client.PostAsync(expectedUrl, new ByteArrayContent(new byte[] {}));

            Assert.Equal(expectedUrl, mocker.AbsoluteRequestUri);
        }
Пример #6
0
        public async Task RetrievesRequestContent()
        {
            var expectedRequestContent = "request content";
            var mocker = HttpClientMocker.Create();

            var client = mocker.Build();

            await client.PostAsync("https://path.to.url/", new StringContent(expectedRequestContent));

            Assert.Equal(expectedRequestContent, mocker.RequestContent);
        }
Пример #7
0
        public async Task ArgNullAsync()
        {
            var logger     = new Mock <ILogger <DefaultWebHookSender> >();
            var httpClient = HttpClientMocker.Static(System.Net.HttpStatusCode.OK, "");
            var signature  = new Mock <ISignatureService>();

            Assert.Throws <ArgumentNullException>(() => new DefaultWebHookSender(null, signature.Object, logger.Object));
            Assert.Throws <ArgumentNullException>(() => new DefaultWebHookSender(httpClient, null, logger.Object));
            Assert.Throws <ArgumentNullException>(() => new DefaultWebHookSender(httpClient, signature.Object, null));

            var service = new DefaultWebHookSender(httpClient, signature.Object, logger.Object);
            await Assert.ThrowsAsync <ArgumentNullException>(() => service.SendAsync(null, CancellationToken.None));
        }
Пример #8
0
        public async Task SetBaseUrl()
        {
            var requestContent = "request content";
            var mocker         = HttpClientMocker.Create();

            mocker.SetBaseRequestUri("http://www.path.to");

            var client = mocker.Build();

            await client.PatchAsync("endpoint", new StringContent(requestContent));

            Assert.Equal("http://www.path.to/endpoint", mocker.AbsoluteRequestUri);
        }
Пример #9
0
        public async Task SetsResponseStatusCode()
        {
            var mocker = HttpClientMocker.Create();

            mocker.When.RequestMessageStringIs("request content")
            .Then.ResponseShouldBe(null, HttpStatusCode.Accepted);

            var client = mocker.Build();

            var response = await client.PostAsync("https://path.to.url/", new StringContent("request content"));

            Assert.Equal(HttpStatusCode.Accepted, response.StatusCode);
        }
Пример #10
0
        public async Task WhenExpectedRequestContentIsNotSent_ShouldNotReturnExpectedResponse()
        {
            var responseContent = "response content";
            var mocker          = HttpClientMocker.Create();

            mocker.When.RequestMessageStringIs(responseContent)
            .Then.ResponseShouldBe("response content");

            var client = mocker.Build();

            var response = await client.PostAsync("https://path.to.url/", new StringContent("other request content"));

            Assert.NotEqual(responseContent, await response.Content.ReadAsStringAsync());
        }
Пример #11
0
        public async Task TaxAssessmentServiceShouldReturnData()
        {
            _mockedService = new TaxAssessmentServiceMocked();

            _httpClient =
                HttpClientMocker.SetupHttpClientMock(Url,
                                                     await CreateTaxAssessmentAsString().ConfigureAwait(false));

            _service = new TaxAssessmentService(_httpClient);

            var result = _service.GetTaxAssessment();

            Assert.NotNull(result);
        }
        public async Task PopulationInNorwayServiceShouldReturnData()
        {
            _mockedService = new PopulationInNorwayServiceMocked();

            _httpClient =
                HttpClientMocker.SetupHttpClientMock(Url,
                                                     await CreatePopulationInNorwayAsString().ConfigureAwait(false));

            _service = new PopulationInNorwayService(_httpClient);

            var result = _service.GetPopulationsInNorway();

            Assert.NotNull(result);
        }
Пример #13
0
        public async Task HttpGet_WhenExpectationFails_NoContentBodyIsReturned()
        {
            var requestUrl      = "https://path.to.url";
            var responseContent = "response content";
            var mocker          = HttpClientMocker.Create();

            mocker.When.AbsoluteUrlIs(requestUrl)
            .Then.ResponseShouldBe(responseContent);

            var client = mocker.Build();

            var response = await client.GetAsync("https://path.to.otherurl/");

            Assert.NotEqual(responseContent, await response.Content.ReadAsStringAsync());
        }
Пример #14
0
        public async Task WhenNotExpectedRequestUriIsCalled_DoNotReturnExpectedContentasAResponse()
        {
            var responseContent = "content";

            var mocker = HttpClientMocker.Create();

            mocker.When.AbsoluteUrlIs("https://path.to.url/")
            .Then.ResponseShouldBe(responseContent);

            var client = mocker.Build();

            var response = await client.GetAsync("https://path.to.anotherurl/");

            Assert.NotEqual(responseContent, await response.Content.ReadAsStringAsync());
        }
Пример #15
0
        public async Task ShouldReturnEmptyResponse()
        {
            var mocker = HttpClientMocker.Create();

            mocker.When.RequestMessageStringIs("request content")
            .Then.ResponseShouldBe(null);

            var client = mocker.Build();

            var response = await client.PostAsync("https://path.to.url/", new StringContent("request content"));

            var content = Assert.IsType <ByteArrayContent>(response.Content);

            Assert.Empty(await content.ReadAsByteArrayAsync());
        }
Пример #16
0
        public async Task WhenUriIsSet_ExpectUri()
        {
            var responseContent = "content";
            var requestUrl      = "https://path.to.url/";
            var mocker          = HttpClientMocker.Create();

            mocker.When.AbsoluteUrlIs(requestUrl)
            .Then.ResponseShouldBe(responseContent);

            var client = mocker.Build();

            var response = await client.GetAsync(requestUrl);

            Assert.Equal(responseContent, await response.Content.ReadAsStringAsync());
        }
Пример #17
0
        public async Task NormalScenarioAsync(Dictionary <string, object> payload)
        {
            var logger           = new Mock <ILogger <DefaultWebHookSender> >();
            var signature        = "FIXED_SIGNATURE";
            var signatureService = new Mock <ISignatureService>();

            signatureService.Setup(s => s.GetSignature(It.IsAny <string>(), It.IsAny <string>())).Returns(signature);

            var webHook = new WebHook {
                Callback = new Uri("http://www.example.com")
            };
            var notif = new WebHookNotification {
                TriggerId = "noun.verb", Payload = payload
            };

            var callbackHasBeenCalled = false;
            var httpClient            = HttpClientMocker.Callback(async m =>
            {
                callbackHasBeenCalled = true;
                Assert.Equal(HttpMethod.Post, m.Method);
                Assert.Equal(webHook.Callback, m.RequestUri);

                var content = JsonConvert.DeserializeObject <Dictionary <string, string> >(await m.Content.ReadAsStringAsync());
                Assert.NotNull(content);
                Assert.Contains(DefaultWebHookSender.TriggerKey, content.Keys);
                Assert.Equal(notif.TriggerId, content[DefaultWebHookSender.TriggerKey]);
                Assert.Contains(DefaultWebHookSender.TimestampKey, content.Keys);
                Assert.Contains(DefaultWebHookSender.UniqueIdKey, content.Keys);

                if (notif.Payload != null)
                {
                    foreach (var kvp in notif.Payload)
                    {
                        Assert.Contains(kvp.Key, content.Keys);
                        Assert.Equal(kvp.Value, content[kvp.Key]);
                    }
                }

                Assert.Contains(DefaultWebHookSender.SignatureHeader, m.Headers.Select(kvp => kvp.Key));
                Assert.Equal(signature, m.Headers.GetValues(DefaultWebHookSender.SignatureHeader).First());
            });

            var service = new CounterDefaultWebHookSender(httpClient, signatureService.Object, logger.Object);
            await service.SendAsync(new WebHookWorkItem(notif, webHook), CancellationToken.None);

            Assert.True(callbackHasBeenCalled);
            Assert.Equal(1, service.Successes);
        }
        public async Task ValidCasesAsync(WebHook validWebHook)
        {
            var triggersById = new Dictionary <string, WebHookTrigger>
            {
                ["valid"] = new WebHookTrigger("valid"),
            };

            var triggers = new Mock <IWebHookTriggerProvider>();

            triggers.Setup(s => s.GetAvailableTriggers()).Returns(triggersById);
            var logger  = new Mock <ILogger <DefaultWebHookValidator> >();
            var client  = HttpClientMocker.ReturnQueryParam("echo");
            var service = new DefaultWebHookValidator(triggers.Object, logger.Object, client);

            await service.ValidateAsync(validWebHook);

            Assert.NotEqual(default, validWebHook.Id);
Пример #19
0
        public async Task CanSetTwoExpectations()
        {
            var expectedUrl            = "https://path.to.url/";
            var expectedRequestContent = "request content";
            var mocker = HttpClientMocker.Create();

            mocker.When.AbsoluteUrlIs(expectedUrl)
            .And.RequestMessageStringIs(expectedRequestContent)
            .Then.ResponseShouldBe("response content");

            var client = mocker.Build();

            await client.PostAsync(expectedUrl, new StringContent(expectedRequestContent));

            Assert.Equal(expectedUrl, mocker.AbsoluteRequestUri);
            Assert.Equal(expectedRequestContent, mocker.RequestContent);
        }
Пример #20
0
        public async Task CanSetTwoExpectations_WhenSomeExpectationsAreNotMet_ExpectedResponseShouldNotBeReturned()
        {
            var requestUrl             = "https://path.to.url/";
            var expectedRequestContent = "request content";
            var responseContent        = "response content";
            var mocker = HttpClientMocker.Create();

            mocker.When.AbsoluteUrlIs(requestUrl)
            .And.RequestMessageStringIs(expectedRequestContent)
            .Then.ResponseShouldBe(responseContent);

            var client = mocker.Build();

            var response = await client.PostAsync("https://path.to.otherurl/", new StringContent(expectedRequestContent));

            Assert.NotEqual(responseContent, await response.Content.ReadAsStringAsync());
        }
Пример #21
0
        public async Task ErrorScenarioAsync()
        {
            var logger    = new Mock <ILogger <DefaultWebHookSender> >();
            var signature = new Mock <ISignatureService>();

            var webHook = new WebHook {
                Callback = new Uri("http://www.example.com")
            };
            var notif = new WebHookNotification {
                TriggerId = "noun.verb"
            };

            var httpClient = HttpClientMocker.AlwaysFail(new Exception());

            var service = new CounterDefaultWebHookSender(httpClient, signature.Object, logger.Object);
            await service.SendAsync(new WebHookWorkItem(notif, webHook), CancellationToken.None);

            Assert.Equal(1, service.Failures);
        }
Пример #22
0
        public async Task NotFoundScenarioAsync(System.Net.HttpStatusCode code)
        {
            var logger    = new Mock <ILogger <DefaultWebHookSender> >();
            var signature = new Mock <ISignatureService>();

            var webHook = new WebHook {
                Callback = new Uri("http://www.example.com")
            };
            var notif = new WebHookNotification {
                TriggerId = "noun.verb"
            };

            var httpClient = HttpClientMocker.Static(code, "");

            var service = new CounterDefaultWebHookSender(httpClient, signature.Object, logger.Object);
            await service.SendAsync(new WebHookWorkItem(notif, webHook), CancellationToken.None);

            Assert.Equal(1, service.NotFounds);
        }
Пример #23
0
        public async Task NotFoundScenarioAsync(System.Net.HttpStatusCode code)
        {
            var logger    = new Mock <ILogger <EFWebHookSender <TestContext1> > >();
            var signature = new Mock <ISignatureService>();

            var context = _fixture.Provider.GetRequiredService <TestContext1>();
            var webHook = AddWebHook(context, Guid.NewGuid(), "myPrincipalxxx", "noun.verb", false, null);

            webHook.Callback = new Uri("http://example.org");
            await context.SaveChangesAsync();

            var notif = new WebHookNotification {
                TriggerId = "noun.verb"
            };

            var httpClient = HttpClientMocker.Static(code, "");

            var service = new EFWebHookSender <TestContext1>(httpClient, signature.Object, logger.Object, context);
            await service.SendAsync(new WebHookWorkItem(notif, webHook), CancellationToken.None);

            Assert.True((await context.WebHooks.FirstAsync(w => w.Id == webHook.Id)).IsPaused);
        }
        public async Task InvalidCasesAsync()
        {
            var triggersById = new Dictionary <string, WebHookTrigger>
            {
                ["valid"] = new WebHookTrigger("valid")
            };
            var triggers = new Mock <IWebHookTriggerProvider>();

            triggers.Setup(s => s.GetAvailableTriggers()).Returns(triggersById);
            var logger  = new Mock <ILogger <DefaultWebHookValidator> >();
            var client  = HttpClientMocker.Static(System.Net.HttpStatusCode.NotFound, "fail");
            var service = new DefaultWebHookValidator(triggers.Object, logger.Object, client);

            await Assert.ThrowsAsync <ArgumentException>(() => service.ValidateAsync(new WebHook {
                Secret = "too short"
            }));

            await Assert.ThrowsAsync <ArgumentException>(() => service.ValidateAsync(new WebHook {
                Secret = "toolong_toolong_toolong_toolong_toolong_toolong_toolong_toolong_toolong_toolong_toolong_toolong_toolong_toolong_toolong_toolong_toolong_toolong_toolong_toolong_"
            }));

            await Assert.ThrowsAsync <ArgumentException>(() => service.ValidateAsync(new WebHook()));

            await Assert.ThrowsAsync <ArgumentException>(() => service.ValidateAsync(new WebHook {
                Filters = new List <WebHookFilter>()
            }));

            await Assert.ThrowsAsync <ArgumentException>(() => service.ValidateAsync(new WebHook {
                Filters = new List <WebHookFilter> {
                    new WebHookFilter {
                        Trigger = "invalid"
                    }
                }
            }));

            await Assert.ThrowsAsync <ArgumentException>(() => service.ValidateAsync(new WebHook {
                Filters = new List <WebHookFilter> {
                    new WebHookFilter {
                        Trigger = "valid"
                    }
                }
            }));

            await Assert.ThrowsAsync <ArgumentException>(() => service.ValidateAsync(new WebHook {
                Filters = new List <WebHookFilter> {
                    new WebHookFilter {
                        Trigger = "valid"
                    }
                }, Callback = "c:/data"
            }));

            await Assert.ThrowsAsync <ArgumentException>(() => service.ValidateAsync(new WebHook {
                Filters = new List <WebHookFilter> {
                    new WebHookFilter {
                        Trigger = "valid"
                    }
                }, Callback = "ftp://data"
            }));

            await Assert.ThrowsAsync <ArgumentException>(() => service.ValidateAsync(new WebHook {
                Filters = new List <WebHookFilter> {
                    new WebHookFilter {
                        Trigger = "valid"
                    }
                }, Callback = "http://www.example.com"
            }));

            service = new DefaultWebHookValidator(triggers.Object, logger.Object, HttpClientMocker.AlwaysFail(new Exception()));
            await Assert.ThrowsAsync <ArgumentException>(() => service.ValidateAsync(new WebHook {
                Filters = new List <WebHookFilter> {
                    new WebHookFilter {
                        Trigger = "valid"
                    }
                }, Callback = "http://www.example.com"
            }));
        }
        public async Task InvalidCasesAsync()
        {
            var schema = new OpenApiSchema
            {
                Properties = new Dictionary <string, OpenApiSchema>
                {
                    ["param1"] = new OpenApiSchema {
                        Type = "integer"
                    },
                    ["param2"] = new OpenApiSchema {
                        Type = "string"
                    },
                    ["param3"] = new OpenApiSchema {
                        Type = "array", Items = new OpenApiSchema {
                            Type = "integer"
                        }
                    },
                    ["param4"] = new OpenApiSchema {
                        Type = "array", Reference = new OpenApiReference()
                    },
                    ["number"] = new OpenApiSchema {
                        Type = "number"
                    },
                    ["integer"] = new OpenApiSchema {
                        Type = "integer"
                    },
                    ["bool"] = new OpenApiSchema {
                        Type = "boolean"
                    },
                    ["object"] = new OpenApiSchema {
                        Type = "object"
                    },
                }
            };
            var triggersById = new Dictionary <string, WebHookTrigger>
            {
                ["valid"] = new WebHookTrigger {
                    Id = "valid", Schema = schema
                },
            };
            var triggers = new Mock <IWebHookTriggerProvider>();

            triggers.Setup(s => s.GetAvailableTriggers()).Returns(triggersById);
            var logger  = new Mock <ILogger <DefaultWebHookValidator> >();
            var client  = HttpClientMocker.Static(System.Net.HttpStatusCode.NotFound, "fail");
            var service = new DefaultWebHookValidator(triggers.Object, logger.Object, client);

            await Assert.ThrowsAsync <ArgumentException>(() => service.ValidateAsync(new WebHook {
                Secret = "tooshort"
            }));

            await Assert.ThrowsAsync <ArgumentException>(() => service.ValidateAsync(new WebHook {
                Secret = "toolong_toolong_toolong_toolong_toolong_toolong_toolong_toolong_toolong_toolong_toolong_toolong_toolong_toolong_toolong_toolong_toolong_toolong_toolong_toolong_"
            }));

            await Assert.ThrowsAsync <ArgumentException>(() => service.ValidateAsync(new WebHook()));

            await Assert.ThrowsAsync <ArgumentException>(() => service.ValidateAsync(new WebHook {
                Filters = new List <WebHookFilter>()
            }));

            await Assert.ThrowsAsync <ArgumentException>(() => service.ValidateAsync(new WebHook {
                Filters = new List <WebHookFilter> {
                    new WebHookFilter {
                        Trigger = "invalid"
                    }
                }
            }));

            await Assert.ThrowsAsync <ArgumentException>(() => service.ValidateAsync(new WebHook {
                Filters = new List <WebHookFilter> {
                    new WebHookFilter {
                        Trigger = "valid", Parameters = new Dictionary <string, object> {
                            [""] = ""
                        }
                    }
                }
            }));

            await Assert.ThrowsAsync <ArgumentException>(() => service.ValidateAsync(new WebHook {
                Filters = new List <WebHookFilter> {
                    new WebHookFilter {
                        Trigger = "valid", Parameters = new Dictionary <string, object> {
                            ["invalid"] = ""
                        }
                    }
                }
            }));

            await Assert.ThrowsAsync <ArgumentException>(() => service.ValidateAsync(new WebHook {
                Filters = new List <WebHookFilter> {
                    new WebHookFilter {
                        Trigger = "valid", Parameters = new Dictionary <string, object> {
                            ["param3"] = ""
                        }
                    }
                }
            }));

            await Assert.ThrowsAsync <ArgumentException>(() => service.ValidateAsync(new WebHook {
                Filters = new List <WebHookFilter> {
                    new WebHookFilter {
                        Trigger = "valid", Parameters = new Dictionary <string, object> {
                            ["param4.next"] = ""
                        }
                    }
                }
            }));

            await Assert.ThrowsAsync <ArgumentException>(() => service.ValidateAsync(new WebHook {
                Filters = new List <WebHookFilter> {
                    new WebHookFilter {
                        Trigger = "valid", Parameters = new Dictionary <string, object> {
                            ["param1"] = "string"
                        }
                    }
                }
            }));

            await Assert.ThrowsAsync <ArgumentException>(() => service.ValidateAsync(new WebHook {
                Filters = new List <WebHookFilter> {
                    new WebHookFilter {
                        Trigger = "valid", Parameters = new Dictionary <string, object> {
                            ["param1"] = null
                        }
                    }
                }
            }));

            await Assert.ThrowsAsync <ArgumentException>(() => service.ValidateAsync(new WebHook {
                Filters = new List <WebHookFilter> {
                    new WebHookFilter {
                        Trigger = "valid", Parameters = new Dictionary <string, object> {
                            ["number"] = true
                        }
                    }
                }
            }));

            await Assert.ThrowsAsync <ArgumentException>(() => service.ValidateAsync(new WebHook {
                Filters = new List <WebHookFilter> {
                    new WebHookFilter {
                        Trigger = "valid", Parameters = new Dictionary <string, object> {
                            ["integer"] = 2.3
                        }
                    }
                }
            }));

            await Assert.ThrowsAsync <ArgumentException>(() => service.ValidateAsync(new WebHook {
                Filters = new List <WebHookFilter> {
                    new WebHookFilter {
                        Trigger = "valid", Parameters = new Dictionary <string, object> {
                            ["boolean"] = 345
                        }
                    }
                }
            }));

            await Assert.ThrowsAsync <ArgumentException>(() => service.ValidateAsync(new WebHook {
                Filters = new List <WebHookFilter> {
                    new WebHookFilter {
                        Trigger = "valid", Parameters = new Dictionary <string, object> {
                            ["object"] = 23
                        }
                    }
                }
            }));

            await Assert.ThrowsAsync <ArgumentException>(() => service.ValidateAsync(new WebHook {
                Filters = new List <WebHookFilter> {
                    new WebHookFilter {
                        Trigger = "valid"
                    }
                }
            }));

            await Assert.ThrowsAsync <ArgumentException>(() => service.ValidateAsync(new WebHook {
                Filters = new List <WebHookFilter> {
                    new WebHookFilter {
                        Trigger = "valid"
                    }
                }, Callback = new Uri("c:/data")
            }));

            await Assert.ThrowsAsync <ArgumentException>(() => service.ValidateAsync(new WebHook {
                Filters = new List <WebHookFilter> {
                    new WebHookFilter {
                        Trigger = "valid"
                    }
                }, Callback = new Uri("ftp://data")
            }));

            await Assert.ThrowsAsync <ArgumentException>(() => service.ValidateAsync(new WebHook {
                Filters = new List <WebHookFilter> {
                    new WebHookFilter {
                        Trigger = "valid"
                    }
                }, Callback = new Uri("http://www.example.com")
            }));

            service = new DefaultWebHookValidator(triggers.Object, logger.Object, HttpClientMocker.AlwaysFail(new Exception()));
            await Assert.ThrowsAsync <ArgumentException>(() => service.ValidateAsync(new WebHook {
                Filters = new List <WebHookFilter> {
                    new WebHookFilter {
                        Trigger = "valid"
                    }
                }, Callback = new Uri("http://www.example.com")
            }));
        }