예제 #1
0
        public async Task Article_projection_is_initialized_from_bootstrap()
        {
            var articleId  = Guid.NewGuid();
            var article2Id = Guid.NewGuid();
            var mediaId    = Guid.NewGuid();

            _eventStore
            .GetAllEventsBetween(Arg.Any <Position>(), Arg.Any <Position>(), Arg.Any <IReadOnlyCollection <Type> >())
            .Returns(new AsyncList <IEvent> {
                new ArticleImported(articleId, "test", "summary", DateTimeOffset.Now.Date.Subtract(TimeSpan.FromDays(1)), "https://site.html", "https://site/image.jpg", "externalId", new string[0], mediaId),
                new ArticleUpdated(articleId, "some title", "some article", DateTimeOffset.Now.Date, "https://site2.html", "https://site2/image.jpg"),
                new ArticleImported(article2Id, "test", "summary", DateTimeOffset.Now.Date.Subtract(TimeSpan.FromDays(1)), "https://site.html", "https://site/image.jpg", "externalId", new string[0], mediaId),
                new ArticleDeleted(article2Id)
            });

            await _projectionsBootstrapper.InitializeUntil(0);

            (await _finder.GetArticle(mediaId, "externalId"))
            .Should()
            .BeEquivalentTo(
                new ArticleReadModel {
                ArticleId         = articleId,
                ExternalArticleId = "externalId",
                MediaId           = mediaId,
                PublishDate       = DateTimeOffset.Now.Date
            });
        }
        private async Task SynchronizeArticles(Guid mediaId, IEnumerable <FeedItem> feedItems)
        {
            foreach (var feedItem in feedItems.Where(IsConsistentForSynchronization))
            {
                var articleInfo = await _synchronizationFinder.GetArticle(mediaId, feedItem.Id);

                if (articleInfo == null)
                {
                    await AddNewArticle(mediaId, feedItem);
                }
                else if (feedItem.PublishDate > articleInfo.PublishDate)
                {
                    await UpdateArticle(feedItem, articleInfo);
                }
            }
        }