public async Task ShouldNofityNewConversation() { // Arrange var fbChange = new FbHookChange { Value = new FbHookChangeValue { ThreadId = "original_conversation_id" } }; var fbMessage = new FbMessage { Id = "fb_1", Content = "Test_Message", SenderId = "user_1", ReceiverId = "user_2", SendTime = DateTime.UtcNow }; var sender = new SocialUser { Id = 1, OriginalId = "user_1" }; var receiver = new SocialUser { Id = 2, OriginalId = "user_2" }; IDependencyResolver dependencyResolver = MockDependecyResolverForTestingCreateConversation(fbChange, fbMessage, sender, receiver).Object; var strategy = new NewMessageStrategy(dependencyResolver); strategy.UnitOfWorkManager = MockUnitOfWorkManager().Object; var socialAccount = new SocialAccount { Token = "token", IfConvertMessageToConversation = true }; // Act var processResult = await strategy.Process(socialAccount, fbChange); // Assert Assert.Equal(1, processResult.NewConversations.Count()); Assert.Equal(0, processResult.UpdatedConversations.Count()); Assert.Equal(0, processResult.NewMessages.Count()); }
public async Task ShouldUpdateConversatonAndSaveChanges() { // Arrange var fbChange = new FbHookChange { Value = new FbHookChangeValue { ThreadId = "original_conversation_id" } }; var fbMessage = new FbMessage { Id = "fb_1", Content = "Test_Message", SenderId = "user_1", ReceiverId = "user_2", SendTime = DateTime.UtcNow }; var sender = new SocialUser { Id = 1, OriginalId = "user_1" }; var receiver = new SocialUser { Id = 2, OriginalId = "user_2" }; var conversation = new Conversation { OriginalId = fbChange.Value.ThreadId }; Mock <IDependencyResolver> dependencyResolverMock = MockDependecyResolverForTestingUpdateConversation(conversation, fbChange, fbMessage, sender, receiver); var conversationServiceMock = new Mock <IConversationService>(); // If we can find a un-closed conversation, then we will add the new message to un-closed conversation. conversationServiceMock.Setup(t => t.GetUnClosedConversation(fbChange.Value.ThreadId)).Returns(conversation); dependencyResolverMock.Setup(t => t.Resolve <IConversationService>()).Returns(conversationServiceMock.Object); var strategy = new NewMessageStrategy(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 { Token = "token", IfConvertMessageToConversation = true, SocialUser = new SocialUser { Id = 3 } }; // Act var processResult = await strategy.Process(socialAccount, fbChange); // Assert conversationServiceMock.Verify(t => t.UpdateAsync(It.IsAny <Conversation>()), "Should update conversation to db."); uowMock.Verify(t => t.SaveChangesAsync(), "Should save changes."); }
public async Task ShouldIngoreDuplicatedMessages() { // Arrange var fbChange = new FbHookChange { Value = new FbHookChangeValue { ThreadId = "th_1" } }; var fbClientMock = new Mock <IFbClient>(); fbClientMock.Setup(t => t.GetMessagesFromConversationId("token", "th_1", 10)).ReturnsAsync( new List <FbMessage> { new FbMessage { Id = "fb_1", SenderId = "user_1", ReceiverId = "user_2" } }); var messageServiceMock = new Mock <IMessageService>(); messageServiceMock.Setup(t => t.FindAll()).Returns(new List <Message> { new Message { Source = MessageSource.FacebookMessage, OriginalId = "fb_1" } // duplicate message }.AsQueryable()); var dependencyResolverMock = new Mock <IDependencyResolver>(); dependencyResolverMock.Setup(t => t.Resolve <IFbClient>()).Returns(fbClientMock.Object); dependencyResolverMock.Setup(t => t.Resolve <IMessageService>()).Returns(messageServiceMock.Object); var strategy = new NewMessageStrategy(dependencyResolverMock.Object); var socialAccount = new SocialAccount { Token = "token", IfConvertMessageToConversation = true }; // Act var processResult = await strategy.Process(socialAccount, fbChange); // Assert Assert.False(processResult.NewMessages.Any()); Assert.False(processResult.NewConversations.Any()); Assert.False(processResult.UpdatedConversations.Any()); }
public async Task ShouldIgnore_IfDisabledConvertMessageToConversation() { // Arrange var dependencyResolverMock = new Mock <IDependencyResolver>(); var strategy = new NewMessageStrategy(dependencyResolverMock.Object); var socialAccount = new SocialAccount { IfConvertMessageToConversation = false }; // Act var processResult = await strategy.Process(socialAccount, new FbHookChange()); // Assert Assert.False(processResult.NewMessages.Any()); Assert.False(processResult.NewConversations.Any()); Assert.False(processResult.UpdatedConversations.Any()); }
public async Task ShouldAddMessageToUnClosedConversation() { // Arrange var fbChange = new FbHookChange { Value = new FbHookChangeValue { ThreadId = "original_conversation_id" } }; var fbMessage = new FbMessage { Id = "fb_1", Content = "Test_Message", SenderId = "user_1", ReceiverId = "user_2", SendTime = DateTime.UtcNow }; var sender = new SocialUser { Id = 1, OriginalId = "user_1" }; var receiver = new SocialUser { Id = 2, OriginalId = "user_2" }; var conversation = new Conversation { OriginalId = fbChange.Value.ThreadId }; IDependencyResolver dependencyResolver = MockDependecyResolverForTestingUpdateConversation(conversation, fbChange, fbMessage, sender, receiver).Object; var strategy = new NewMessageStrategy(dependencyResolver); strategy.UnitOfWorkManager = MockUnitOfWorkManager().Object; var socialAccount = new SocialAccount { Token = "token", IfConvertMessageToConversation = true, SocialUser = new SocialUser { Id = 3 } }; // Act var processResult = await strategy.Process(socialAccount, fbChange); // Assert var message = processResult.UpdatedConversations.First().Messages.FirstOrDefault(t => t.OriginalId == fbMessage.Id); Assert.NotNull(message); Assert.Equal(MessageSource.FacebookMessage, message.Source); Assert.Equal(fbMessage.Id, message.OriginalId); Assert.Equal(sender.Id, message.SenderId); Assert.Equal(receiver.Id, message.ReceiverId); Assert.Equal(fbMessage.Content, message.Content); }
public async Task ShouldUpdateConversatonWhenAddNewMessageToUnClosedConversation() { // Arrange var fbChange = new FbHookChange { Value = new FbHookChangeValue { ThreadId = "original_conversation_id" } }; var fbMessage = new FbMessage { Id = "fb_1", Content = "Test_Message", SenderId = "user_1", ReceiverId = "user_2", SendTime = DateTime.UtcNow }; var sender = new SocialUser { Id = 1, OriginalId = "user_1" }; var receiver = new SocialUser { Id = 2, OriginalId = "user_2" }; var conversation = new Conversation { OriginalId = fbChange.Value.ThreadId }; IDependencyResolver dependencyResolver = MockDependecyResolverForTestingUpdateConversation(conversation, fbChange, fbMessage, sender, receiver).Object; var strategy = new NewMessageStrategy(dependencyResolver); strategy.UnitOfWorkManager = MockUnitOfWorkManager().Object; var socialAccount = new SocialAccount { Token = "token", IfConvertMessageToConversation = true, SocialUser = new SocialUser { Id = 3 } }; // Act var processResult = await strategy.Process(socialAccount, fbChange); // Assert Assert.Equal(1, processResult.UpdatedConversations.Count()); Assert.Equal(false, conversation.IfRead); Assert.Equal(ConversationStatus.PendingInternal, conversation.Status); Assert.Equal(sender.Id, conversation.LastMessageSenderId); Assert.Equal(fbMessage.SendTime, conversation.LastMessageSentTime); }
public async Task ShouldAddMessageWhenCreateNewConversation() { // Arrange var fbChange = new FbHookChange { Value = new FbHookChangeValue { ThreadId = "original_conversation_id" } }; var fbMessage = new FbMessage { Id = "fb_1", Link = "http://test.com", Content = "Test_Message", SenderId = "user_1", ReceiverId = "user_2", SendTime = DateTime.UtcNow }; var sender = new SocialUser { Id = 1, OriginalId = "user_1" }; var receiver = new SocialUser { Id = 2, OriginalId = "user_2" }; IDependencyResolver dependencyResolver = MockDependecyResolverForTestingCreateConversation(fbChange, fbMessage, sender, receiver).Object; var strategy = new NewMessageStrategy(dependencyResolver); strategy.UnitOfWorkManager = MockUnitOfWorkManager().Object; var socialAccount = new SocialAccount { Token = "token", IfConvertMessageToConversation = true }; // Act var processResult = await strategy.Process(socialAccount, fbChange); // Assert var messages = processResult.NewConversations.First().Messages; Assert.Equal(1, messages.Count()); var message = messages.First(); Assert.Equal(MessageSource.FacebookMessage, message.Source); Assert.Equal(fbMessage.Id, message.OriginalId); Assert.Equal(sender.Id, message.SenderId); Assert.Equal(receiver.Id, message.ReceiverId); Assert.Equal(fbMessage.Content, message.Content); }
public async Task ShouldSetValueForNewConversation() { // Arrange var fbChange = new FbHookChange { Value = new FbHookChangeValue { ThreadId = "original_conversation_id" } }; var fbMessage = new FbMessage { Id = "fb_1", Content = "Test_Message", SenderId = "user_1", ReceiverId = "user_2", SendTime = DateTime.UtcNow }; var sender = new SocialUser { Id = 1, OriginalId = "user_1" }; var receiver = new SocialUser { Id = 2, OriginalId = "user_2" }; IDependencyResolver dependencyResolver = MockDependecyResolverForTestingCreateConversation(fbChange, fbMessage, sender, receiver).Object; var strategy = new NewMessageStrategy(dependencyResolver); strategy.UnitOfWorkManager = MockUnitOfWorkManager().Object; var socialAccount = new SocialAccount { Token = "token", IfConvertMessageToConversation = true }; // Act var processResult = await strategy.Process(socialAccount, fbChange); // Assert var converssation = processResult.NewConversations.First(); Assert.Equal(ConversationSource.FacebookMessage, converssation.Source); Assert.Equal(ConversationStatus.New, converssation.Status); Assert.Equal("original_conversation_id", converssation.OriginalId); Assert.Equal(ConversationPriority.Normal, converssation.Priority); Assert.Equal(1, converssation.LastMessageSenderId); Assert.Equal(fbMessage.SendTime, converssation.LastMessageSentTime); Assert.Equal("Test_Message", converssation.Subject); }
public async Task ShouldNotUpdateLastMessageIfMessageIsOlderThanExistingMessage() { // Arrange var fbChange = new FbHookChange { Value = new FbHookChangeValue { ThreadId = "original_conversation_id" } }; var fbMessage = new FbMessage { Id = "fb_1", Content = "Test_Message", SenderId = "user_1", ReceiverId = "user_2", SendTime = new DateTime(1999, 1, 1, 0, 0, 0, DateTimeKind.Utc) }; var sender = new SocialUser { Id = 1, OriginalId = "user_1" }; var receiver = new SocialUser { Id = 2, OriginalId = "user_2" }; var conversation = new Conversation { OriginalId = fbChange.Value.ThreadId, LastMessageSenderId = 888, LastMessageSentTime = new DateTime(2000, 1, 1, 0, 0, 0, DateTimeKind.Utc) }; IDependencyResolver dependencyResolver = MockDependecyResolverForTestingUpdateConversation(conversation, fbChange, fbMessage, sender, receiver).Object; var strategy = new NewMessageStrategy(dependencyResolver); strategy.UnitOfWorkManager = MockUnitOfWorkManager().Object; var socialAccount = new SocialAccount { Token = "token", IfConvertMessageToConversation = true, SocialUser = new SocialUser { Id = 3 } }; // Act var processResult = await strategy.Process(socialAccount, fbChange); // Assert Assert.Equal(888, conversation.LastMessageSenderId); Assert.Equal(new DateTime(2000, 1, 1, 0, 0, 0, DateTimeKind.Utc), conversation.LastMessageSentTime); }