Пример #1
0
        public async Task When_FindContactByEmailAsyncIsInvoked_And_HubspotReturnsOkStatusWithEmptyResults_Then_ResponseMustBeAContactDoesNotExistResponse()
        {
            // arrange
            const string responseFixture = "fixtures/hubspot-contact-find-by-email-empty-response.json";
            const string expectedEmail   = "some email";
            var          request         = new ContactFindByEmailRequest {
                Email = expectedEmail
            };
            var cancellationToken = new CancellationTokenSource().Token;

            this.wireMockServer
            .Given(Request.Create()
                   .UsingPost()
                   .WithPath("/crm/v3/objects/contacts/search")
                   .WithParam(ApiKeyParamName, DefaultApiKey)
                   .WithBody(new JsonMatcher($@"{{""filterGroups"":[{{""filters"":[{{""value"":""{expectedEmail}"",""propertyName"":""email"",""operator"":""EQ""}}]}}],""limit"":1}}"))
                   .WithHeader("Content-Type", "application/json; charset=utf-8")
                   .WithHeader("Accept", "application/json"))
            .RespondWith(Response.Create()
                         .WithStatusCode(HttpStatusCode.OK)
                         .WithBodyFromFile(responseFixture, cache: true)
                         .WithHeader("Content-Type", "application/json; charset=utf-8"));

            // act
            var response = await this.systemUnderTest.FindContactByEmailAsync(request, cancellationToken);

            // assert
            Assert.IsType <ContactDoesNotExistResponse>(response);
        }
        /// <summary>
        /// Maps a ContactFindByEmailRequest to HttpRequestMessage.
        /// </summary>
        /// <param name="request">Instance of <see cref="ContactFindByEmailRequest" />.</param>
        /// <param name="httpClient">Instance of <see cref="HttpClient" />.</param>
        /// <returns>A <see cref="HttpRequestMessage" /> object.</returns>
        internal static HttpRequestMessage MapToHttpRequestMessage(
            this ContactFindByEmailRequest request,
            HttpClient httpClient)
        {
            var path       = $"{BasePath}/search";
            var method     = HttpMethod.Post;
            var requestUri = new Uri(path, UriKind.Relative);
            var filters    = new List <Dictionary <string, string> >
            {
                new Dictionary <string, string>
                {
                    { "propertyName", "email" },
                    { "value", request.Email },
                    { "operator", "EQ" },
                },
            };
            var filterGroups = new List <Dictionary <string, object> >
            {
                new Dictionary <string, object>
                {
                    { "filters", filters },
                },
            };
            var body = new { filterGroups, limit = 1 };

            return(GenerateRequestMessage(
                       httpClient.GenerateRequestUri(requestUri),
                       method,
                       body));
        }
Пример #3
0
        public void When_ContactFindByEmailRequestIsPassed_If_HttpClientHasNullBaseAddress_Then_AnArgumentNullExceptionMustBeThrown()
        {
            // arrange
            var httpClient = new HttpClient();
            var request    = new ContactFindByEmailRequest();

            // act and assert
            Assert.Throws <ArgumentNullException>(() => request.MapToHttpRequestMessage(httpClient));
        }
        public async Task When_FindContactByEmailAsyncIsInvoked_And_RequestIsNull_Then_ArgumentNullExceptionMustBeThrown()
        {
            // arrange
            var cancellationToken             = new CancellationTokenSource().Token;
            ContactFindByEmailRequest request = null;

            // act and assert
            var err = await Assert.ThrowsAsync <ArgumentNullException>(() => this.systemUnderTest.FindContactByEmailAsync(request, cancellationToken));

            Assert.Equal("request", err.ParamName);
        }
Пример #5
0
        public void When_ContactFindByEmailRequestIsPassed_Then_HttpRequestContentTypeMustBeApplicationJsonWithUtf8Charset()
        {
            // arrange
            const string expectedContentType = "application/json; charset=utf-8";
            var          httpClient          = new HttpClient {
                BaseAddress = new Uri("http://localhost")
            };
            var request = new ContactFindByEmailRequest();

            // act
            var httpRequest = request.MapToHttpRequestMessage(httpClient);

            // assert
            Assert.Equal(expectedContentType, httpRequest.Content.Headers.GetValues("Content-Type").First());
        }
Пример #6
0
        public void When_ContactFindByEmailRequestIsPassed_Then_HttpRequestMethodMustBePost()
        {
            // arrange
            var httpClient = new HttpClient {
                BaseAddress = new Uri("http://localhost")
            };
            var request = new ContactFindByEmailRequest();

            // act
            using (var httpRequest = request.MapToHttpRequestMessage(httpClient))
            {
                // assert
                Assert.Equal(HttpMethod.Post, httpRequest.Method);
            }
        }
Пример #7
0
        public void When_ContactFindByEmailRequestIsPassed_Then_HttpRequestUriMustBeCorrect()
        {
            // arrange
            const string expectedUri = "http://localhost/crm/v3/objects/contacts/search";
            var          httpClient  = new HttpClient {
                BaseAddress = new Uri("http://localhost")
            };
            var request = new ContactFindByEmailRequest();

            // act
            using (var httpRequest = request.MapToHttpRequestMessage(httpClient))
            {
                // assert
                Assert.Equal(expectedUri, httpRequest.RequestUri.ToString());
            }
        }
Пример #8
0
        public void When_ContactFindByEmailRequestIsPassed_Then_HttpRequestAcceptHeaderMustBeApplicationJson()
        {
            // arrange
            const string expectedAccept = "application/json";
            var          httpClient     = new HttpClient {
                BaseAddress = new Uri("http://localhost")
            };
            var request = new ContactFindByEmailRequest();

            // act
            using (var httpRequest = request.MapToHttpRequestMessage(httpClient))
            {
                // assert
                Assert.Equal(expectedAccept, httpRequest.Headers.GetValues("Accept").First());
            }
        }
        /// <inheritdoc/>
        public async Task <BaseContactResponse> FindContactByEmailAsync(ContactFindByEmailRequest request, CancellationToken cancellationToken)
        {
            if (request is null)
            {
                throw new System.ArgumentNullException(nameof(request));
            }

            if (string.IsNullOrWhiteSpace(request.Email))
            {
                throw new System.ArgumentNullException(nameof(request.Email));
            }

            using (var httpRequest = request.MapToHttpRequestMessage(this.httpClient))
                using (var httpResponse = await this.httpClient.SendAndLogAsync(httpRequest, this.logger, cancellationToken))
                {
                    return(await httpResponse.MapToFindContactByEmailResponse());
                }
        }
Пример #10
0
        public void When_ContactFindByEmailRequestIsPassed_Then_HttpRequestBodyMustBeCorrect()
        {
            // arrange
            const string expectedEmail = "some email";
            var          expectedBody  = $@"{{""filterGroups"":[{{""filters"":[{{""propertyName"":""email"",""value"":""{expectedEmail}"",""operator"":""EQ""}}]}}],""limit"":1}}";
            var          httpClient    = new HttpClient {
                BaseAddress = new Uri("http://localhost")
            };
            var request = new ContactFindByEmailRequest {
                Email = expectedEmail
            };

            // act
            using (var httpRequest = request.MapToHttpRequestMessage(httpClient))
            {
                // assert
                var body = httpRequest.Content.ReadAsStringAsync().Result;
                Assert.Equal(expectedBody, body);
            }
        }