public ActionResult Index(string username) { GitHubUserModel user = new GitHubUserModel(); using (var client = new HttpClient()) { client.BaseAddress = new Uri("https://api.github.com"); client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); client.DefaultRequestHeaders.UserAgent.TryParseAdd("request"); var response = client.GetAsync($"/users/{username}").Result; if (response.IsSuccessStatusCode) { var result = response.Content.ReadAsStringAsync().Result; user = JsonConvert.DeserializeObject <GitHubUserModel>(result); } else { ModelState.AddModelError(string.Empty, $"User {username} was not found or the Github Api is experiencing issues. Check the status here: https://www.githubstatus.com/"); } } return(View(user)); }
public void GetUserAndReposTest_InvalidResponse_WithMockHttpClientOperationsClass() { string userName = "******"; string userPath = string.Format("users/{0}", userName); GitHubUserModel userModel = new GitHubUserModel { Id = 1, Location = "Location", Login = userName, Avatar_Url = "url", Name = "Name", Repos = new List <GitHubUserRepoModel>() }; var fakeUserResponse = new HttpResponseMessage(HttpStatusCode.BadRequest) { Content = new ObjectContent <GitHubUserModel>(userModel, new JsonMediaTypeFormatter()) }; httpClientOperations.Setup(x => x.CallApi(Constants.GitHubEndpoint, userPath)).Returns(fakeUserResponse); GitHubUserModel result = apiService.GetUserAndRepos(userName).Result; //Check User Data Assert.IsNull(result); }
public void SeatchActionViewTest_CalledWithValidModelAndValidModelState_WithMockGitHubApiClass() { string login = "******"; UserSearchViewModel model = new UserSearchViewModel { UserName = login }; GitHubUserModel expectedData = new GitHubUserModel { Id = 1, Location = "Location", Login = login, Avatar_Url = "url" }; gitHubApi.Setup(x => x.GetUserAndRepos(login)).ReturnsAsync(expectedData); ViewResult view = controller.Search(model) as ViewResult; GitHubUserModel resultModel = view.ViewData.Model as GitHubUserModel; Assert.AreEqual("SearchReults", view.ViewName); Assert.AreEqual(expectedData.GetType(), view.ViewData.Model.GetType()); Assert.IsNotNull(resultModel.Id); Assert.AreEqual(resultModel.Id, expectedData.Id); Assert.AreEqual(resultModel.Location, expectedData.Location); Assert.AreEqual(resultModel.Login, expectedData.Login); Assert.AreEqual(resultModel.Avatar_Url, expectedData.Avatar_Url); }
private async Task <GitHubUserModel> FindUser(string userName) { string url = string.Format("users/{0}", userName); HttpClient client = new HttpClient(); client.BaseAddress = new Uri(apiUrl); client.DefaultRequestHeaders.Accept.Clear(); client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); client.DefaultRequestHeaders.Add("User-Agent", "my-user-agent-name"); var response = client.GetAsync(url).Result; if (response.IsSuccessStatusCode) { GitHubUserModel result = await response.Content.ReadAsAsync <GitHubUserModel>(); if (result != null && result.Id != null) { return(result); } } return(null); }
//Todo: change return model to model with repos result and response result public async Task <GitHubUserModel> GetUserAndRepos(string userName) { string url = string.Format("users/{0}/repos", userName); GitHubUserModel userData = null; try { userData = await FindUser(userName); if (userData != null) { List <GitHubUserRepoModel> repos = await FindRepos(url); if (repos.Any()) { repos = repos .OrderByDescending(x => x.Stargazers_Count) .Take(5) .ToList(); userData.Repos = repos; } } } catch (Exception ex) { } return(userData); }
public void GetFakeUserDetails() { var gitHubUser = new UserService(new FakeApiAdapter()); GitHubUserModel userDetails = gitHubUser.GetUserDetails("abc"); Assert.AreEqual(userDetails.UserName, "ABC"); Assert.AreEqual(userDetails.Location, "england"); }
//Executado quando o usuário envia uma mensagem no chat. public async Task ReceiveAsync(Message message, CancellationToken cancellationToken) { gitUser = await getGitUserInformationAsync(); Document document; document = getDocumentCollectionMenuMultimidia(); //Retorna uma mensagem no chat await _sender.SendMessageAsync(document, message.From, cancellationToken); }
public void GetRealUserDetails() { //Act var gitHubUser = new UserService(new ApiHelper()); //Arrange GitHubUserModel userDetails = gitHubUser.GetUserDetails("jskeet"); //Assert Assert.AreEqual(userDetails.UserName, "jskeet"); Assert.AreEqual(userDetails.Location, "London, UK"); Assert.AreEqual(userDetails.AvatarUrl, "https://avatars1.githubusercontent.com/u/17011?v=4"); }
//Busca os dados no git via requisição HTTP Get e retorna um objeto GitHubUserModel com as informações. private async Task <GitHubUserModel> getGitUserInformationAsync() { String userResponse = await HTTPRequestService.Instance.GetAsync(USER_GIT_URL); String reposResponse = await HTTPRequestService.Instance.GetAsync(USER_REPOS_URL); JObject userObject = JObject.Parse(userResponse); GitHubUserModel gitUser = JsonConvert.DeserializeObject <GitHubUserModel>(userObject.ToString()); JArray reposArray = JArray.Parse(reposResponse); List <ProjetoModel> userRepos = JsonConvert.DeserializeObject <List <ProjetoModel> >(reposArray.ToString()); gitUser.Projetos = userRepos.GetRange(0, 5); return(gitUser); }
public void SeatchActionViewTest_CalledWithInValidModelAndValidModelState_WithMockGitHubApiClass() { string login = "******"; UserSearchViewModel model = new UserSearchViewModel { UserName = login }; GitHubUserModel searchModel = null; gitHubApi.Setup(x => x.GetUserAndRepos(It.IsAny <string>())).ReturnsAsync(searchModel); ViewResult view = controller.Search(model) as ViewResult; UserSearchViewModel resultModel = view.ViewData.Model as UserSearchViewModel; Assert.AreEqual("Index", view.ViewName); Assert.IsTrue(resultModel.NoResults); }
/// <summary> /// Returns user details from the http client call /// </summary> /// <param name="userName"></param> /// <returns></returns> public GitHubUserModel GetUserDetails(string userName) { string uri = GetApiLink(userName); var gitHubUser = _apiHelper.GetGitHubApiData <GitHubUser>(uri); var gitHubUserRepos = _apiHelper.GetGitHubApiData <List <GitHubRepo> >(gitHubUser.UsersReposUrl); var gitHubUserModel = new GitHubUserModel() { UserName = gitHubUser.UserName, AvatarUrl = gitHubUser.AvatarUrl, Location = gitHubUser.Location, GitHubRepositories = gitHubUserRepos }; return(gitHubUserModel); }
public ActionResult Search(UserSearchViewModel model) { if (ModelState.IsValid) { GitHubUserModel userData = _gitHubApi.GetUserAndRepos(model.UserName).Result; if (userData != null) { return(View("SearchReults", userData)); } else { model.NoResults = true; return(View("Index", model)); } } return(View("Index")); }
public HttpResponseMessage GetUser([FromBody] User user) { var vm = new GitHubUserViewModel(); var msg = new JsonMsg(); var formatter = new JsonMediaTypeFormatter(); try { if (string.IsNullOrEmpty(user.UserName)) { throw new ArgumentNullException("UserName", "Username cannot be empty"); } var gitHubUser = new UserService(new ApiHelper()); var reposToDisplay = Convert.ToInt32(ConfigurationManager.AppSettings["UserReposToDisplay"]); GitHubUserModel userDetails = gitHubUser.GetUserDetails(user.UserName); vm.UserName = userDetails.UserName; vm.AvatarUrl = userDetails.AvatarUrl; vm.Location = userDetails.Location; vm.GitHubRepositories = gitHubUser.GetTopXRepos(userDetails.GitHubRepositories, reposToDisplay) .Select(item => new GitHubRepoViewModel() { RepositoryName = item.RepositoryName, RepositoryUrl = item.RepositoryUrl, StarGazersCount = item.StarGazersCount }).ToList(); msg.result = !string.IsNullOrEmpty(vm.UserName); msg.data = vm; return(Request.CreateResponse(HttpStatusCode.OK, msg, formatter)); } catch (Exception ex) { Log.Error(ex); var errorMessage = ex.InnerException.ToString(); return(Request.CreateResponse(errorMessage.Contains("404") ? HttpStatusCode.OK : HttpStatusCode.BadRequest, msg, formatter)); } }
public void GetUserAndReposTest_ValidResponse_WithMockHttpClientOperationsClass() { string userName = "******"; string userPath = string.Format("users/{0}", userName); string repoPath = string.Format("users/{0}/repos", userName); List <GitHubUserRepoModel> repoModels = new List <GitHubUserRepoModel> { new GitHubUserRepoModel { Id = 1, Stargazers_Count = 1, Name = "Repo 1", Html_Url = "Repo 1 Url" }, new GitHubUserRepoModel { Id = 2, Stargazers_Count = 2, Name = "Repo 2", Html_Url = "Repo 2 Url" }, new GitHubUserRepoModel { Id = 3, Stargazers_Count = 3, Name = "Repo 3", Html_Url = "Repo 3 Url" }, new GitHubUserRepoModel { Id = 4, Stargazers_Count = 4, Name = "Repo 4", Html_Url = "Repo 4 Url" }, new GitHubUserRepoModel { Id = 5, Stargazers_Count = 5, Name = "Repo 5", Html_Url = "Repo 5 Url" }, new GitHubUserRepoModel { Id = 6, Stargazers_Count = 6, Name = "Repo 6", Html_Url = "Repo 6 Url" } }; GitHubUserModel userModel = new GitHubUserModel { Id = 1, Location = "Location", Login = userName, Avatar_Url = "url", Name = "Name", Repos = new List <GitHubUserRepoModel>() }; var fakeUserResponse = new HttpResponseMessage(HttpStatusCode.OK) { Content = new ObjectContent <GitHubUserModel>(userModel, new JsonMediaTypeFormatter()) }; httpClientOperations.Setup(x => x.CallApi(Constants.GitHubEndpoint, userPath)).Returns(fakeUserResponse); var fakeRepoResponse = new HttpResponseMessage(HttpStatusCode.OK) { Content = new ObjectContent <List <GitHubUserRepoModel> >(repoModels, new JsonMediaTypeFormatter()) }; httpClientOperations.Setup(x => x.CallApi(Constants.GitHubEndpoint, repoPath)).Returns(fakeRepoResponse); GitHubUserModel result = apiService.GetUserAndRepos(userName).Result; //Check User Data Assert.AreEqual(userModel.Id, result.Id); Assert.AreEqual(userModel.Location, result.Location); Assert.AreEqual(userModel.Login, result.Login); Assert.AreEqual(userModel.Avatar_Url, result.Avatar_Url); Assert.AreEqual(userModel.Repos.Count, result.Repos.Count); //Check Repos Counts, Sort Order Etc CollectionAssert.AreEqual(repoModels.OrderByDescending(x => x.Stargazers_Count).Take(5).ToList(), result.Repos); Assert.AreEqual(5, result.Repos.Count); }