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); }
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); }