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); }
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); }
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)); }
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)); }
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); }
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)); }