Esempio n. 1
0
        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));
        }
Esempio n. 2
0
        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);
        }
Esempio n. 3
0
        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);
        }
Esempio n. 4
0
        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);
        }
Esempio n. 5
0
        //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);
        }
Esempio n. 6
0
        public void GetFakeUserDetails()
        {
            var gitHubUser = new UserService(new FakeApiAdapter());

            GitHubUserModel userDetails = gitHubUser.GetUserDetails("abc");

            Assert.AreEqual(userDetails.UserName, "ABC");
            Assert.AreEqual(userDetails.Location, "england");
        }
Esempio n. 7
0
        //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);
        }
Esempio n. 8
0
        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");
        }
Esempio n. 9
0
        //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);
        }
Esempio n. 10
0
        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);
        }
Esempio n. 11
0
        /// <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);
        }
Esempio n. 12
0
        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));
            }
        }
Esempio n. 14
0
        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);
        }