Exemple #1
0
        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>()
                );
        }
Exemple #2
0
        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);
        }
Exemple #3
0
        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);
        }
Exemple #4
0
        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);
        }
Exemple #5
0
        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);
        }