Example #1
0
        public void GetHttpClient__returns_http_client_with_required_headers(GitSearchType searchType)
        {
            //Arrange

            //Act
            var httpClient = subject.GetHttpClient(searchType);

            //Assert
            httpClient.BaseAddress.AbsoluteUri.Should().Be(StaticVariables.searchBaseAddress);
            Assert.Contains("application/json", httpClient.DefaultRequestHeaders.GetValues("accept"));
            if (searchType == GitSearchType.commits)
            {
                Assert.Contains("application/vnd.github.cloak-preview", httpClient.DefaultRequestHeaders.GetValues("accept"));
            }
            else if (searchType == GitSearchType.topics)
            {
                Assert.Contains("application/vnd.github.mercy-preview+json", httpClient.DefaultRequestHeaders.GetValues("accept"));
            }
            else
            {
                Assert.Contains("application/vnd.github.v3+json", httpClient.DefaultRequestHeaders.GetValues("accept"));
            }
            Assert.Contains(StaticVariables.userAgent, httpClient.DefaultRequestHeaders.GetValues("User-Agent"));
            Assert.Contains(StaticVariables.githubAuthorisation, httpClient.DefaultRequestHeaders.GetValues("Authorization"));
        }
        public async Task <T> GetSearchResponse <T>(GitSearchType searchType, string searchTerm, string sort, string order, int?perPage, int?pageNumber)
        {
            try
            {
                var httpClient = GetHttpClient(searchType);
                var uriParams  = GetUriWithQueryStrings(searchType, searchTerm, sort, order, perPage, pageNumber);

                var response = await httpClient.GetAsync(uriParams);

                response.EnsureSuccessStatusCode();
                var json = await response.Content.ReadAsStringAsync();

                return(JsonConvert.DeserializeObject <T>(json));
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        public virtual string GetUriWithQueryStrings(GitSearchType searchtype, string searchTerm, string sort, string order, int?perPage, int?pageNumber)
        {
            var expectedString = "";

            expectedString += $"{searchtype}?q={HttpUtility.UrlEncode(searchTerm)}";
            if (!string.IsNullOrEmpty(sort) && !string.IsNullOrEmpty(order))
            {
                expectedString += $"&sort={sort}&order={order}";
            }
            if (perPage != null)
            {
                expectedString += $"&per_page={perPage}";
            }
            if (pageNumber != null)
            {
                expectedString += $"&page={pageNumber}";
            }

            return(expectedString);
        }
        public virtual HttpClient GetHttpClient(GitSearchType searchtype)
        {
            var httpClient = new HttpClient();

            httpClient.BaseAddress = new Uri(_config.GetSection("GitHubBaseSearchAddress").Value);
            httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
            if (searchtype == GitSearchType.commits)
            {
                httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/vnd.github.cloak-preview")); // for commits
            }
            else if (searchtype == GitSearchType.topics)
            {
                httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/vnd.github.mercy-preview+json")); // for topics
            }
            else
            {
                httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/vnd.github.v3+json")); // for rest
            }
            httpClient.DefaultRequestHeaders.Add("User-Agent", _config.GetSection("GitHubUserAgent").Value);
            httpClient.DefaultRequestHeaders.Add("Authorization", _config.GetSection("GitHubAuthorization").Value);

            return(httpClient);
        }
Example #5
0
        public void GetUriWithQueryStrings__return_search_uri_with_query_strings(GitSearchType gitSearchType, string searchTerm, string searchSort, string searchOrder, int?searchPerPage, int?searchPageNumber)
        {
            //Arrange
            var expectedString = $"{gitSearchType}?q={HttpUtility.UrlEncode(searchTerm)}";

            if (!string.IsNullOrEmpty(searchSort) && !string.IsNullOrEmpty(searchOrder))
            {
                expectedString += $"&sort={searchSort}&order={searchOrder}";
            }
            if (searchPerPage != null)
            {
                expectedString += $"&per_page={searchPerPage}";
            }
            if (searchPageNumber != null)
            {
                expectedString += $"&page={searchPageNumber}";
            }

            //Act
            var actualString = subject.GetUriWithQueryStrings(gitSearchType, searchTerm, searchSort, searchOrder, searchPerPage, searchPageNumber);

            //Assert
            actualString.Should().Be(expectedString);
        }