public RecentEventsFeed Build() { RecentEventsFeed recentEventsFeed = new FeedBuilder(links).CreateRecentEventsFeed(feedMapping, prevArchiveLinkGenerator); for (int i = 0; i < numberOfEntries; i++) { recentEventsFeed.AddEvent(new EventBuilder().Build()); } return recentEventsFeed; }
public ITask Execute(IFileSystem fileSystem, IEventBuffer buffer, FeedBuilder feedBuilder, Action<FeedMappingsChangedEventArgs> notifyMappingsChanged) { IEnumerable<Event> events = buffer.Take(QueryingEvents.BatchSize); Log.DebugFormat("Requerying events. Number of events found: [{0}].", events.Count()); if (events.Count().Equals(0)) { return new SavingRecentEventsFeed(recentEventsFeed); } return new UpdatingRecentEventsFeed(recentEventsFeed, events); }
public FeedWriter(ITimer timer, EventBuffer buffer, IFileSystem fileSystem, FeedBuilder feedBuilder) { Check.IsNotNull(timer, "timer"); Check.IsNotNull(buffer, "buffer"); Check.IsNotNull(fileSystem, "fileSystem"); Check.IsNotNull(feedBuilder, "feedBuilder"); this.timer = timer; this.fileSystem = fileSystem; this.buffer = buffer; this.feedBuilder = feedBuilder; this.timer.TimerFired += TimerFiredHandler; reaper = new Reaper(fileSystem); FeedMappingsChanged += reaper.OnFeedMappingsChanged; }
public void IfFeedFillsExactlyToQuotaShouldNotBeArchived() { FileName tempFileName = null; FeedBuilder feedBuilder = new FeedBuilder(SampleLinks.Instance); InMemoryFileSystem fileSystem = new InMemoryFileSystem(); EventBuffer buffer = new EventBuffer(); Repeat.Times(3).Action(() => buffer.Add(new EventBuilder().Build())); FakeTimer timer = new FakeTimer(); FeedWriter feedWriter = new FeedWriter(timer, buffer, fileSystem, new FeedBuilder(SampleLinks.Instance)); feedWriter.FeedMappingsChanged += ((o, args) => tempFileName = new FileName(args.RecentEventsFeedStoreId)); timer.Fire(); Assert.AreEqual(1, fileSystem.FileCount(fileSystem.CurrentDirectory)); Assert.AreEqual(0, fileSystem.FileCount(fileSystem.ArchiveDirectory)); RecentEventsFeed rehydratedFeed = feedBuilder.LoadRecentEventsFeed(fileSystem, tempFileName); Assert.AreEqual(3, rehydratedFeed.GetSyndicationFeed().Items.Count()); }
public void WhenTriggeredShouldAddBatchOfEventsToCurrentFeed() { FileName tempFileName = null; InMemoryFileSystem fileSystem = new InMemoryFileSystem(); EventBuffer buffer = new EventBuffer(); EventBuilder eventBuilder = new EventBuilder(); Repeat.Times(2).Action(() => buffer.Add(eventBuilder.Build())); FakeTimer timer = new FakeTimer(); FeedWriter feedWriter = new FeedWriter(timer, buffer, fileSystem, new FeedBuilder(SampleLinks.Instance)); feedWriter.FeedMappingsChanged += ((o, args) => tempFileName = new FileName(args.RecentEventsFeedStoreId)); timer.Fire(); Assert.AreEqual(1, fileSystem.FileCount(fileSystem.CurrentDirectory)); RecentEventsFeed rehydratedFeed = new FeedBuilder(SampleLinks.Instance).LoadRecentEventsFeed(fileSystem, tempFileName); Assert.AreEqual(2, rehydratedFeed.GetNumberOfEntries()); }
public void WhenTriggeredRepeatedlyShouldContinueToAddEventsToExistingFeed() { FileName tempFileName = null; FeedBuilder feedBuilder = new FeedBuilder(SampleLinks.Instance); InMemoryFileSystem fileSystem = new InMemoryFileSystem(); EventBuffer buffer = new EventBuffer(); buffer.Add(new EventBuilder().Build()); FakeTimer timer = new FakeTimer(); FeedWriter feedWriter = new FeedWriter(timer, buffer, fileSystem, new FeedBuilder(SampleLinks.Instance)); feedWriter.FeedMappingsChanged += ((o, args) => tempFileName = new FileName(args.RecentEventsFeedStoreId)); timer.Fire(); RecentEventsFeed rehydratedFeed = feedBuilder.LoadRecentEventsFeed(fileSystem, tempFileName); Assert.AreEqual(1, rehydratedFeed.GetSyndicationFeed().Items.Count()); Assert.AreEqual("?page=1", rehydratedFeed.GetSyndicationFeed().GetViaLink().Uri.Query); buffer.Add(new EventBuilder().Build()); timer.Fire(); RecentEventsFeed secondRehydratedFeed = feedBuilder.LoadRecentEventsFeed(fileSystem, tempFileName); Assert.AreEqual(2, secondRehydratedFeed.GetSyndicationFeed().Items.Count()); Assert.AreEqual("?page=1", secondRehydratedFeed.GetSyndicationFeed().GetViaLink().Uri.Query); }
public void WhenNumberOfEventsExceedsQuotaShouldArchiveFeedAndBeginAnotherOne() { FileName tempFileName = null; FeedBuilder feedBuilder = new FeedBuilder(SampleLinks.Instance); InMemoryFileSystem fileSystem = new InMemoryFileSystem(); EventBuffer buffer = new EventBuffer(); EventBuilder eventBuilder = new EventBuilder(); Repeat.Times(RecentEventsFeed.Quota + 1).Action(() => buffer.Add(eventBuilder.Build())); FakeTimer timer = new FakeTimer(); FeedWriter feedWriter = new FeedWriter(timer, buffer, fileSystem, new FeedBuilder(SampleLinks.Instance)); feedWriter.FeedMappingsChanged += ((o, args) => tempFileName = new FileName(args.RecentEventsFeedStoreId)); timer.Fire(); Assert.AreEqual(1, fileSystem.FileCount(fileSystem.CurrentDirectory)); Assert.AreEqual(1, fileSystem.FileCount(fileSystem.ArchiveDirectory)); ArchiveFeed archivedFeed = LoadArchiveFeed(fileSystem, new FileName("1")); Assert.AreEqual(10, archivedFeed.GetNumberOfEntries()); Assert.AreEqual("?page=1", archivedFeed.GetSyndicationFeed().GetSelfLink().Uri.Query); Assert.AreEqual("?page=2", archivedFeed.GetSyndicationFeed().GetNextArchiveLink().Uri.Query); RecentEventsFeed recentEventsFeed = feedBuilder.LoadRecentEventsFeed(fileSystem, tempFileName); Assert.AreEqual(1, recentEventsFeed.GetSyndicationFeed().Items.Count()); Assert.AreEqual("?page=2", recentEventsFeed.GetSyndicationFeed().GetViaLink().Uri.Query); }
public ITask Execute(IFileSystem fileSystem, IEventBuffer buffer, FeedBuilder feedBuilder, Action<FeedMappingsChangedEventArgs> notifyMappingsChanged) { RecentEventsFeed feed = feedBuilder.CreateRecentEventsFeed(new FeedMapping(Id.InitialValue), PrevArchiveLinkGenerator.Null); return new UpdatingRecentEventsFeed(feed, events); }
public RecentEventsFeed(SyndicationFeed feed, FeedMapping mapping, FeedBuilder builder) { this.feed = feed; this.mapping = mapping; this.builder = builder; }
public ITask Execute(IFileSystem fileSystem, IEventBuffer buffer, FeedBuilder feedBuilder, Action<FeedMappingsChangedEventArgs> notifyMappingsChanged) { notifyMappingsChanged.Invoke(recentEventsFeed.CreateFeedMappingsChangedEventArgs()); return new Terminate(); }
public ITask Execute(IFileSystem fileSystem, IEventBuffer buffer, FeedBuilder feedBuilder, Action<FeedMappingsChangedEventArgs> notifyMappingsChanged) { throw new InvalidOperationException(); }