protected Mock <IFbClient> MockFbClient(string pageId, string token, FbPagingData <FbPost> data) { var fbClient = new Mock <IFbClient>(); fbClient.Setup(t => t.GetTaggedVisitorPosts(pageId, token)).ReturnsAsync(data); fbClient.Setup(t => t.GetVisitorPosts(pageId, token)).ReturnsAsync(data); return(fbClient); }
public async Task ShouldCreateConversationForNextPageDataFromFacebook() { // Arrange var account = MakeSocialAccount(); var conversationServiceMock = new Mock <IConversationService>(); var socialUserServiceMock = MockSocialUserService(account); var firstPageData = new FbPagingData <FbPost> { data = new List <FbPost> { new FbPost { id = "post_1", from = new FbUser { id = "user_1" }, created_time = new DateTime(2000, 1, 1, 1, 1, 1, DateTimeKind.Utc), message = "test_content 1" } }, paging = new FbPaging { next = "http://api.facebook.com/122312" } }; var secondPageData = new FbPagingData <FbPost> { data = new List <FbPost> { new FbPost { id = "post_2", from = new FbUser { id = "user_1" }, created_time = new DateTime(2001, 1, 1, 1, 1, 1, DateTimeKind.Utc), message = "test_content 2" } } }; var fbClientMock = MockFbClient(account.SocialUser.OriginalId, account.Token, firstPageData); fbClientMock.Setup(t => t.GetPagingData <FbPost>("http://api.facebook.com/122312")) .ReturnsAsync(secondPageData); var dependencyResolver = new DependencyResolverBuilder() .WithConversationService(conversationServiceMock.Object) .WithSocialUserService(socialUserServiceMock.Object) .WithFacebookClient(fbClientMock.Object) .Build(); var pullJobService = dependencyResolver.Resolve <PullJobService>(); // Act FacebookProcessResult processResult = await pullJobService.PullTaggedVisitorPosts(account); // Assert conversationServiceMock.Verify(t => t.InsertAsync(It.IsAny <Conversation>()), Times.Exactly(2)); }
private void FillPostIdForComments(FbPagingData <FbComment> comments, string postId) { if (comments == null || comments.data == null) { return; } foreach (var comment in comments.data) { comment.PostId = postId; } }
private async Task InitForMessages(FbPagingData <FbMessage> messages) { MessagesToBeCreated = new List <FbMessage>(); if (!messages.data.Any()) { return; } MessagesToBeCreated.AddRange(messages.data); if (messages.paging.next != null) { FacebookClient client = new FacebookClient(); var nextPagePosts = await client.GetTaskAsync <FbPagingData <FbMessage> >(messages.paging.next); await InitForMessages(nextPagePosts); } }
private async Task Init(FbPagingData <FbPost> posts) { if (posts == null || !posts.data.Any()) { return; } PostsToBeCreated.AddRange(posts.data); await AddCommentIds(posts); if (posts.paging != null && posts.paging.next != null) { var nextPagePosts = await _fbClient.GetPagingData <FbPost>(posts.paging.next); await Init(nextPagePosts); } }
public async Task ShouldCreateConversationsForMultiplePost() { // Arrange var account = MakeSocialAccount(); var conversationServiceMock = new Mock <IConversationService>(); var socialUserServiceMock = MockSocialUserService(account); var testDataFromFb = new FbPagingData <FbPost> { data = new List <FbPost> { new FbPost { id = "post_1", from = new FbUser { id = "user_1" }, created_time = new DateTime(2000, 1, 1, 1, 1, 1, DateTimeKind.Utc), message = "test_content 1" }, new FbPost { id = "post_2", from = new FbUser { id = "user_1" }, created_time = new DateTime(2001, 1, 1, 1, 1, 1, DateTimeKind.Utc), message = "test_content 2" }, } }; var fbClientMock = MockFbClient(account.SocialUser.OriginalId, account.Token, testDataFromFb); var dependencyResolver = new DependencyResolverBuilder() .WithConversationService(conversationServiceMock.Object) .WithSocialUserService(socialUserServiceMock.Object) .WithFacebookClient(fbClientMock.Object) .Build(); var pullJobService = dependencyResolver.Resolve <PullJobService>(); // Act FacebookProcessResult processResult = await pullJobService.PullTaggedVisitorPosts(account); // Assert conversationServiceMock.Verify(t => t.InsertAsync(It.IsAny <Conversation>()), Times.Exactly(2)); }
private async Task AddReplyCommentIds(FbPagingData <FbComment> comments) { foreach (var comment in comments.data) { var replyComments = comment.comments; while (replyComments != null && replyComments.data.Any()) { FillPostIdForComments(replyComments, comment.PostId); ReplyCommentsToBeCretaed.AddRange(replyComments.data); if (replyComments.paging?.next != null) { replyComments = await _fbClient.GetPagingData <FbComment>(replyComments.paging.next); } else { break; } } } }
private async Task InitForConversation(FbPagingData <FbConversation> Conversations) { if (!Conversations.data.Any()) { return; } List <FbMessage> FbMessages = new List <FbMessage>(); foreach (var conversation in Conversations.data) { await InitForMessages(conversation.Messages); conversation.Messages.data = MessagesToBeCreated; } ConversationsToBeCreated.AddRange(Conversations.data); if (Conversations.paging.next != null) { FacebookClient client = new FacebookClient(); var nextPagePosts = await client.GetTaskAsync <FbPagingData <FbConversation> >(Conversations.paging.next); await InitForConversation(nextPagePosts); } }
private async Task AddCommentIds(FbPagingData <FbPost> posts) { foreach (var post in posts.data) { var comments = post.comments; while (comments != null && comments.data.Any()) { FillPostIdForComments(comments, post.id); CommentsToBeCreated.AddRange(comments.data); await AddReplyCommentIds(comments); if (comments.paging?.next != null) { comments = await _fbClient.GetPagingData <FbComment>(comments.paging.next); } else { break; } } } }