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); } } }