public async Task ShouldIgnoreVisitorPostIfDisabledConvertPostToConversation() { // Arrange var dependencyResolverMock = new Mock <IDependencyResolver>(); var strategy = new NewPostStrategy(dependencyResolverMock.Object); var fbHookChange = new FbHookChange { Field = "feed", Value = new FbHookChangeValue { Item = "post", PostId = "123", Verb = "add" } }; var socialAccount = new SocialAccount { IfConvertVisitorPostToConversation = false }; // Act var processResult = await strategy.Process(socialAccount, fbHookChange); // Assert Assert.False(processResult.NewMessages.Any()); Assert.False(processResult.NewConversations.Any()); Assert.False(processResult.UpdatedConversations.Any()); }
public async Task ShouldCreateConversationForWallPost() { // Arrange var fbHookChange = new FbHookChange { Field = "feed", Value = new FbHookChangeValue { Item = "status", PostId = "post_1", Verb = "add", IsPublished = true } }; var fbPost = new FbPost { id = "post_1", from = new FbUser { id = "user_1", name = "test_sender" }, created_time = DateTime.UtcNow, message = "Test_Message" }; var sender = new SocialUser { Id = 888, OriginalId = "user_1" }; var dependencyResolverMock = MockDependencyResolver(fbHookChange, fbPost, sender); var strategy = new NewPostStrategy(dependencyResolverMock.Object); strategy.UnitOfWorkManager = MockUnitOfWorkManager().Object; var socialAccount = new SocialAccount { Id = 888, Token = "token", IfConvertWallPostToConversation = true }; // Act var processResult = await strategy.Process(socialAccount, fbHookChange); // Assert var conversation = processResult.NewConversations.First(); Assert.NotNull(conversation); Assert.Equal(true, conversation.IsHidden); Assert.Equal(ConversationSource.FacebookWallPost, conversation.Source); Assert.Equal(ConversationStatus.New, conversation.Status); Assert.Equal("post_1", conversation.OriginalId); Assert.Equal(ConversationPriority.Normal, conversation.Priority); Assert.Equal(888, conversation.LastMessageSenderId); Assert.Equal(fbPost.created_time, conversation.LastMessageSentTime); Assert.Equal("Test_Message", conversation.Subject); }
public void ShouldNotMatchStrategy() { // Arrange var dependencyResolverMock = new Mock <IDependencyResolver>(); var strategy = new NewPostStrategy(dependencyResolverMock.Object); var fbHookChange = new FbHookChange { Field = "conversation", }; // Act bool isMatch = strategy.IsMatch(fbHookChange); // Assert Assert.False(isMatch); }
public async Task ShouldCreateMessageForPost() { // Arrange var fbHookChange = new FbHookChange { Field = "feed", Value = new FbHookChangeValue { Item = "post", PostId = "post_1", Verb = "add" } }; var fbPost = new FbPost { id = "post_1", from = new FbUser { id = "user_1", name = "test_sender" }, created_time = DateTime.UtcNow, message = "Test_Message" }; var sender = new SocialUser { Id = 1, OriginalId = "user_1" }; var dependencyResolverMock = MockDependencyResolver(fbHookChange, fbPost, sender); var strategy = new NewPostStrategy(dependencyResolverMock.Object); strategy.UnitOfWorkManager = MockUnitOfWorkManager().Object; var socialAccount = new SocialAccount { Id = 888, Token = "token", IfConvertVisitorPostToConversation = true }; // Act var processResult = await strategy.Process(socialAccount, fbHookChange); // Assert var message = processResult.NewConversations.First().Messages.FirstOrDefault(t => t.OriginalId == "post_1"); Assert.NotNull(message); Assert.Equal(MessageSource.FacebookPost, message.Source); Assert.Equal(fbPost.id, message.OriginalId); Assert.Equal(sender.Id, message.SenderId); Assert.Equal(socialAccount.Id, message.ReceiverId); Assert.Equal(fbPost.message, message.Content); }
public async Task ShouldInsertAndSaveChangesWhenCreateConversation() { // Arrange var fbHookChange = new FbHookChange { Field = "feed", Value = new FbHookChangeValue { Item = "post", PostId = "post_1", Verb = "add" } }; var fbPost = new FbPost { id = "post_1", from = new FbUser { id = "user_1", name = "test_sender" }, created_time = DateTime.UtcNow, message = "Test_Message" }; var sender = new SocialUser { Id = 1, OriginalId = "user_1" }; var dependencyResolverMock = MockDependencyResolver(fbHookChange, fbPost, sender); var conversationServiceMock = new Mock <IConversationService>(); dependencyResolverMock.Setup(t => t.Resolve <IConversationService>()).Returns(conversationServiceMock.Object); var strategy = new NewPostStrategy(dependencyResolverMock.Object); var uowMock = new Mock <IUnitOfWork>(); var uowManagerMock = new Mock <IUnitOfWorkManager>(); uowManagerMock.Setup(t => t.Current).Returns(uowMock.Object); strategy.UnitOfWorkManager = uowManagerMock.Object; var socialAccount = new SocialAccount { Id = 888, Token = "token", IfConvertVisitorPostToConversation = true }; // Act var processResult = await strategy.Process(socialAccount, fbHookChange); // Assert conversationServiceMock.Verify(t => t.InsertAsync(It.IsAny <Conversation>()), "Should add conversation to db."); uowMock.Verify(t => t.SaveChangesAsync(), "Should save changes."); }
public async Task ShouldIgnoreDuplicatedMessage() { // Arrange var fbHookChange = new FbHookChange { Field = "feed", Value = new FbHookChangeValue { Item = "post", PostId = "post_1", Verb = "add" } }; var fbPost = new FbPost { id = "post_1", from = new FbUser { id = "user_1", name = "test_sender" } }; var sender = new SocialUser { Id = 1, OriginalId = "user_1" }; var dependencyResolverMock = MockDependencyResolver(fbHookChange, fbPost, sender); var messageServiceMock = new Mock <IMessageService>(); // make duplicate message messageServiceMock.Setup(t => t.IsDuplicatedMessage(MessageSource.FacebookPost, "post_1")).Returns(true); dependencyResolverMock.Setup(t => t.Resolve <IMessageService>()).Returns(messageServiceMock.Object); var strategy = new NewPostStrategy(dependencyResolverMock.Object); var socialAccount = new SocialAccount { Token = "token", IfConvertVisitorPostToConversation = true }; // Act var processResult = await strategy.Process(socialAccount, fbHookChange); // Assert Assert.False(processResult.NewMessages.Any()); Assert.False(processResult.NewConversations.Any()); Assert.False(processResult.UpdatedConversations.Any()); }
public async Task ShouldNotifyNewConversation() { // Arrange var fbHookChange = new FbHookChange { Field = "feed", Value = new FbHookChangeValue { Item = "post", PostId = "post_1", Verb = "add" } }; var fbPost = new FbPost { id = "post_1", from = new FbUser { id = "user_1", name = "test_sender" }, created_time = DateTime.UtcNow, message = "Test_Message" }; var sender = new SocialUser { Id = 1, OriginalId = "user_1" }; var dependencyResolverMock = MockDependencyResolver(fbHookChange, fbPost, sender); var strategy = new NewPostStrategy(dependencyResolverMock.Object); strategy.UnitOfWorkManager = MockUnitOfWorkManager().Object; var socialAccount = new SocialAccount { Id = 888, Token = "token", IfConvertVisitorPostToConversation = true }; // Act var processResult = await strategy.Process(socialAccount, fbHookChange); // Assert Assert.Equal(1, processResult.NewConversations.Count()); Assert.Equal(0, processResult.UpdatedConversations.Count()); Assert.Equal(0, processResult.NewMessages.Count()); }
public void ShouldMatchStrategyIfVisitorAddTextPost() { // Arrange var dependencyResolverMock = new Mock <IDependencyResolver>(); var strategy = new NewPostStrategy(dependencyResolverMock.Object); var fbHookChange = new FbHookChange { Field = "feed", Value = new FbHookChangeValue { Item = "post", PostId = "123", Verb = "add" } }; // Act bool isMatch = strategy.IsMatch(fbHookChange); // Assert Assert.True(isMatch); }
public void ShouldMatchStrategyIfVisitorAddPhotoOrVideoPost() { // Arrange var dependencyResolverMock = new Mock <IDependencyResolver>(); var strategy = new NewPostStrategy(dependencyResolverMock.Object); var fbHookChange = new FbHookChange { Field = "feed", Value = new FbHookChangeValue { PostId = "123", Verb = "add", IsPublished = true, Link = "http://www.abc.com/test.jpg" } }; // Act bool isMatch = strategy.IsMatch(fbHookChange); // Assert Assert.True(isMatch); }