public async Task ReturnCollectionWithTweetUrlEqualToExpectedOne_WhenInvokedWithValidParameter()
        {
            //Arrange
            var apiServiceMock       = new Mock <IOAuthCreationService>();
            var jsonDeserializerMock = new Mock <IJsonObjectDeserializer>();

            var userId       = "1905";
            var resourceUrl  = "https://api.twitter.com/1.1/statuses/user_timeline.json?user_id=";
            var jsonResponse = "JsonResponse";
            var tweet        = new TweetApiDto()
            {
                Id = "1905", TweetAuthor = "Marto Stamatov", TweetUrl = "SomeUrl"
            };

            ICollection <TweetApiDto> tweets = new List <TweetApiDto>
            {
                tweet
            };

            apiServiceMock
            .Setup(x => x.GetTwitterApiCallData($"{resourceUrl}{userId}&count=20", null))
            .ReturnsAsync(jsonResponse);

            jsonDeserializerMock
            .Setup(x => x.Deserialize <ICollection <TweetApiDto> >(jsonResponse))
            .Returns(tweets);

            var twitterService = new TwitterService(apiServiceMock.Object, jsonDeserializerMock.Object);

            //Act
            var actualResult = await twitterService.GetUsersTimeline(userId);

            //Assert
            Assert.AreEqual(actualResult.FirstOrDefault().TweetUrl, tweet.TweetUrl);
        }
Esempio n. 2
0
        public async Task <bool> DownloadTweet(string userId, TweetApiDto tweetDto)
        {
            Guard.WhenArgument(userId, "User Id").IsNullOrEmpty().Throw();
            Guard.WhenArgument(tweetDto, "Tweet Dto").IsNull().Throw();

            var tweet = this.MappingProvider.MapTo <Tweet>(tweetDto);

            Guard.WhenArgument(tweet, "Tweet").IsNull().Throw();

            var checkIfTweetExists = await this.tweetRepository.Get(tweet.Id);

            if (checkIfTweetExists == null)
            {
                this.tweetRepository.Add(tweet);
                await this.UnitOfWork.SaveChangesAsync();
            }

            var user = await this.UserRepository.Get(userId);

            Guard.WhenArgument(user, "User").IsNull().Throw();

            //this.tweetRepository.DownloadTweet(userId, tweet);

            if (await this.UserRepository.TweetDownloaded(user, tweet))
            {
                await this.UnitOfWork.SaveChangesAsync();

                return(true);
            }

            return(false);
        }
        public void ThrowArgumentNullException_WhenJsonDeserializerReturnsNull()
        {
            //Arrange
            var apiServiceMock       = new Mock <IOAuthCreationService>();
            var jsonDeserializerMock = new Mock <IJsonObjectDeserializer>();

            string userId       = "1905";
            var    resourceUrl  = "https://api.twitter.com/1.1/statuses/user_timeline.json?user_id=";
            var    jsonResponse = "JsonResponse";
            var    tweet        = new TweetApiDto()
            {
                Id = "1905", TweetAuthor = "Marto Stamatov", TweetUrl = "SomeUrl"
            };

            ICollection <TweetApiDto> tweets = null;

            apiServiceMock
            .Setup(x => x.GetTwitterApiCallData($"{resourceUrl}{userId}&count=20", null))
            .ReturnsAsync(jsonResponse);

            jsonDeserializerMock
            .Setup(x => x.Deserialize <ICollection <TweetApiDto> >(jsonResponse))
            .Returns(tweets);

            var twitterService = new TwitterService(apiServiceMock.Object, jsonDeserializerMock.Object);

            //Act && Assert
            Assert.ThrowsExceptionAsync <ArgumentException>(async() => await twitterService.GetUsersTimeline(userId));
        }
        public async Task ReturnCollectionOfTweetDtoObjects_WhenInvokedWithValidParameters()
        {
            //Arrange
            var unitOfWorkMock      = new Mock <IUnitOfWork>();
            var mappingProviderMock = new Mock <IMappingProvider>();
            var userRepositoryMock  = new Mock <IUserRepository>();
            var twitterServiceMock  = new Mock <ITwitterService>();
            var userManagerMock     = MockUserManager <User>();

            var userId = "30";
            var tweet  = new Tweet()
            {
                Id = "1905"
            };
            var tweets = new List <Tweet>()
            {
                tweet
            };

            var tweetDto = new TweetApiDto()
            {
                Id = "1905"
            };
            var expectedResult = new List <TweetApiDto>()
            {
                tweetDto
            };

            userRepositoryMock
            .Setup(x => x.GetAllDownloadedTweets(userId))
            .ReturnsAsync(tweets);

            mappingProviderMock
            .Setup(x => x.ProjectTo <Tweet, TweetApiDto>(tweets))
            .Returns(expectedResult);

            var userService = new UserService(
                unitOfWorkMock.Object,
                mappingProviderMock.Object,
                userRepositoryMock.Object,
                twitterServiceMock.Object,
                userManagerMock.Object);

            //Act
            var actualResult = await userService.GetAllDownloadTweetsByUser(userId);

            //Assert
            Assert.IsNotNull(actualResult);
            Assert.AreEqual(actualResult.FirstOrDefault().Id, expectedResult.FirstOrDefault().Id);
        }
        public async Task CallSaveChangesMethodTwice_WhenTweetDoesNotExistInTheDatabase()
        {
            //Arrange
            var unitOfWorkMock      = new Mock <IUnitOfWork>();
            var mappingProviderMock = new Mock <IMappingProvider>();
            var userRepositoryMock  = new Mock <IUserRepository>();
            var tweetRepositoryMock = new Mock <ITweetRepository>();

            var tweetApiDto = new TweetApiDto();
            var tweet       = new Tweet()
            {
                Id = "30"
            };
            var user = new User()
            {
                Name = "Marto Stamatov"
            };

            mappingProviderMock
            .Setup(x => x.MapTo <Tweet>(tweetApiDto))
            .Returns(tweet);

            tweetRepositoryMock
            .Setup(x => x.Get(tweet.Id))
            .ReturnsAsync((Tweet)null);

            tweetRepositoryMock.Setup(x => x.Add(tweet)).Verifiable();

            userRepositoryMock
            .Setup(x => x.Get(user.Id))
            .ReturnsAsync(user);

            userRepositoryMock
            .Setup(x => x.TweetDownloaded(user, tweet))
            .ReturnsAsync(true);

            var tweetService = new TweetService(
                unitOfWorkMock.Object,
                mappingProviderMock.Object,
                userRepositoryMock.Object,
                tweetRepositoryMock.Object);

            //Act
            var tweetIsDownloaded = await tweetService.DownloadTweet(user.Id, tweetApiDto);

            //Assert
            unitOfWorkMock.Verify(x => x.SaveChangesAsync(), Times.Exactly(2));
        }
        public void ThrowArgumentNullException_WhenInvokedWithInvalidNullIdParameter()
        {
            //Arrange
            var unitOfWorkMock      = new Mock <IUnitOfWork>();
            var mappingProviderMock = new Mock <IMappingProvider>();
            var userRepositoryMock  = new Mock <IUserRepository>();
            var twitterServiceMock  = new Mock <ITwitterService>();
            var userManagerMock     = MockUserManager <User>();

            var userId = "30";
            var tweet  = new Tweet()
            {
                Id = "1905"
            };
            var tweets = new List <Tweet>()
            {
                tweet
            };

            var tweetDto = new TweetApiDto()
            {
                Id = "1905"
            };
            var expectedResult = new List <TweetApiDto>()
            {
                tweetDto
            };

            userRepositoryMock
            .Setup(x => x.GetAllDownloadedTweets(userId))
            .ReturnsAsync(tweets);

            mappingProviderMock
            .Setup(x => x.ProjectTo <Tweet, TweetApiDto>(tweets))
            .Returns(expectedResult);

            var userService = new UserService(
                unitOfWorkMock.Object,
                mappingProviderMock.Object,
                userRepositoryMock.Object,
                twitterServiceMock.Object,
                userManagerMock.Object);

            //Act && Assert
            Assert.ThrowsExceptionAsync <ArgumentNullException>(async() => await userService.GetAllDownloadTweetsByUser(null));
        }
        public async Task ReturnFalse_WhenUserRepositoryTweedDownloadedMethodReturnsFalse()
        {
            //Arrange
            var unitOfWorkMock      = new Mock <IUnitOfWork>();
            var mappingProviderMock = new Mock <IMappingProvider>();
            var userRepositoryMock  = new Mock <IUserRepository>();
            var tweetRepositoryMock = new Mock <ITweetRepository>();

            var tweetApiDto = new TweetApiDto();
            var tweet       = new Tweet()
            {
                Id = "30"
            };
            var user = new User()
            {
                Name = "Marto Stamatov"
            };

            mappingProviderMock
            .Setup(x => x.MapTo <Tweet>(tweetApiDto))
            .Returns(tweet);

            tweetRepositoryMock
            .Setup(x => x.Get(tweet.Id))
            .ReturnsAsync(tweet);

            userRepositoryMock
            .Setup(x => x.Get(user.Id))
            .ReturnsAsync(user);

            userRepositoryMock
            .Setup(x => x.TweetDownloaded(user, tweet))
            .ReturnsAsync(false);

            var tweetService = new TweetService(
                unitOfWorkMock.Object,
                mappingProviderMock.Object,
                userRepositoryMock.Object,
                tweetRepositoryMock.Object);

            //Act
            var tweetIsDownloaded = await tweetService.DownloadTweet(user.Id, tweetApiDto);

            //Assert
            Assert.IsFalse(tweetIsDownloaded);
        }
Esempio n. 8
0
        public async Task ReturnCollectionOfTwitterAcounts_WhenInvokedWithValidParameter()
        {
            //Arrange
            var apiServiceMock       = new Mock <IOAuthCreationService>();
            var jsonDeserializerMock = new Mock <IJsonObjectDeserializer>();

            var favUsersIds  = "100,545,6969";
            var resourceUrl  = "https://api.twitter.com/1.1/users/lookup.json?user_id=";
            var jsonResponse = "JsonResponse";
            var status       = new TweetApiDto()
            {
                Id = "1905", TweetAuthor = "Marto Stamatov", TweetUrl = "SomeUrl"
            };
            var twitterAccount = new TwitterAccountApiDto()
            {
                UserName = "******", CurrentStatus = status
            };
            ICollection <TwitterAccountApiDto> twitterAccounts = new List <TwitterAccountApiDto>
            {
                twitterAccount
            };

            apiServiceMock
            .Setup(x => x.GetTwitterApiCallData(resourceUrl + favUsersIds, null))
            .ReturnsAsync(jsonResponse);

            jsonDeserializerMock
            .Setup(x => x.Deserialize <ICollection <TwitterAccountApiDto> >(jsonResponse))
            .Returns(twitterAccounts);

            var expectedResult = twitterAccounts
                                 .Select(u => u.CurrentStatus)
                                 .OrderByDescending(t => t.CreatedAt)
                                 .ToList();

            var twitterService = new TwitterService(apiServiceMock.Object, jsonDeserializerMock.Object);

            //Act
            var actualResult = await twitterService.GetTimeline(favUsersIds);

            //Assert
            Assert.IsNotNull(actualResult);
            Assert.IsInstanceOfType(actualResult, typeof(ICollection <TweetApiDto>));
        }
        public void ThrowArgumentNullException_WhenUserRepositoryGetMethodReturnsNull()
        {
            //Arrange
            var unitOfWorkMock      = new Mock <IUnitOfWork>();
            var mappingProviderMock = new Mock <IMappingProvider>();
            var userRepositoryMock  = new Mock <IUserRepository>();
            var tweetRepositoryMock = new Mock <ITweetRepository>();

            var tweetApiDto = new TweetApiDto();
            var tweet       = new Tweet()
            {
                Id = "30"
            };
            var user = new User()
            {
                Name = "Marto Stamatov"
            };

            mappingProviderMock
            .Setup(x => x.MapTo <Tweet>(tweetApiDto))
            .Returns((Tweet)null);

            tweetRepositoryMock
            .Setup(x => x.Get(tweet.Id))
            .ReturnsAsync(tweet);

            userRepositoryMock
            .Setup(x => x.Get(user.Id))
            .ReturnsAsync((User)null);

            userRepositoryMock
            .Setup(x => x.TweetDownloaded(user, tweet))
            .ReturnsAsync(true);

            var tweetService = new TweetService(
                unitOfWorkMock.Object,
                mappingProviderMock.Object,
                userRepositoryMock.Object,
                tweetRepositoryMock.Object);

            //Act && Assert
            Assert.ThrowsExceptionAsync <ArgumentNullException>(() => tweetService.DownloadTweet(user.Id, tweetApiDto));
        }
Esempio n. 10
0
        public void ThrowArgumentException_WhenJsonResponseIsEmptyString()
        {
            //Arrange
            var apiServiceMock       = new Mock <IOAuthCreationService>();
            var jsonDeserializerMock = new Mock <IJsonObjectDeserializer>();

            string favUsersIds  = "100,545,6969";
            var    resourceUrl  = "https://api.twitter.com/1.1/users/lookup.json?user_id=";
            string jsonResponse = string.Empty;
            var    status       = new TweetApiDto()
            {
                Id = "1905", TweetAuthor = "Marto Stamatov", TweetUrl = "SomeUrl"
            };
            var twitterAccount = new TwitterAccountApiDto()
            {
                UserName = "******", CurrentStatus = status
            };
            ICollection <TwitterAccountApiDto> twitterAccounts = new List <TwitterAccountApiDto>
            {
                twitterAccount
            };

            apiServiceMock
            .Setup(x => x.GetTwitterApiCallData(resourceUrl + favUsersIds, null))
            .ReturnsAsync(jsonResponse);

            jsonDeserializerMock
            .Setup(x => x.Deserialize <ICollection <TwitterAccountApiDto> >(jsonResponse))
            .Returns(twitterAccounts);

            var expectedResult = twitterAccounts
                                 .Select(u => u.CurrentStatus)
                                 .OrderByDescending(t => t.CreatedAt)
                                 .ToList();

            var twitterService = new TwitterService(apiServiceMock.Object, jsonDeserializerMock.Object);

            //Act && Assert
            Assert.ThrowsExceptionAsync <ArgumentException>(async() => await twitterService.GetTimeline(favUsersIds));
        }
Esempio n. 11
0
        public async Task ReturnEmptyCollectionOfTweets_WhenThereIsNotTwitterAccounts()
        {
            //Arrange
            var unitOfWorkMock      = new Mock <IUnitOfWork>();
            var mappingProviderMock = new Mock <IMappingProvider>();
            var userRepositoryMock  = new Mock <IUserRepository>();
            var twitterServiceMock  = new Mock <ITwitterService>();
            var userManagerMock     = MockUserManager <User>();

            var userId         = "30";
            var twitterAccount = new TwitterAccount()
            {
                Name = "Grigor", Id = "30"
            };
            var twitterAccountSecond = new TwitterAccount()
            {
                Name = "Grigor", Id = "40"
            };
            var twitterAccounts = new List <TwitterAccount>()
            {
                twitterAccount,
                twitterAccountSecond
            };

            var twitterAccountDto = new TwitterAccountDto()
            {
                Name = "Grigor", Id = "30"
            };
            var twitterAccountDtoSecond = new TwitterAccountDto()
            {
                Name = "Grigor", Id = "40"
            };
            var twitterAccountsDto = new List <TwitterAccountDto>();

            var tweet = new TweetApiDto()
            {
                Id = "1905"
            };
            var expectedResult = new List <TweetApiDto>();

            userRepositoryMock
            .Setup(x => x.GetAllFavoriteTwitterAccounts(userId))
            .ReturnsAsync(twitterAccounts);

            mappingProviderMock
            .Setup(x => x.ProjectTo <TwitterAccount, TwitterAccountDto>(twitterAccounts))
            .Returns(twitterAccountsDto);

            twitterServiceMock
            .Setup(x => x.GetTimeline("30,40"))
            .ReturnsAsync(expectedResult);

            var userService = new UserService(
                unitOfWorkMock.Object,
                mappingProviderMock.Object,
                userRepositoryMock.Object,
                twitterServiceMock.Object,
                userManagerMock.Object);

            //Act
            var actualResult = await userService.GetTimeline(userId);

            //Assert
            Assert.IsNotNull(actualResult);
        }
Esempio n. 12
0
        public void ThrowArgumentNullException_WhenTwitterServiceGetTimelineMethodReturnsNull()
        {
            //Arrange
            var unitOfWorkMock      = new Mock <IUnitOfWork>();
            var mappingProviderMock = new Mock <IMappingProvider>();
            var userRepositoryMock  = new Mock <IUserRepository>();
            var twitterServiceMock  = new Mock <ITwitterService>();
            var userManagerMock     = MockUserManager <User>();

            var userId         = "30";
            var twitterAccount = new TwitterAccount()
            {
                Name = "Grigor", Id = "30"
            };
            var twitterAccountSecond = new TwitterAccount()
            {
                Name = "Grigor", Id = "40"
            };
            var twitterAccounts = new List <TwitterAccount>()
            {
                twitterAccount,
                twitterAccountSecond
            };

            var twitterAccountDto = new TwitterAccountDto()
            {
                Name = "Grigor", Id = "30"
            };
            var twitterAccountDtoSecond = new TwitterAccountDto()
            {
                Name = "Grigor", Id = "40"
            };
            var twitterAccountsDto = new List <TwitterAccountDto>()
            {
                twitterAccountDto,
                twitterAccountDtoSecond
            };

            var tweet = new TweetApiDto()
            {
                Id = "1905"
            };
            var expectedResult = new List <TweetApiDto>()
            {
                tweet
            };

            userRepositoryMock
            .Setup(x => x.GetAllFavoriteTwitterAccounts(userId))
            .ReturnsAsync(twitterAccounts);

            mappingProviderMock
            .Setup(x => x.ProjectTo <TwitterAccount, TwitterAccountDto>(twitterAccounts))
            .Returns(twitterAccountsDto);

            twitterServiceMock
            .Setup(x => x.GetTimeline("30,40"))
            .ReturnsAsync((ICollection <TweetApiDto>)null);

            var userService = new UserService(
                unitOfWorkMock.Object,
                mappingProviderMock.Object,
                userRepositoryMock.Object,
                twitterServiceMock.Object,
                userManagerMock.Object);

            //Act
            Assert.ThrowsExceptionAsync <ArgumentNullException>(async() => await userService.GetTimeline(userId));
        }