public async Task GetGithubUser_ThrowsOnNullOrEmptyArgument()
        {
            Mock <IDataContext> dataContextMock = new Mock <IDataContext>();
            IGithubUserService  service         = new GithubUserService(null, dataContextMock.Object, null);

            await Assert.ThrowsAsync <ArgumentException>(async() => await service.GetGithubUser(null));
        }
        public async Task GetGithubUser_ReturnsCorrectlyMappedObject_WhenRepositoryReturnsEntities()
        {
            var mockLogger     = new Mock <ILogger>(MockBehavior.Strict);
            var mockRepository = new Mock <IGitHubDataRepository>();

            var repos = GetRepositoryEntities();
            var user  = GetTestUserEntity();

            mockRepository.Setup(e => e.GetUserEntity(It.IsAny <string>()))
            .Returns(Task.FromResult(user));
            mockRepository.Setup(e => e.GetRepositoryEntities(It.IsAny <string>()))
            .Returns(Task.FromResult(repos));

            var sut      = new GithubUserService(mockRepository.Object, mockLogger.Object);
            var response = await sut.GetGithubUser("gitHandle");

            // test mapping
            Assert.That(response.Username == user.login);
            Assert.That(response.Avatar == user.avatar_url);
            Assert.That(response.Location == user.location);
            // limit stargazers to top 5
            Assert.That(response.Repositories.Count() == 5);
            // Make sure that the top 5 were took
            Assert.That(response.Repositories.Min(e => e.StarGazers) == 5);
        }
        public async Task GetGithubUser_ReturnsNull_WhenUserResponseIsNull()
        {
            var mockLogger     = new Mock <ILogger>(MockBehavior.Strict);
            var mockRepository = new Mock <IGitHubDataRepository>();

            var sut      = new GithubUserService(mockRepository.Object, mockLogger.Object);
            var response = await sut.GetGithubUser("gitHandle");

            Assert.IsNull(response);
        }
        public async Task GetGithubUser_LogsErrorsAndDoesNotThrow_WhenRepositoryThrowsExceptions()
        {
            var mockLogger     = new Mock <ILogger>(MockBehavior.Strict);
            var mockRepository = new Mock <IGitHubDataRepository>();

            mockRepository.Setup(e => e.GetUserEntity(It.IsAny <string>())).Throws(new Exception());
            mockLogger.Setup(e => e.Error(It.IsAny <Exception>(), "gitHandle")).Verifiable();

            var sut      = new GithubUserService(mockRepository.Object, mockLogger.Object);
            var response = await sut.GetGithubUser("gitHandle");

            Assert.DoesNotThrowAsync(async() => await sut.GetGithubUser("gitHandle"));
            mockLogger.Verify(e => e.Error(It.IsAny <Exception>(), "gitHandle"));
        }
        public async Task GetGithubUser_GetFromGithub()
        {
            Mock <IDataContext> dataContextMock = new Mock <IDataContext>();

            dataContextMock.Setup(x => x.GetGithubUser(It.IsAny <string>())).Returns(Task.FromResult <GithubUser>(null));
            dataContextMock.Setup(x => x.SaveGithubUser(It.IsAny <GithubUser>()));

            Mock <IGithubClient> githubClientMock = new Mock <IGithubClient>();

            githubClientMock.Setup(x => x.GetUser(It.IsAny <string>())).Returns(Task.FromResult(new GithubUser {
                Id = 1, Login = "******"
            }));

            IGithubUserService service = new GithubUserService(null, dataContextMock.Object, githubClientMock.Object);

            GithubUser user = await service.GetGithubUser("horvayev");

            dataContextMock.Verify(x => x.GetGithubUser(It.IsAny <string>()), Times.Once());
            dataContextMock.Verify(x => x.SaveGithubUser(It.IsAny <GithubUser>()), Times.Once());
            githubClientMock.Verify(x => x.GetUser(It.IsAny <string>()), Times.Once());
        }
Ejemplo n.º 6
0
 public BusinessContext(IDataContext dataContext)
 {
     DataContext       = dataContext;
     GithubUserService = new GithubUserService(this, DataContext, new Github.GithubClient());
     EmptyService      = new EmtyService(this, DataContext);
 }