public async Task Then_The_Bearer_Token_Is_Not_Added_If_Local( TestInternalApiConfiguration config) { //Arrange config.Url = "https://test.local"; config.Identifier = ""; var configuration = config; var response = new HttpResponseMessage { Content = new StringContent(""), StatusCode = HttpStatusCode.Accepted }; var getTestRequest = new GetAllTestRequest(); var expectedUrl = $"{config.Url}{getTestRequest.GetAllUrl}"; var httpMessageHandler = MessageHandler.SetupMessageHandlerMock(response, expectedUrl); var client = new HttpClient(httpMessageHandler.Object); var clientFactory = new Mock <IHttpClientFactory>(); clientFactory.Setup(_ => _.CreateClient(It.IsAny <string>())).Returns(client); var actual = new InternalApiClient <TestInternalApiConfiguration>(clientFactory.Object, configuration, Mock.Of <IAzureClientCredentialHelper>()); //Act await actual.GetAll <string>(getTestRequest); //Assert httpMessageHandler.Protected() .Verify <Task <HttpResponseMessage> >( "SendAsync", Times.Once(), ItExpr.Is <HttpRequestMessage>(c => c.Method.Equals(HttpMethod.Get) && c.RequestUri.AbsoluteUri.Equals(expectedUrl) && c.Headers.Authorization == null), ItExpr.IsAny <CancellationToken>() ); }
public async Task Then_If_Returns_Not_Found_Result_Returns_Default(int id, TestInternalApiConfiguration config) { //Arrange config.Url = "https://test.local"; var configuration = config; var response = new HttpResponseMessage { Content = new StringContent(""), StatusCode = HttpStatusCode.NotFound }; var getTestRequest = new GetTestRequestNoVersion(id); var expectedUrl = $"{config.Url}/{getTestRequest.GetUrl}"; var httpMessageHandler = MessageHandler.SetupMessageHandlerMock(response, expectedUrl); var client = new HttpClient(httpMessageHandler.Object); var hostingEnvironment = new Mock <IWebHostEnvironment>(); var clientFactory = new Mock <IHttpClientFactory>(); clientFactory.Setup(_ => _.CreateClient(It.IsAny <string>())).Returns(client); hostingEnvironment.Setup(x => x.EnvironmentName).Returns("Development"); var actual = new InternalApiClient <TestInternalApiConfiguration>(clientFactory.Object, configuration, hostingEnvironment.Object, Mock.Of <IAzureClientCredentialHelper>()); //Act var actualResult = await actual.Get <string>(getTestRequest); //Assert Assert.IsNull(actualResult); }
public async Task Then_If_Returns_Not_Found_Result_Returns_Empty_List( TestInternalApiConfiguration config) { //Arrange config.Url = "https://test.local"; var configuration = config; var response = new HttpResponseMessage { Content = new StringContent(""), StatusCode = HttpStatusCode.NotFound }; var getTestRequest = new GetAllTestRequest(); var expectedUrl = $"{config.Url}{getTestRequest.GetAllUrl}"; var httpMessageHandler = MessageHandler.SetupMessageHandlerMock(response, expectedUrl); var client = new HttpClient(httpMessageHandler.Object); var clientFactory = new Mock <IHttpClientFactory>(); clientFactory.Setup(_ => _.CreateClient(It.IsAny <string>())).Returns(client); var actual = new InternalApiClient <TestInternalApiConfiguration>(clientFactory.Object, configuration, Mock.Of <IAzureClientCredentialHelper>()); //Act var actualResult = await actual.GetAll <string>(getTestRequest); //Assert Assert.IsEmpty(actualResult); }
public async Task Then_The_Endpoint_Is_Called_And_Content_Returned_With_Response_Code( string authToken, string postContent, int id, string responseContent, TestInternalApiConfiguration config) { //Arrange var azureClientCredentialHelper = new Mock <IAzureClientCredentialHelper>(); azureClientCredentialHelper.Setup(x => x.GetAccessTokenAsync(config.Identifier)).ReturnsAsync(authToken); config.Url = "https://test.local"; var testObject = JsonConvert.SerializeObject(new TestResponse { MyResponse = responseContent }); var response = new HttpResponseMessage { Content = new StringContent(testObject), StatusCode = HttpStatusCode.Created }; var postTestRequest = new PostTestRequest(id) { Data = postContent }; var expectedUrl = $"{config.Url}{postTestRequest.PostUrl}"; var httpMessageHandler = MessageHandler.SetupMessageHandlerMock(response, expectedUrl, "post"); var client = new HttpClient(httpMessageHandler.Object); var hostingEnvironment = new Mock <IWebHostEnvironment>(); var clientFactory = new Mock <IHttpClientFactory>(); clientFactory.Setup(_ => _.CreateClient(It.IsAny <string>())).Returns(client); hostingEnvironment.Setup(x => x.EnvironmentName).Returns("Staging"); var actual = new InternalApiClient <TestInternalApiConfiguration>(clientFactory.Object, config, hostingEnvironment.Object, azureClientCredentialHelper.Object); //Act var actualResult = await actual.PostWithResponseCode <TestResponse>(postTestRequest); //Assert httpMessageHandler.Protected() .Verify <Task <HttpResponseMessage> >( "SendAsync", Times.Once(), ItExpr.Is <HttpRequestMessage>(c => c.Method.Equals(HttpMethod.Post) && c.RequestUri.AbsoluteUri.Equals(expectedUrl) && c.Headers.Authorization.Scheme.Equals("Bearer") && c.Headers.FirstOrDefault(h => h.Key.Equals("X-Version")).Value.FirstOrDefault() == "2.0" && c.Headers.Authorization.Parameter.Equals(authToken)), ItExpr.IsAny <CancellationToken>() ); actualResult.StatusCode.Should().Be(HttpStatusCode.Created); actualResult.Body.MyResponse.Should().Be(responseContent); }
public async Task Then_The_Endpoint_Is_Called( string authToken, TestInternalApiConfiguration config) { //Arrange var azureClientCredentialHelper = new Mock <IAzureClientCredentialHelper>(); azureClientCredentialHelper.Setup(x => x.GetAccessTokenAsync(config.Identifier)).ReturnsAsync(authToken); config.Url = "https://test.local"; var configuration = config; var response = new HttpResponseMessage { Content = new StringContent(JsonConvert.SerializeObject(new List <string> { "string", "string" })), StatusCode = HttpStatusCode.Accepted }; var getTestRequest = new GetAllTestRequest(); var expectedUrl = $"{config.Url}{getTestRequest.GetAllUrl}"; var httpMessageHandler = MessageHandler.SetupMessageHandlerMock(response, expectedUrl); var client = new HttpClient(httpMessageHandler.Object); var clientFactory = new Mock <IHttpClientFactory>(); clientFactory.Setup(_ => _.CreateClient(It.IsAny <string>())).Returns(client); var hostingEnvironment = new Mock <IWebHostEnvironment>(); hostingEnvironment.Setup(x => x.EnvironmentName).Returns("Staging"); var apiClient = new InternalApiClient <TestInternalApiConfiguration>(clientFactory.Object, configuration, hostingEnvironment.Object, azureClientCredentialHelper.Object); //Act var actual = await apiClient.GetAll <string>(getTestRequest); Assert.IsAssignableFrom <List <string> >(actual); //Assert httpMessageHandler.Protected() .Verify <Task <HttpResponseMessage> >( "SendAsync", Times.Once(), ItExpr.Is <HttpRequestMessage>(c => c.Method.Equals(HttpMethod.Get) && c.RequestUri.AbsoluteUri.Equals(expectedUrl) && c.Headers.Authorization.Scheme.Equals("Bearer") && c.Headers.Authorization.Parameter.Equals(authToken)), ItExpr.IsAny <CancellationToken>() ); }
public async Task Then_The_Endpoint_Is_Called( string authToken, string postContent, int id, TestInternalApiConfiguration config) { //Arrange var azureClientCredentialHelper = new Mock <IAzureClientCredentialHelper>(); azureClientCredentialHelper.Setup(x => x.GetAccessTokenAsync(config.Identifier)).ReturnsAsync(authToken); config.Url = "https://test.local"; var response = new HttpResponseMessage { Content = new StringContent(""), StatusCode = HttpStatusCode.NoContent }; var putTestRequest = new PutTestRequest(id) { Data = postContent }; var expectedUrl = $"{config.Url}{putTestRequest.PutUrl}"; var httpMessageHandler = MessageHandler.SetupMessageHandlerMock(response, expectedUrl, "put"); var client = new HttpClient(httpMessageHandler.Object); var clientFactory = new Mock <IHttpClientFactory>(); clientFactory.Setup(_ => _.CreateClient(It.IsAny <string>())).Returns(client); var actual = new InternalApiClient <TestInternalApiConfiguration>(clientFactory.Object, config, azureClientCredentialHelper.Object); //Act await actual.Put(putTestRequest); //Assert httpMessageHandler.Protected() .Verify <Task <HttpResponseMessage> >( "SendAsync", Times.Once(), ItExpr.Is <HttpRequestMessage>(c => c.Method.Equals(HttpMethod.Put) && c.RequestUri.AbsoluteUri.Equals(expectedUrl) && c.Headers.Authorization.Scheme.Equals("Bearer") && c.Headers.FirstOrDefault(h => h.Key.Equals("X-Version")).Value.FirstOrDefault() == "2.0" && c.Headers.Authorization.Parameter.Equals(authToken)), ItExpr.IsAny <CancellationToken>() ); }
public async Task Then_The_Bearer_Token_Is_Not_Added_If_Local_And_Default_Version_If_Not_Specified( int id, TestInternalApiConfiguration config) { //Arrange config.Url = "https://test.local"; var configuration = config; var response = new HttpResponseMessage { Content = new StringContent(""), StatusCode = HttpStatusCode.Accepted }; var getTestRequest = new GetTestRequest(id); var expectedUrl = $"{config.Url}{getTestRequest.GetUrl}"; var httpMessageHandler = MessageHandler.SetupMessageHandlerMock(response, expectedUrl); var client = new HttpClient(httpMessageHandler.Object); var hostingEnvironment = new Mock <IWebHostEnvironment>(); var clientFactory = new Mock <IHttpClientFactory>(); clientFactory.Setup(_ => _.CreateClient(It.IsAny <string>())).Returns(client); hostingEnvironment.Setup(x => x.EnvironmentName).Returns("Development"); var actual = new InternalApiClient <TestInternalApiConfiguration>(clientFactory.Object, configuration, hostingEnvironment.Object, Mock.Of <IAzureClientCredentialHelper>()); //Act await actual.GetResponseCode(getTestRequest); //Assert httpMessageHandler.Protected() .Verify <Task <HttpResponseMessage> >( "SendAsync", Times.Once(), ItExpr.Is <HttpRequestMessage>(c => c.Method.Equals(HttpMethod.Get) && c.Headers.FirstOrDefault(h => h.Key.Equals("X-Version")).Value.FirstOrDefault() == "2.0" && c.RequestUri.AbsoluteUri.Equals(expectedUrl) && c.Headers.Authorization == null), ItExpr.IsAny <CancellationToken>() ); }
public async Task Then_Multiple_Calls_Do_Not_Result_In_Multiple_Versions_Added(string authToken, int id, TestInternalApiConfiguration config) { //Arrange var azureClientCredentialHelper = new Mock <IAzureClientCredentialHelper>(); azureClientCredentialHelper.Setup(x => x.GetAccessTokenAsync(config.Identifier)).ReturnsAsync(authToken); config.Url = "https://test.local"; var response = new HttpResponseMessage { Content = new StringContent(""), StatusCode = HttpStatusCode.Accepted }; var getTestRequest = new GetTestRequest(id); var expectedUrl = $"{config.Url}/{getTestRequest.GetUrl}"; var httpMessageHandler = MessageHandler.SetupMessageHandlerMock(response, expectedUrl); var client = new HttpClient(httpMessageHandler.Object); var clientFactory = new Mock <IHttpClientFactory>(); clientFactory.Setup(_ => _.CreateClient(It.IsAny <string>())).Returns(client); var actual = new InternalApiClient <TestInternalApiConfiguration>(clientFactory.Object, config, azureClientCredentialHelper.Object); //Act await actual.GetWithResponseCode <string>(getTestRequest); await actual.GetWithResponseCode <string>(getTestRequest); //Assert httpMessageHandler.Protected() .Verify <Task <HttpResponseMessage> >( "SendAsync", Times.Exactly(2), ItExpr.Is <HttpRequestMessage>(c => c.Method.Equals(HttpMethod.Get) && c.RequestUri.AbsoluteUri.Equals(expectedUrl) && c.Headers.Authorization.Scheme.Equals("Bearer") && c.Headers.FirstOrDefault(h => h.Key.Equals("X-Version")).Value.Single() == "2.0" && c.Headers.Authorization.Parameter.Equals(authToken)), ItExpr.IsAny <CancellationToken>() ); }
public async Task Then_If_Returns_Error_Result_Returns_ErrorCode_With_Response(string responseContent, int id, TestInternalApiConfiguration config) { //Arrange config.Url = "https://test.local"; config.Identifier = ""; var configuration = config; var response = new HttpResponseMessage { Content = new StringContent(responseContent), StatusCode = HttpStatusCode.TooManyRequests }; var getTestRequest = new GetTestRequestNoVersion(id); var expectedUrl = $"{config.Url}/{getTestRequest.GetUrl}"; var httpMessageHandler = MessageHandler.SetupMessageHandlerMock(response, expectedUrl); var client = new HttpClient(httpMessageHandler.Object); var clientFactory = new Mock <IHttpClientFactory>(); clientFactory.Setup(_ => _.CreateClient(It.IsAny <string>())).Returns(client); var actual = new InternalApiClient <TestInternalApiConfiguration>(clientFactory.Object, configuration, Mock.Of <IAzureClientCredentialHelper>()); //Act var actualResult = await actual.GetWithResponseCode <string>(getTestRequest); //Assert Assert.IsNotNull(actualResult); actualResult.StatusCode.Should().Be(HttpStatusCode.TooManyRequests); actualResult.Body.Should().BeNull(); actualResult.ErrorContent.Should().Be(responseContent); }