public void DetailAction_IfRepoIsValid_ReturnsRepositoryDetail()
        {
            // Arrange
            var mockGitHubService = new Mock<IGitHubRepoService>(MockBehavior.Strict);

            HomeController controller = new HomeController(mockGitHubService.Object);

            var gitHubRepoIdFake = 123;
            var ownerFake = "owner1";
            var repoNameFake = "repoFake1";

            // create fake repository detail
            var repoDetail = MockHelper.GetRepoByName(ownerFake, repoNameFake);
            var repoContributors = MockHelper.GetRepoContributors(ownerFake, repoNameFake);

            mockGitHubService.Setup(s => s.GetRepoByName(ownerFake, repoNameFake)).Returns(repoDetail);
            mockGitHubService.Setup(s => s.GetRepoContributors(ownerFake, repoNameFake)).Returns(repoContributors);
            mockGitHubService.Setup(s => s.IsFavoriteRepo(gitHubRepoIdFake)).Returns(false);

            // Act
            var result = controller.Detail(gitHubRepoIdFake, repoNameFake, ownerFake) as ViewResult;

            // Assert
            var userRepoDetail = (GitHubRepoViewModel)result.ViewData.Model;
            Assert.IsNotNull(userRepoDetail);
        }
        public void SearchAction_ReturnsListRepositoriesView()
        {
            // Arrange
            var mockGitHubService = new Mock<IGitHubRepoService>();

            HomeController controller = new HomeController(mockGitHubService.Object);

            // Act
            ViewResult result = controller.Search("repoNameSample") as ViewResult;

            // Assert
            Assert.AreEqual("ListRepositories", result.ViewName);
        }
        public void SearchAction_ValidRepoName_ReturnsRepositoriesList()
        {
            // Arrange
            var mockGitHubService = new Mock<IGitHubRepoService>();

            HomeController controller = new HomeController(mockGitHubService.Object);
            var fakeRepoName = "fakeRepoName";

            // create a list of repositories to return
            var userRepositories = MockHelper.GenerateFakeRepos(fakeRepoName);

            mockGitHubService.Setup(s => s.SearchByRepoName(fakeRepoName)).Returns(userRepositories);

            // Act
            var result = controller.Search(fakeRepoName) as ViewResult;

            // Assert
            var userRepoList = (IEnumerable<GitHubRepoViewModel>)result.ViewData.Model;
            Assert.IsTrue(userRepoList.Count() > 0);
        }
        public void MarkAsFavoriteAction_UnMarkFavorite_ReturnsView()
        {
            // Arrange
            var mockGitHubService = new Mock<IGitHubRepoService>();

            HomeController controller = new HomeController(mockGitHubService.Object);

            // create fake repo
            GitHubRepo repo = MockHelper.GetRepoByName("ownerFake1", "repoNameFake1");

            // convert to view model
            GitHubRepoViewModel repoVm = MockHelper.MapToViewModel(repo, null);
            string IsFavoriteRepo = "false";

            // Act
            RedirectToRouteResult result = (RedirectToRouteResult)controller.MarkAsFavorite(repoVm, IsFavoriteRepo);

            // Assert
            mockGitHubService.Verify(t => t.UnMarkAsFavorite(It.IsAny<GitHubRepo>()));

            Assert.IsTrue(result.RouteValues["action"].ToString() == "ListFavoritiesRepos");
        }
        public void SearchAction_InvalidRepoName_ReturnsRepositoriesList()
        {
            // Arrange
            var mockGitHubService = new Mock<IGitHubRepoService>();

            HomeController controller = new HomeController(mockGitHubService.Object);
            string fakeRepoName = null;
            IEnumerable<GitHubRepo> userRepositories = null;

            mockGitHubService.Setup(s => s.SearchByRepoName(fakeRepoName)).Returns(userRepositories);

            // Act
            var result = controller.Search(fakeRepoName) as ViewResult;

            // Assert
            var userRepoList = (IEnumerable<GitHubRepoViewModel>)result.ViewData.Model;
            Assert.IsNull(userRepoList);
        }
        public void ListFavoritiesReposAction_ReturnsRepositoriesList()
        {
            // Arrange
            var mockGitHubService = new Mock<IGitHubRepoService>();

            HomeController controller = new HomeController(mockGitHubService.Object);

            // create a list of repositories to return
            var userRepositories = MockHelper.GenerateFakeRepos("fakeUserName");

            mockGitHubService.Setup(s => s.GetAllFavorities()).Returns(userRepositories);

            // Act
            var result = controller.ListFavoritiesRepos() as ViewResult;

            // Assert
            var userRepoList = (IEnumerable<GitHubRepoViewModel>)result.ViewData.Model;
            Assert.IsTrue(userRepoList.Count() == userRepositories.Count());
        }
        public void ListFavoritiesReposAction_ReturnsNullRepositoryList()
        {
            // Arrange
            var mockGitHubService = new Mock<IGitHubRepoService>();

            HomeController controller = new HomeController(mockGitHubService.Object);

            List<GitHubRepo> favRepolist = null;

            mockGitHubService.Setup(s => s.GetAllFavorities()).Returns(favRepolist);

            // Act
            var result = controller.ListFavoritiesRepos() as ViewResult;

            // Assert
            var userRepoList = (IEnumerable<GitHubRepoViewModel>)result.ViewData.Model;
            Assert.IsNull(userRepoList);
        }
        public void IndexAction_ReturnsUserRepositoriesList()
        {
            // Arrange
            var mockGitHubService = new Mock<IGitHubRepoService>(MockBehavior.Strict);

            HomeController controller = new HomeController(mockGitHubService.Object);
            var userName = controller.DefaultUserRepository;

            // create a list of repositories to return
            var userRepositories = MockHelper.GenerateFakeRepos(userName);

            mockGitHubService.Setup(s => s.GetUserRepositories(userName)).Returns(userRepositories);

            // Act
            var result = controller.Index() as ViewResult;

            // Assert
            mockGitHubService.Verify(t => t.GetUserRepositories(userName));
            var userRepoList = (IEnumerable<GitHubRepoViewModel>)result.ViewData.Model;
            Assert.IsTrue(userRepoList.Count()>0);
        }
        public void IndexAction_IfDefaultUserRepositoyIsNull_ReturnsException()
        {
            // Arrange
            var mockGitHubService = new Mock<IGitHubRepoService>();

            HomeController controller = new HomeController(mockGitHubService.Object);

            // force empty configuration
            var userName = string.Empty;
            controller.DefaultUserRepository = userName;

            // create a list of repositories to return
            var userRepositories = MockHelper.GenerateFakeRepos(userName);

            mockGitHubService.Setup(s => s.GetUserRepositories(userName)).Returns(userRepositories);

            // Act
            var result = controller.Index() as ViewResult;

            // Assert
            // automatic assert
        }
        public void DetailAction_ReturnsRepoDetailView()
        {
            // Arrange
            var mockGitHubService = new Mock<IGitHubRepoService>();

            HomeController controller = new HomeController(mockGitHubService.Object);

            // Act
            ViewResult result = controller.Detail(1,"sampleRepo","ownerSample") as ViewResult;

            // Assert
            Assert.AreEqual("RepoDetail", result.ViewName);
        }