Exemplo n.º 1
0
        public Followee Create(FolloweeFromApiDto followee)
        {
            if (followee == null)
            {
                throw new ArgumentNullException("Followee cannot be null!");
            }

            Followee followeeToAdd = new Followee
            {
                FolloweeId = followee.FolloweeId,
                Bio        = followee.Bio,
                ScreenName = followee.ScreenName,
                Name       = followee.Name,
                FolloweeOriginallyCreatedOn = dateTimeParser.ParseFromTwitter(followee.FolloweeOriginallyCreatedOn),
                Url            = followee.Url,
                FavoritesCount = followee.FavoritesCount,
                FollowersCount = followee.FollowersCount,
                FriendsCount   = followee.FriendsCount,
                StatusesCount  = followee.StatusesCount
            };

            this.unitOfWork.Followees.Add(followeeToAdd);
            this.unitOfWork.SaveChanges();
            return(followeeToAdd);
        }
Exemplo n.º 2
0
        public void Invoke_Add_In_UserFolloweeRepo_When_Followee_Is_New()
        {
            //Arrange
            var fakeUnit             = new Mock <IUnitOfWork>();
            var fakeDateTimeProvider = Mock.Of <IDateTimeProvider>();
            var fakeFolloweeService  = new Mock <IFolloweeService>();
            var fakeFolloweeRepo     = new Mock <IGenericRepository <Followee> >();
            var fakeUserFolloweeRepo = new Mock <IGenericRepository <UserFollowee> >();
            var sut = new UserFolloweeService(fakeUnit.Object, fakeFolloweeService.Object, fakeDateTimeProvider);

            var followee = new Followee {
                FolloweeId = "456"
            };
            var userFolloweeToAdd = new FolloweeFromApiDto {
                FolloweeId = "789"
            };
            var followeeCollection = new List <Followee> {
                followee
            };

            fakeFolloweeRepo.Setup(r => r.AllAndDeleted).Returns(followeeCollection.AsQueryable());
            fakeUnit.Setup(u => u.Followees).Returns(fakeFolloweeRepo.Object);
            fakeUnit.Setup(u => u.UserFollowees).Returns(fakeUserFolloweeRepo.Object);
            fakeFolloweeService.Setup(s => s.Create(userFolloweeToAdd)).Returns(new Followee {
                FolloweeId = userFolloweeToAdd.FolloweeId
            });
            //Act
            sut.SaveUserFollowee("123", userFolloweeToAdd);

            //Assert
            fakeUserFolloweeRepo.Verify(v => v.Add(It.IsAny <UserFollowee>()), Times.Once());
        }
Exemplo n.º 3
0
        public IActionResult SearchResult(SearchViewModel model)
        {
            if (this.ModelState.IsValid)
            {
                var result = new FolloweeFromApiDto[0];

                try
                {
                    result = twitterApiCallService.GetTwitterUsersByScreenName(model.SearchInput);
                }
                catch (Exception e)
                {
                    return(this.View("NotFound"));
                }

                if (result.Length < 1)
                {
                    TempData["Not-Found-Message"] = $"No results found matching {model.SearchInput}";
                    return(RedirectToAction("Search"));
                }
                var vm = new SearchResultsViewModel {
                    SearchResults = result
                };

                return(this.View(vm));
            }

            return(this.View());
        }
Exemplo n.º 4
0
        public void Invoke_SaveChanges_When_Followee_Exists_But_Deleted()
        {
            //Arrange
            var fakeUnit             = new Mock <IUnitOfWork>();
            var dateTimeProvider     = new TestDateTimeProvider();
            var fakeFolloweeService  = new Mock <IFolloweeService>();
            var fakeFolloweeRepo     = new Mock <IGenericRepository <Followee> >();
            var fakeUserFolloweeRepo = new Mock <IGenericRepository <UserFollowee> >();
            var sut = new UserFolloweeService(fakeUnit.Object, fakeFolloweeService.Object, dateTimeProvider);

            var followee = new Followee {
                FolloweeId = "789", IsDeleted = true, DeletedOn = dateTimeProvider.DeletedOn
            };
            var userFolloweeToAdd = new FolloweeFromApiDto {
                FolloweeId = "789"
            };
            var followeeCollection = new List <Followee> {
                followee
            };

            fakeFolloweeRepo.Setup(r => r.AllAndDeleted).Returns(followeeCollection.AsQueryable());
            fakeUnit.Setup(u => u.Followees).Returns(fakeFolloweeRepo.Object);
            fakeUnit.Setup(u => u.UserFollowees).Returns(fakeUserFolloweeRepo.Object);
            fakeUnit.Setup(s => s.SaveChanges()).Verifiable();

            //Act
            sut.SaveUserFollowee("456", userFolloweeToAdd);

            //Assert
            fakeUnit.Verify(v => v.SaveChanges(), Times.Exactly(2)); // once for saving the changes of Deleted state and once for the UserFollowee
        }
Exemplo n.º 5
0
        public void Invoke_UserFolloweeExistsInDeleted_In_Same_Method_When_Followee_Exists()
        {
            //Arrange
            var fakeUnit            = new Mock <IUnitOfWork>();
            var dateTimeProvider    = new TestDateTimeProvider();
            var fakeFolloweeService = new Mock <IFolloweeService>();
            var fakeFolloweeRepo    = new Mock <IGenericRepository <Followee> >();
            var sut = new FakeUserFolloweeService(fakeUnit.Object, fakeFolloweeService.Object, dateTimeProvider);

            var followee = new Followee {
                FolloweeId = "789", IsDeleted = false
            };
            var userFolloweeToAdd = new FolloweeFromApiDto {
                FolloweeId = "789"
            };
            var followeeCollection = new List <Followee> {
                followee
            };

            fakeFolloweeRepo.Setup(r => r.AllAndDeleted).Returns(followeeCollection.AsQueryable());
            fakeUnit.Setup(u => u.Followees).Returns(fakeFolloweeRepo.Object);

            //Act && Assert
            Assert.ThrowsException <FakeTestException>(() => sut.SaveUserFollowee("456", userFolloweeToAdd));
        }
Exemplo n.º 6
0
        public void Change_DeletedOn_When_Followee_Exist_But_Deleted()
        {
            //Arrange
            var fakeUnit             = new Mock <IUnitOfWork>();
            var dateTimeProvider     = new TestDateTimeProvider();
            var fakeFolloweeService  = new Mock <IFolloweeService>();
            var fakeFolloweeRepo     = new Mock <IGenericRepository <Followee> >();
            var fakeUserFolloweeRepo = new Mock <IGenericRepository <UserFollowee> >();
            var sut = new UserFolloweeService(fakeUnit.Object, fakeFolloweeService.Object, dateTimeProvider);

            var followee = new Followee {
                FolloweeId = "789", IsDeleted = true, DeletedOn = dateTimeProvider.DeletedOn
            };
            var userFolloweeToAdd = new FolloweeFromApiDto {
                FolloweeId = "789"
            };
            var followeeCollection = new List <Followee> {
                followee
            };

            fakeFolloweeRepo.Setup(r => r.AllAndDeleted).Returns(followeeCollection.AsQueryable());
            fakeUnit.Setup(u => u.Followees).Returns(fakeFolloweeRepo.Object);
            fakeUnit.Setup(u => u.UserFollowees).Returns(fakeUserFolloweeRepo.Object);

            //Act
            sut.SaveUserFollowee("456", userFolloweeToAdd);

            //Assert
            Assert.AreEqual(dateTimeProvider.Now, followee.ModifiedOn.Value);
        }
        public void SaveUserFollowee(string userId, FolloweeFromApiDto followee)
        {
            if (followee == null)
            {
                throw new ArgumentNullException(nameof(followee));
            }

            if (string.IsNullOrWhiteSpace(userId))
            {
                throw new ArgumentNullException(nameof(userId));
            }

            var followeeToSaveToUser = this.unitOfWork.Followees.AllAndDeleted.FirstOrDefault(w => w.FolloweeId == followee.FolloweeId);

            if (followeeToSaveToUser == null) // if it's a new Followee, it's a new UserFollowee
            {
                followeeToSaveToUser = this.followeeService.Create(followee);
                var userFolloweeToadd = new UserFollowee {
                    UserId = userId, FolloweeId = followeeToSaveToUser.FolloweeId
                };

                this.unitOfWork.UserFollowees.Add(userFolloweeToadd);
                this.unitOfWork.SaveChanges();
            }
            else
            {
                if (followeeToSaveToUser.IsDeleted)
                {
                    followeeToSaveToUser.IsDeleted  = false;
                    followeeToSaveToUser.DeletedOn  = null;
                    followeeToSaveToUser.ModifiedOn = this.dateTimeProvider.Now;
                    this.unitOfWork.SaveChanges();
                }

                if (!this.UserFolloweeExistsInDeleted(userId, followee.FolloweeId))
                {
                    var userFolloweeToadd = new UserFollowee {
                        UserId = userId, FolloweeId = followee.FolloweeId
                    };

                    this.unitOfWork.UserFollowees.Add(userFolloweeToadd);
                    this.unitOfWork.SaveChanges();
                }
                else
                {
                    var userFolloweeToBeReadded =
                        this.unitOfWork.UserFollowees.AllAndDeleted.FirstOrDefault(a =>
                                                                                   a.FolloweeId == followee.FolloweeId && a.UserId == userId);

                    if (userFolloweeToBeReadded != null)
                    {
                        userFolloweeToBeReadded.IsDeleted  = false;
                        userFolloweeToBeReadded.DeletedOn  = null;
                        userFolloweeToBeReadded.ModifiedOn = this.dateTimeProvider.Now;
                        this.unitOfWork.SaveChanges();
                    }
                }
            }
        }
        public void Throw_Argument_Null_Exception_When_UserId_Is_Null()
        {
            //Arrange
            var fakeUnit             = Mock.Of <IUnitOfWork>();
            var fakeDateTimeProvider = Mock.Of <IDateTimeProvider>();
            var fakeFolloweeService  = Mock.Of <IFolloweeService>();
            var followee             = new FolloweeFromApiDto();
            var sut = new UserFolloweeService(fakeUnit, fakeFolloweeService, fakeDateTimeProvider);

            //Act & Assert
            Assert.ThrowsException <ArgumentNullException>(() => sut.DeleteUserFollowee(null, "123"));
        }
Exemplo n.º 9
0
        public void Invokes_SaveChanges_When_Followee_Is_Created()
        {
            // Arrange
            var mapperMock                = new Mock <IMappingProvider>();
            var unitOfWorkMock            = new Mock <IUnitOfWork>();
            var repoMock                  = new Mock <IGenericRepository <Followee> >();
            var twitterApiCallServiceMock = new Mock <ITwitterApiCallService>();
            var dateTimeParserMock        = new Mock <IDateTimeParser>();

            var followeeFromApi = new FolloweeFromApiDto()
            {
                FolloweeId     = "1",
                Name           = "FolloweeName",
                Url            = "SomeUrl",
                FollowersCount = 10,
                FriendsCount   = 5,
                FolloweeOriginallyCreatedOn = "29/04/2018",
                FavoritesCount = 5,
                StatusesCount  = 100
            };

            var followee = new Followee()
            {
                FolloweeId = followeeFromApi.FolloweeId,
                Bio        = followeeFromApi.Bio,
                ScreenName = followeeFromApi.ScreenName,
                Name       = followeeFromApi.Name,
                FolloweeOriginallyCreatedOn = DateTime.Now,
                Url            = followeeFromApi.Url,
                FavoritesCount = followeeFromApi.FavoritesCount,
                FollowersCount = followeeFromApi.FollowersCount,
                FriendsCount   = followeeFromApi.FriendsCount,
                StatusesCount  = followeeFromApi.StatusesCount
            };

            var followeeCollection = new List <Followee> {
                followee
            };

            repoMock.Setup(r => r.AllAndDeleted).Returns(followeeCollection.AsQueryable());
            unitOfWorkMock.Setup(u => u.Followees).Returns(repoMock.Object);
            unitOfWorkMock.Setup(u => u.Followees.Add(It.IsAny <Followee>())).Verifiable();

            var sut = new FolloweeService(unitOfWorkMock.Object, mapperMock.Object,
                                          twitterApiCallServiceMock.Object, dateTimeParserMock.Object);

            //Act
            var followeeToAdd = sut.Create(followeeFromApi);

            //Assert
            unitOfWorkMock.Verify(v => v.SaveChanges(), Times.Once);
        }
Exemplo n.º 10
0
        public void Change_Deleted_State_When_Followee_Exists_UserFollowee_Is_Deleted()
        {
            //Arrange
            var fakeUnit             = new Mock <IUnitOfWork>();
            var dateTimeProvider     = new TestDateTimeProvider();
            var fakeFolloweeService  = new Mock <IFolloweeService>();
            var fakeFolloweeRepo     = new Mock <IGenericRepository <Followee> >();
            var fakeUserFolloweeRepo = new Mock <IGenericRepository <UserFollowee> >();
            var sut = new UserFolloweeService(fakeUnit.Object, fakeFolloweeService.Object, dateTimeProvider);

            var followee = new Followee {
                FolloweeId = "789", IsDeleted = false
            };
            var userFolloweeToAdd = new FolloweeFromApiDto {
                FolloweeId = "789"
            };
            var followeeCollection = new List <Followee> {
                followee
            };
            var userFollowee = new UserFollowee {
                UserId = "456", FolloweeId = userFolloweeToAdd.FolloweeId, IsDeleted = true, DeletedOn = dateTimeProvider.DeletedOn
            };
            var userFolloweeCollection = new List <UserFollowee> {
                userFollowee
            };

            fakeUserFolloweeRepo.Setup(r => r.AllAndDeleted).Returns(userFolloweeCollection.AsQueryable());
            fakeFolloweeRepo.Setup(r => r.AllAndDeleted).Returns(followeeCollection.AsQueryable());
            fakeUnit.Setup(u => u.Followees).Returns(fakeFolloweeRepo.Object);
            fakeUnit.Setup(u => u.UserFollowees).Returns(fakeUserFolloweeRepo.Object);

            //Act
            sut.SaveUserFollowee("456", userFolloweeToAdd);

            //Assert
            Assert.IsFalse(userFollowee.IsDeleted);
            Assert.IsNull(userFollowee.DeletedOn);
        }
Exemplo n.º 11
0
        public IActionResult FolloweeDetails(string id)
        {
            FolloweeFromApiDto followee = new FolloweeFromApiDto();

            try
            {
                followee = this.twitterApiCallService.GetTwitterUserDetailsById(id);
            }
            catch (Exception e)
            {
                return(this.View("NotFound"));
            }


            if (followee != null)
            {
                return(this.View(followee));
            }
            else
            {
                return(this.View("NotFound"));
            }
        }
Exemplo n.º 12
0
        public void Invoke_SaveChanges_When_Followee_Exists_UserFollowee_Is_New()
        {
            //Arrange
            var fakeUnit             = new Mock <IUnitOfWork>();
            var fakeDateTimeProvider = Mock.Of <IDateTimeProvider>();
            var fakeFolloweeService  = new Mock <IFolloweeService>();
            var fakeFolloweeRepo     = new Mock <IGenericRepository <Followee> >();
            var fakeUserFolloweeRepo = new Mock <IGenericRepository <UserFollowee> >();
            var sut = new UserFolloweeService(fakeUnit.Object, fakeFolloweeService.Object, fakeDateTimeProvider);

            var followee = new Followee {
                FolloweeId = "789", IsDeleted = false
            };
            var userFolloweeToAdd = new FolloweeFromApiDto {
                FolloweeId = "789"
            };
            var followeeCollection = new List <Followee> {
                followee
            };
            var userFollowee = new UserFollowee {
                UserId = "456", FolloweeId = "444"
            };
            var userFolloweeCollection = new List <UserFollowee> {
                userFollowee
            };

            fakeUserFolloweeRepo.Setup(r => r.AllAndDeleted).Returns(userFolloweeCollection.AsQueryable());
            fakeFolloweeRepo.Setup(r => r.AllAndDeleted).Returns(followeeCollection.AsQueryable());
            fakeUnit.Setup(u => u.Followees).Returns(fakeFolloweeRepo.Object);
            fakeUnit.Setup(u => u.UserFollowees).Returns(fakeUserFolloweeRepo.Object);

            //Act
            sut.SaveUserFollowee("456", userFolloweeToAdd);

            //Assert
            fakeUnit.Verify(v => v.SaveChanges(), Times.Once);
        }