コード例 #1
0
        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);
        }
コード例 #2
0
        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));
        }
コード例 #3
0
        private void FillPostIdForComments(FbPagingData <FbComment> comments, string postId)
        {
            if (comments == null || comments.data == null)
            {
                return;
            }

            foreach (var comment in comments.data)
            {
                comment.PostId = postId;
            }
        }
コード例 #4
0
 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);
     }
 }
コード例 #5
0
        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);
            }
        }
コード例 #6
0
        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));
        }
コード例 #7
0
        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;
                    }
                }
            }
        }
コード例 #8
0
        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);
            }
        }
コード例 #9
0
        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;
                    }
                }
            }
        }