public void Invoke_SaveChanges_When_Tweet_Exists_But_Deleted()
        {
            //Arrange
            var fakeUnit         = new Mock <IUnitOfWork>();
            var dateTimeProvider = new TestDateTimeProvider();
            var fakeTweetService = new Mock <ITweetService>();
            var sut = new UserTweetService(fakeUnit.Object, fakeTweetService.Object, dateTimeProvider);

            var fakeUserTweetRepo = new Mock <IGenericRepository <UserTweet> >();
            var fakeTweetRepo     = new Mock <IGenericRepository <Tweet> >();
            var fakeTweetTagRepo  = new Mock <IGenericRepository <TweetTag> >();

            var tweet = new Tweet {
                TweetId = "456", IsDeleted = true
            };
            var tweetCollection = new List <Tweet> {
                tweet
            };
            var tweetTagCollection = new List <TweetTag>();

            fakeUnit.Setup(u => u.UserTweets).Returns(fakeUserTweetRepo.Object);
            fakeUnit.Setup(u => u.TweetTags).Returns(fakeTweetTagRepo.Object);
            fakeTweetRepo.Setup(r => r.AllAndDeleted).Returns(tweetCollection.AsQueryable());
            fakeTweetTagRepo.Setup(r => r.AllAndDeleted).Returns(tweetTagCollection.AsQueryable());
            fakeUnit.Setup(u => u.Tweets).Returns(fakeTweetRepo.Object);
            fakeUnit.Setup(s => s.SaveChanges()).Verifiable();

            //Act
            sut.SaveSingleTweetToUserByTweetId("123", "456");

            //Assert
            fakeUnit.Verify(v => v.SaveChanges(), Times.Exactly(2)); //Once for the Modified/Deleted and twice for the UserTweet
        }
        public void Change_DeletedOn_When_Tweet_Exist_But_Deleted()
        {
            //Arrange
            var fakeUnit         = new Mock <IUnitOfWork>();
            var dateTimeProvider = new TestDateTimeProvider();
            var fakeTweetService = new Mock <ITweetService>();
            var sut = new UserTweetService(fakeUnit.Object, fakeTweetService.Object, dateTimeProvider);

            var fakeUserTweetRepo = new Mock <IGenericRepository <UserTweet> >();
            var fakeTweetRepo     = new Mock <IGenericRepository <Tweet> >();
            var fakeTweetTagRepo  = new Mock <IGenericRepository <TweetTag> >();

            var tweet = new Tweet {
                TweetId = "456", IsDeleted = true
            };
            var tweetCollection = new List <Tweet> {
                tweet
            };
            var tweetTagCollection = new List <TweetTag>();

            fakeUnit.Setup(u => u.UserTweets).Returns(fakeUserTweetRepo.Object);
            fakeUnit.Setup(u => u.TweetTags).Returns(fakeTweetTagRepo.Object);
            fakeTweetRepo.Setup(r => r.AllAndDeleted).Returns(tweetCollection.AsQueryable());
            fakeTweetTagRepo.Setup(r => r.AllAndDeleted).Returns(tweetTagCollection.AsQueryable());
            fakeUnit.Setup(u => u.Tweets).Returns(fakeTweetRepo.Object);

            //Act
            sut.SaveSingleTweetToUserByTweetId("123", "456");

            //Assert
            Assert.AreEqual(dateTimeProvider.Now, tweet.ModifiedOn.Value);
        }
        public void Meters_Are_Checked_In_Desired_Time()
        {
            //Sets current time to 2016/05/05 21:34:00
            var dateTimeMock = new TestDateTimeProvider(new DateTime(2016, 5, 5, 21, 34, 00));
            var meterLoader  = new Mock <IAmActiveMetersLoader>();
            var sut          = new SystemTimeDependendProductionCode(meterLoader.Object);

            sut.DoPeriodicCheckIfNeeded();

            //System check should occur after 22:00, so at 21:34 there should
            //be no invocations of ReloadAllActiveMeters
            meterLoader.Verify(x => x.ReloadAllActiveMeters(), Times.Exactly(0));

            //We're moving time forward, to the threshold hour: 22:00
            dateTimeMock.Now = new DateTime(2016, 5, 5, 22, 00, 00);
            sut.DoPeriodicCheckIfNeeded();
            //Still, no invocation should occur
            meterLoader.Verify(x => x.ReloadAllActiveMeters(), Times.Exactly(0));

            //Minute after 22:00
            dateTimeMock.Now = new DateTime(2016, 5, 5, 22, 01, 00);
            sut.DoPeriodicCheckIfNeeded();
            //Method should be called
            meterLoader.Verify(x => x.ReloadAllActiveMeters(), Times.Exactly(1));
        }
예제 #4
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);
        }
예제 #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));
        }
예제 #6
0
        public void Return_Correct_Values_When_UserTweets_Exist()
        {
            //Arrange
            var timeProvider     = new TestDateTimeProvider();
            var fakeUnit         = new Mock <IUnitOfWork>();
            var fakeTweetService = Mock.Of <ITweetService>();
            var sut = new UserTweetService(fakeUnit.Object, fakeTweetService, timeProvider);
            var fakeUserTweetRepo = new Mock <IGenericRepository <UserTweet> >();

            var testTweet1 = new Tweet {
                Text = "test1", TweetId = "10", OriginalTweetCreatedOn = timeProvider.OriginallyCreatedOn, FolloweeId = "666"
            };
            var testTweet2 = new Tweet {
                Text = "test2", TweetId = "11", OriginalTweetCreatedOn = timeProvider.OriginallyCreatedOn, FolloweeId = "666"
            };
            var testTweet3 = new Tweet {
                Text = "test3", TweetId = "12", OriginalTweetCreatedOn = timeProvider.OriginallyCreatedOn, FolloweeId = "789"
            };

            var testUserTweet1 = new UserTweet {
                UserId = "100", Tweet = testTweet1, TweetId = testTweet1.TweetId
            };
            var testUserTweet2 = new UserTweet {
                UserId = "100", Tweet = testTweet2, TweetId = testTweet2.TweetId
            };
            var testUserTweet3 = new UserTweet {
                UserId = "100", Tweet = testTweet3, TweetId = testTweet3.TweetId
            };

            var userTweetCollection = new List <UserTweet> {
                testUserTweet1, testUserTweet2, testUserTweet3
            };

            fakeUserTweetRepo.Setup(r => r.All).Returns(userTweetCollection.AsQueryable());
            fakeUnit.Setup(u => u.UserTweets).Returns(fakeUserTweetRepo.Object);
            var expectedTweet1 = new FakeTweetDto
            {
                TweetId = testTweet1.TweetId,
                OriginalTweetCreatedOn = testTweet1.OriginalTweetCreatedOn,
                Text           = testTweet1.Text,
                UsersMentioned = testTweet1.UsersMentioned
            };

            var expectedTweet2 = new FakeTweetDto
            {
                TweetId = testTweet2.TweetId,
                OriginalTweetCreatedOn = testTweet2.OriginalTweetCreatedOn,
                Text           = testTweet2.Text,
                UsersMentioned = testTweet2.UsersMentioned
            };
            var expectedTweetDtos = new List <FakeTweetDto> {
                expectedTweet1, expectedTweet2
            };

            //Act
            var actualTweetDtos = sut.GetTweetsByUserIdAndFolloweeId("100", "666");

            //Assert
            CollectionAssert.AreEqual(expectedTweetDtos, actualTweetDtos.ToList());
        }
예제 #7
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
        }
예제 #8
0
        public void Change_DeletedOn_When_Tag_Exist_But_Deleted()
        {
            //Arrange
            var fakeUnit             = new Mock <IUnitOfWork>();
            var fakeDateTimeProvider = new TestDateTimeProvider();
            var sut         = new TagService(fakeUnit.Object, fakeDateTimeProvider);
            var fakeTagRepo = new Mock <IGenericRepository <Tag> >();


            var tag = new Tag {
                Text = "Pesho", IsDeleted = true, Id = 12, DeletedOn = fakeDateTimeProvider.DeletedOn
            };

            var tagsCollection = new List <Tag> {
                tag
            };

            fakeTagRepo.Setup(r => r.AllAndDeleted).Returns(tagsCollection.AsQueryable());
            fakeUnit.Setup(u => u.Tags).Returns(fakeTagRepo.Object);

            //Act
            var tagFound = sut.FindOrCreate("Pesho");

            //Assert
            Assert.AreEqual(fakeDateTimeProvider.Now, tagFound.ModifiedOn.Value);
        }
        public void Return_False_When_No_User_Saved_This_Tweet()
        {
            //Arrange
            var fakeUnit         = new Mock <IUnitOfWork>();
            var dateTimeProvider = new TestDateTimeProvider();
            var fakeTweetService = new Mock <ITweetService>();
            var sut = new UserTweetService(fakeUnit.Object, fakeTweetService.Object, dateTimeProvider);

            var fakeUserTweetRepo = new Mock <IGenericRepository <UserTweet> >();

            var userTweet = new UserTweet {
                UserId = "123", TweetId = "456"
            };
            var userTweetCollection = new List <UserTweet> {
                userTweet
            };

            fakeUserTweetRepo.Setup(s => s.All).Returns(userTweetCollection.AsQueryable());
            fakeUnit.Setup(u => u.UserTweets).Returns(fakeUserTweetRepo.Object);

            //Act
            var expectedResult = sut.AnyUserSavedThisTweetById("7777");

            //Assert
            Assert.IsFalse(expectedResult);
        }
예제 #10
0
        public void TestMongoExtractionMessageHeaderDoc_FromMessageHeader()
        {
            Guid       guid             = Guid.NewGuid();
            Guid       p1               = Guid.NewGuid();
            Guid       p2               = Guid.NewGuid();
            const long unixTimeNow      = 1234;
            var        dateTimeProvider = new TestDateTimeProvider();

            var header = new MessageHeader
            {
                MessageGuid            = guid,
                ProducerExecutableName = "TestFromMessageHeader",
                ProducerProcessID      = 1234,
                Parents = new[] { p1, p2 },
                OriginalPublishTimestamp = unixTimeNow,
            };

            MongoExtractionMessageHeaderDoc doc = MongoExtractionMessageHeaderDoc.FromMessageHeader(guid, header, dateTimeProvider);

            var expected = new MongoExtractionMessageHeaderDoc(
                guid,
                guid,
                "TestFromMessageHeader",
                1234,
                DateTime.UnixEpoch + TimeSpan.FromSeconds(unixTimeNow),
                $"{p1}->{p2}",
                dateTimeProvider.UtcNow()
                );

            Assert.AreEqual(expected, doc);
        }
        public void Invoke_SaveChanges_In_UnitOfWork_When_Tweet_Exist()
        {
            //Arrange
            var fakeUnit         = new Mock <IUnitOfWork>();
            var dateTimeProvider = new TestDateTimeProvider();
            var fakeTweetService = new Mock <ITweetService>();
            var sut = new UserTweetService(fakeUnit.Object, fakeTweetService.Object, dateTimeProvider);

            var fakeUserTweetRepo = new Mock <IGenericRepository <UserTweet> >();
            var fakeTweetRepo     = new Mock <IGenericRepository <Tweet> >();

            var tweet = new Tweet {
                TweetId = "456"
            };
            var tweetCollection = new List <Tweet> {
                tweet
            };

            fakeUnit.Setup(u => u.UserTweets).Returns(fakeUserTweetRepo.Object);
            fakeTweetRepo.Setup(r => r.AllAndDeleted).Returns(tweetCollection.AsQueryable());
            fakeUnit.Setup(u => u.Tweets).Returns(fakeTweetRepo.Object);
            fakeUnit.Setup(u => u.SaveChanges()).Verifiable();

            //Act
            sut.SaveSingleTweetToUserByTweetId("123", "456");

            //Assert
            fakeUnit.Verify(v => v.SaveChanges(), Times.Once);
        }
예제 #12
0
        public void Open_DoorWillBeClosed()
        {
            var timeProvider = new TestDateTimeProvider();
            var door         = new Door(1, timeProvider);

            door.Open();

            timeProvider.CurreTime = timeProvider.CurreTime.AddSeconds(1);

            Assert.AreEqual(false, door.IsOpened);
        }
예제 #13
0
        public void Open_DoorWillOpening()
        {
            var timeProvider = new TestDateTimeProvider();
            var door         = new Door(1, timeProvider);

            door.Open();

            timeProvider.CurreTime = timeProvider.CurreTime.AddMilliseconds(0.5f);

            Assert.AreEqual(true, door.IsOpened);
        }
        public void Throw_Argument_Null_Exception_When_TweetId_Is_Null()
        {
            //Arrange
            var fakeUnit         = new Mock <IUnitOfWork>();
            var dateTimeProvider = new TestDateTimeProvider();
            var fakeTweetService = new Mock <ITweetService>();
            var sut = new UserTweetService(fakeUnit.Object, fakeTweetService.Object, dateTimeProvider);

            //Act & Assert
            Assert.ThrowsException <ArgumentNullException>(() => sut.AnyUserSavedThisTweetById(null));
        }
        public void Change_Deleted_State_Of_Tag_When_Tweet_Exist_But_Deleted()
        {
            //Arrange
            var fakeUnit         = new Mock <IUnitOfWork>();
            var dateTimeProvider = new TestDateTimeProvider();
            var fakeTweetService = new Mock <ITweetService>();
            var sut = new UserTweetService(fakeUnit.Object, fakeTweetService.Object, dateTimeProvider);

            var fakeUserTweetRepo = new Mock <IGenericRepository <UserTweet> >();
            var fakeTweetRepo     = new Mock <IGenericRepository <Tweet> >();
            var fakeTweetTagRepo  = new Mock <IGenericRepository <TweetTag> >();

            var tweet = new Tweet {
                TweetId = "456", IsDeleted = true, DeletedOn = dateTimeProvider.DeletedOn
            };
            var tweetCollection = new List <Tweet> {
                tweet
            };
            var testTag1 = new Tag {
                Id = 1, IsDeleted = true, DeletedOn = dateTimeProvider.DeletedOn
            };
            var testTag2 = new Tag {
                Id = 2, IsDeleted = true, DeletedOn = dateTimeProvider.DeletedOn
            };
            var testTweetTag1 = new TweetTag {
                TweetId = tweet.TweetId, TagId = testTag1.Id, Tag = testTag1, IsDeleted = true, DeletedOn = dateTimeProvider.DeletedOn
            };
            var testTweetTag2 = new TweetTag {
                TweetId = tweet.TweetId, TagId = testTag2.Id, Tag = testTag2, IsDeleted = true, DeletedOn = dateTimeProvider.DeletedOn
            };
            var tweetTagCollection = new List <TweetTag> {
                testTweetTag1, testTweetTag2
            };

            fakeUnit.Setup(u => u.UserTweets).Returns(fakeUserTweetRepo.Object);
            fakeUnit.Setup(u => u.TweetTags).Returns(fakeTweetTagRepo.Object);
            fakeTweetRepo.Setup(r => r.AllAndDeleted).Returns(tweetCollection.AsQueryable());
            fakeTweetTagRepo.Setup(r => r.AllAndDeleted).Returns(tweetTagCollection.AsQueryable());
            fakeUnit.Setup(u => u.Tweets).Returns(fakeTweetRepo.Object);

            //Act
            sut.SaveSingleTweetToUserByTweetId("123", "456");

            //Assert
            Assert.IsFalse(testTag1.IsDeleted);
            Assert.IsNull(testTag1.DeletedOn);
            Assert.IsFalse(testTag2.IsDeleted);
            Assert.IsNull(testTag2.DeletedOn);
        }
예제 #16
0
        public void Invoke_AddTweetTagByTweetIdTagId_In_TweetTagService_When_Provided_Valid_Parameters_Tags_Are_2()
        {
            //Arrange
            var unitOfWorkMock            = new Mock <IUnitOfWork>();
            var mapperMock                = new Mock <IMappingProvider>();
            var twitterApiCallServiceMock = new Mock <ITwitterApiCallService>();
            var tweetTagServiceMock       = new Mock <ITweetTagService>();
            var tagServiceMock            = new Mock <ITagService>();
            var dateTimeParserMock        = new Mock <IDateTimeParser>();
            var dateTimeProvider          = new TestDateTimeProvider();
            var dateOfTweet               = dateTimeProvider.Now;
            var sut = new TweetService(mapperMock.Object, unitOfWorkMock.Object,
                                       twitterApiCallServiceMock.Object, tweetTagServiceMock.Object,
                                       tagServiceMock.Object, dateTimeParserMock.Object);

            var fakeTweetsRepo  = new Mock <IGenericRepository <Tweet> >();
            var tweetCollection = new List <Tweet>();

            fakeTweetsRepo.Setup(r => r.All).Returns(tweetCollection.AsQueryable());
            unitOfWorkMock.Setup(u => u.Tweets).Returns(fakeTweetsRepo.Object);

            dateTimeParserMock.Setup(s => s.ParseFromTwitter(It.IsAny <string>())).Returns(dateOfTweet);
            twitterApiCallServiceMock.Setup(s => s.GetTweetByTweetId(It.IsAny <string>()))
            .Returns(new TweetFromApiDto {
                Followee = new FolloweeFromApiDto {
                    FolloweeId = "444"
                }, TweetId = "666", Text = "Pesho", Entities = new EntitiesDto {
                    UserMentions = new UserMentionDto[0], Hashtags = new HashtagDto[] { new HashtagDto {
                                                                                            Hashtag = "bahur"
                                                                                        }, new HashtagDto {
                                                                                            Hashtag = "gosho"
                                                                                        } }
                }
            });

            tagServiceMock.SetupSequence(s => s.FindOrCreate(It.IsAny <string>()))
            .Returns(new Tag {
                Id = 1, Text = "bahur"
            }).Returns(new Tag {
                Id = 2, Text = "gosho"
            });

            //Act
            var tweet = sut.CreateFromApiById("123");

            //Assert
            tweetTagServiceMock.Verify(v => v.AddTweetTagByTweetIdTagId(It.IsAny <int>(), It.IsAny <string>()), Times.Exactly(2));
        }
        public void Invoke_UserTweetExistsInDeleted_In_Same_Method_When_Provided_Correct_Params_Tweet_Exists_Not_Deleted()
        {
            //Arrange
            var fakeUnit         = new Mock <IUnitOfWork>();
            var dateTimeProvider = new TestDateTimeProvider();
            var fakeTweetService = new Mock <ITweetService>();
            var sut = new FakeUserTweetService(fakeUnit.Object, fakeTweetService.Object, dateTimeProvider);

            var fakeTweetRepo = new Mock <IGenericRepository <Tweet> >();
            var tweet         = new Tweet {
                TweetId = "456"
            };
            var tweetCollection = new List <Tweet> {
                tweet
            };

            fakeTweetRepo.Setup(r => r.AllAndDeleted).Returns(tweetCollection.AsQueryable());
            fakeUnit.Setup(u => u.Tweets).Returns(fakeTweetRepo.Object);

            //Act && Assert
            Assert.ThrowsException <FakeTestException>(() => sut.SaveSingleTweetToUserByTweetId("123", "456"));
        }
예제 #18
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);
        }
예제 #19
0
        public void Invoke_SaveChanges_In_UnitOfWork_When_Provided_Valid_Parameters()
        {
            //Arrange
            var unitOfWorkMock            = new Mock <IUnitOfWork>();
            var mapperMock                = new Mock <IMappingProvider>();
            var twitterApiCallServiceMock = new Mock <ITwitterApiCallService>();
            var tweetTagServiceMock       = new Mock <ITweetTagService>();
            var tagServiceMock            = new Mock <ITagService>();
            var dateTimeParserMock        = new Mock <IDateTimeParser>();
            var dateTimeProvider          = new TestDateTimeProvider();
            var dateOfTweet               = dateTimeProvider.Now;
            var sut = new TweetService(mapperMock.Object, unitOfWorkMock.Object,
                                       twitterApiCallServiceMock.Object, tweetTagServiceMock.Object,
                                       tagServiceMock.Object, dateTimeParserMock.Object);

            var fakeTweetsRepo  = new Mock <IGenericRepository <Tweet> >();
            var tweetCollection = new List <Tweet>();

            fakeTweetsRepo.Setup(r => r.All).Returns(tweetCollection.AsQueryable());
            unitOfWorkMock.Setup(u => u.Tweets).Returns(fakeTweetsRepo.Object);

            dateTimeParserMock.Setup(s => s.ParseFromTwitter(It.IsAny <string>())).Returns(dateOfTweet);
            twitterApiCallServiceMock.Setup(s => s.GetTweetByTweetId(It.IsAny <string>()))
            .Returns(new TweetFromApiDto {
                Followee = new FolloweeFromApiDto {
                    FolloweeId = "444"
                }, TweetId = "666", Text = "Pesho", Entities = new EntitiesDto {
                    UserMentions = new UserMentionDto[0], Hashtags = new HashtagDto[0]
                }
            });
            unitOfWorkMock.Setup(s => s.SaveChanges()).Verifiable();
            //Act
            var tweet = sut.CreateFromApiById("123");

            //Assert
            unitOfWorkMock.Verify(v => v.SaveChanges(), Times.Once);
        }
예제 #20
0
        public static void AssemblyInitialize(TestContext context)
        {
            var sc = new ServiceCollection();

            sc.AddScoped <IDateTimeProvider>(sp => DateTimeProvider = new TestDateTimeProvider());
            sc.AddLogging(o => o.AddConsole());

            sc.AddBehaviours();
            sc.AddScoped <IOnSaveHandler>(sp => OnSaveHandler = new TestOnSaveHandler());
            sc.AddDbContext <TestDbContext>(cfg =>
            {
                cfg.UseSqlite("Data Source=\"test.db\"");
                cfg.UseLoggerFactory(LoggerFactory.Create(o => o.AddConsole()));
                cfg.EnableSensitiveDataLogging();
            });

            RootServiceProvider = sc.BuildServiceProvider();

            using (var ctx = RootServiceProvider.GetService <TestDbContext>())
            {
                ctx.Database.EnsureDeleted();
                ctx.Database.EnsureCreated();
            }
        }
예제 #21
0
 public Test()
 {
     messageStorage       = new MessageStorage();
     testDateTimeProvider = new TestDateTimeProvider(new DateTime(2000, 1, 1));
     controller           = new MessageController(messageStorage, testDateTimeProvider);
 }
        public void Return_Correct_Value_When_Provided_Valid_Id()
        {
            //Arrange
            var fakeUnitOfWork    = new Mock <IUnitOfWork>();
            var fakeUserTweetRepo = new Mock <IGenericRepository <UserTweet> >();
            var fakeTimeProvider  = new TestDateTimeProvider();

            var testUser1 = new User {
                UserName = "******", Id = "TestId1"
            };
            var testUser2 = new User {
                UserName = "******", Id = "TestId2"
            };

            var testFollowee1 = new Followee {
                ScreenName = "TestScreenName1"
            };
            var testFollowee2 = new Followee {
                ScreenName = "TestScreenName1"
            };

            var testTweet1 = new Tweet {
                Text = "testTweet1", OriginalTweetCreatedOn = fakeTimeProvider.CreatedOn, TweetId = "testTweet1Id", Followee = testFollowee1
            };
            var testTweet2 = new Tweet {
                Text = "testTweet2", OriginalTweetCreatedOn = fakeTimeProvider.CreatedOn, TweetId = "testTweet2Id", Followee = testFollowee2
            };
            var testTweet3 = new Tweet {
                Text = "testTweet3", OriginalTweetCreatedOn = fakeTimeProvider.CreatedOn, TweetId = "testTweet3Id", Followee = testFollowee1
            };

            var testUserTweet1 = new UserTweet {
                Tweet = testTweet1, TweetId = testTweet1.TweetId, UserId = testUser1.Id, User = testUser1, IsDeleted = true, DeletedOn = fakeTimeProvider.DeletedOn
            };
            var testUserTweet2 = new UserTweet {
                Tweet = testTweet2, TweetId = testTweet2.TweetId, UserId = testUser1.Id, User = testUser1, IsDeleted = false
            };
            var testUserTweet3 = new UserTweet {
                Tweet = testTweet3, TweetId = testTweet3.TweetId, UserId = testUser2.Id, User = testUser2
            };

            var fakeUserTweetCollection = new List <UserTweet> {
                testUserTweet1, testUserTweet2, testUserTweet3
            };

            fakeUserTweetRepo.Setup(r => r.AllAndDeleted).Returns(fakeUserTweetCollection.AsQueryable());
            fakeUnitOfWork.Setup(u => u.UserTweets).Returns(fakeUserTweetRepo.Object);

            var deletedModel = new FakeDeletedTweetsModel
            {
                TweetDeletedOn         = testUserTweet1.DeletedOn.Value,
                Text                   = testUserTweet1.Tweet.Text,
                OriginalTweetCreatedOn = testUserTweet1.Tweet.OriginalTweetCreatedOn,
                AuthorScreenName       = testUserTweet1.Tweet.Followee.ScreenName
            };

            var expectedResult = new List <FakeDeletedTweetsModel> {
                deletedModel
            };
            var sut = new TweetStatisticsService(fakeUnitOfWork.Object);

            //Act
            var actualResult = sut.GetDeletedTweetsyUserId("TestId1").ToList();

            //Assert
            CollectionAssert.AreEqual(expectedResult, actualResult);
        }
예제 #23
0
        public void Return_Correct_Reports_When_Provided_Valid_Parameters()
        {
            //Arrange
            var fakeUnitOfWork       = new Mock <IUnitOfWork>();
            var fakeUserRepo         = new Mock <IGenericRepository <User> >();
            var fakeUserTweetRepo    = new Mock <IGenericRepository <UserTweet> >();
            var fakeUserFolloweeRepo = new Mock <IGenericRepository <UserFollowee> >();
            var fakeTimeProvider     = new TestDateTimeProvider();

            var testUser1 = new User {
                UserName = "******", Id = "TestId1", CreatedOn = fakeTimeProvider.CreatedOn, IsDeleted = true
            };
            var testUser2 = new User {
                UserName = "******", Id = "TestId2", CreatedOn = fakeTimeProvider.CreatedOn, IsDeleted = false
            };
            var fakeUserCollection = new List <User> {
                testUser1, testUser2
            };
            var testUserFollowee1 = new UserFollowee {
                User = testUser1, IsDeleted = true
            };
            var testUserFollowee2 = new UserFollowee {
                User = testUser2, IsDeleted = true
            };
            var testUserFollowee3 = new UserFollowee {
                User = testUser2, IsDeleted = false
            };
            var fakeUserFolloweeCollection = new List <UserFollowee> {
                testUserFollowee1, testUserFollowee2, testUserFollowee3
            };
            var testUserTweet1 = new UserTweet {
                User = testUser1, IsDeleted = true
            };
            var testUserTweet2 = new UserTweet {
                User = testUser2, IsDeleted = true
            };
            var testUserTweet3 = new UserTweet {
                User = testUser2, IsDeleted = false
            };
            var fakeUserTweetCollection = new List <UserTweet> {
                testUserTweet1, testUserTweet2, testUserTweet3
            };

            fakeUserRepo.Setup(r => r.AllAndDeleted).Returns(fakeUserCollection.AsQueryable());
            fakeUserTweetRepo.Setup(r => r.AllAndDeleted).Returns(fakeUserTweetCollection.AsQueryable());
            fakeUserFolloweeRepo.Setup(r => r.AllAndDeleted).Returns(fakeUserFolloweeCollection.AsQueryable());
            fakeUnitOfWork.Setup(u => u.Users).Returns(fakeUserRepo.Object);
            fakeUnitOfWork.Setup(u => u.UserTweets).Returns(fakeUserTweetRepo.Object);
            fakeUnitOfWork.Setup(u => u.UserFollowees).Returns(fakeUserFolloweeRepo.Object);

            var sut = new StatisticsService(fakeUnitOfWork.Object);
            var statisticsModel1 = new FakeUserStatisticsModel
            {
                ActivelyFollowedAccountsCount = 0,
                DeletedAccountsCount          = 1,
                ActiveStatus       = "Deleted",
                UserId             = "TestId1",
                UserName           = "******",
                SavedTweetsCount   = 0,
                DeletedTweetsCount = 1,
                UserNameCreatedOn  = fakeTimeProvider.CreatedOn
            };
            var statisticsModel2 = new FakeUserStatisticsModel
            {
                ActivelyFollowedAccountsCount = 1,
                DeletedAccountsCount          = 1,
                ActiveStatus       = "Active",
                UserId             = "TestId2",
                UserName           = "******",
                SavedTweetsCount   = 1,
                DeletedTweetsCount = 1,
                UserNameCreatedOn  = fakeTimeProvider.CreatedOn
            };
            var totalStatisticsModel = new FakeTotalStatisticsModel
            {
                TotalDeletedAccountsCount = 2,
                TotalSavedTweetsCount     = 1,
                TotalDeletedTweetsCount   = 2,
                TotalUsers = 2,
                TotalActivelyFollowedAccountsCount = 1,
                TotalActiveUsers  = 1,
                TotalDeletedUsers = 1
            };
            var usesStatisticsModels = new Dictionary <string, UserStatisticsModel>
            {
                ["TestUser1"] = statisticsModel1,
                ["TestUser2"] = statisticsModel2
            };

            var expectedOutput = new FakeStatisticsScreenModel {
                TotalStatisticsModel = totalStatisticsModel, UserStatisticsModels = usesStatisticsModels.Values
            };

            //Act
            var actualOutput = sut.UsersStatistics();

            //Assert

            Assert.AreEqual(expectedOutput.TotalStatisticsModel, actualOutput.TotalStatisticsModel);
            CollectionAssert.AreEqual(expectedOutput.UserStatisticsModels.ToList(), actualOutput.UserStatisticsModels.ToList());
        }
        public void Return_Correct_Value_When_Provided_Valid_Id()
        {
            //Arrange
            var fakeUnitOfWork       = new Mock <IUnitOfWork>();
            var fakeUserFolloweeRepo = new Mock <IGenericRepository <UserFollowee> >();
            var fakeTimeProvider     = new TestDateTimeProvider();

            var testUser1 = new User {
                UserName = "******", Id = "TestId1"
            };
            var testUser2 = new User {
                UserName = "******", Id = "TestId2"
            };

            var testFollowee1 = new Followee {
                ScreenName = "TestScreenName1", Bio = "TestBio1", FolloweeId = "TestFolloweeId1"
            };
            var testFollowee2 = new Followee {
                ScreenName = "TestScreenName2", Bio = "TestBio2", FolloweeId = "TestFolloweeId2"
            };
            var testFollowee3 = new Followee {
                ScreenName = "TestScreenName3", Bio = "TestBio3", FolloweeId = "TestFolloweeId3"
            };


            var testUserFollowee1 = new UserFollowee {
                FolloweeId = testFollowee1.FolloweeId, Followee = testFollowee1, UserId = testUser1.Id, User = testUser1, DeletedOn = fakeTimeProvider.DeletedOn, IsDeleted = true
            };
            var testUserFollowee2 = new UserFollowee {
                FolloweeId = testFollowee2.FolloweeId, Followee = testFollowee2, UserId = testUser1.Id, User = testUser1, IsDeleted = false
            };
            var testUserFollowee3 = new UserFollowee {
                FolloweeId = testFollowee3.FolloweeId, Followee = testFollowee3, UserId = testUser2.Id, User = testUser2, DeletedOn = fakeTimeProvider.DeletedOn, IsDeleted = true
            };


            var fakeUserFolloweeCollection = new List <UserFollowee> {
                testUserFollowee1, testUserFollowee2, testUserFollowee3
            };

            fakeUserFolloweeRepo.Setup(r => r.AllAndDeleted).Returns(fakeUserFolloweeCollection.AsQueryable());
            fakeUnitOfWork.Setup(u => u.UserFollowees).Returns(fakeUserFolloweeRepo.Object);

            var deletedModel = new FakeDeletedFolloweesModel
            {
                DeletedOn  = testUserFollowee1.DeletedOn.Value,
                ScreenName = testUserFollowee1.Followee.ScreenName,
                Bio        = testUserFollowee1.Followee.Bio
            };


            var expectedResult = new List <FakeDeletedFolloweesModel> {
                deletedModel
            };
            var sut = new FolloweeStatisticsService(fakeUnitOfWork.Object);

            //Act
            var actualResult = sut.GetDeletedFolloweesByUserId("TestId1").ToList();

            //Assert
            CollectionAssert.AreEqual(expectedResult, actualResult);
        }