public void IdIsCorrect(
            [Frozen] UuidIri expected,
            AtomEventStream <DataContractTestEventX> sut)
        {
            UuidIri actual = sut.Id;

            Assert.Equal(expected, actual);
        }
        public void AppendAsyncMoreThanTwicePageSizeEventsCreatesThreeFeedPages(
            [Frozen(As = typeof(IAtomEventStorage))] AtomEventsInMemory storage,
            AtomEventStream <XmlAttributedTestEventX> sut,
            Generator <XmlAttributedTestEventX> eventGenerator)
        {
            var events = eventGenerator.Take(sut.PageSize * 2 + 1).ToList();

            events.ForEach(e => sut.AppendAsync(e).Wait());
            Assert.Equal(3, storage.Feeds.Count());
        }
        public void IsPreviousFeedLinkReturnsFalseForLinkNotUuid(
            int number)
        {
            var uri  = new Uri(number.ToString(), UriKind.Relative);
            var link = AtomLink.CreatePreviousLink(uri);

            var actual = AtomEventStream.IsPreviousFeedLink(link);

            Assert.False(actual);
        }
        public void IsPreviousFeedLinkReturnsFalseForLinkWithAbsoluteUri(
            Uri uri)
        {
            Assert.True(uri.IsAbsoluteUri);
            var link = AtomLink.CreatePreviousLink(uri);

            var actual = AtomEventStream.IsPreviousFeedLink(link);

            Assert.False(actual);
        }
        public void CreatePreviousLinkFromReturnsCorrectResult(
            UuidIri id)
        {
            AtomLink actual = AtomEventStream.CreatePreviousLinkFrom(id);

            var expected = AtomLink.CreatePreviousLink(
                new Uri(
                    ((Guid)id).ToString(),
                    UriKind.Relative));

            Assert.Equal(expected, actual);
        }
        public void SutCanAppendAndYieldPolymorphicEvents(
            [Frozen(As = typeof(IAtomEventStorage))] AtomEventsInMemory dummyInjectedIntoSut,
            AtomEventStream <IXmlAttributedTestEvent> sut,
            XmlAttributedTestEventX tex,
            XmlAttributedTestEventY tey)
        {
            sut.AppendAsync(tex).Wait();
            sut.AppendAsync(tey).Wait();

            var expected = new IXmlAttributedTestEvent[] { tey, tex };

            Assert.True(expected.SequenceEqual(sut));
        }
        public void AppendAsyncWritesPreviousPageBeforeIndex(
            [Frozen(As = typeof(IAtomEventStorage))] SpyAtomEventStore spyStore,
            AtomEventStream <XmlAttributedTestEventX> sut,
            Generator <XmlAttributedTestEventX> eventGenerator)
        {
            var events = eventGenerator.Take(sut.PageSize + 1).ToList();

            events.ForEach(e => sut.AppendAsync(e).Wait());

            var feed = Assert.IsAssignableFrom <AtomFeed>(
                spyStore.ObservedArguments.Last());

            Assert.Equal(sut.Id, feed.Id);
        }
        public void SutYieldsCorrectEvents(
            [Frozen(As = typeof(IAtomEventStorage))] AtomEventsInMemory dummyInjectedIntoSut,
            AtomEventStream <XmlAttributedTestEventX> sut,
            List <XmlAttributedTestEventX> events)
        {
            events.ForEach(e => sut.AppendAsync(e).Wait());

            var expected = events.AsEnumerable().Reverse();

            Assert.True(
                expected.SequenceEqual(sut),
                "Events should be yielded in a FILO order");
            Assert.True(
                expected.Cast <object>().SequenceEqual(sut.OfType <object>()),
                "Events should be yielded in a FILO order");
        }
        public void AppendAsyncCorrectlyStoresFeed(
            [Frozen(As = typeof(IAtomEventStorage))] AtomEventsInMemory storage,
            AtomFeedParser <XmlContentSerializer> parser,
            AtomEventStream <XmlAttributedTestEventX> sut,
            XmlAttributedTestEventX expectedEvent)
        {
            var before = DateTimeOffset.Now;

            sut.AppendAsync(expectedEvent).Wait();

            var writtenFeed  = storage.Feeds.Select(parser.Parse).Single();
            var expectedFeed = new AtomFeedLikeness(before, sut.Id, expectedEvent);

            Assert.True(
                expectedFeed.Equals(writtenFeed),
                "Expected feed must match actual feed.");
        }
        public void AppendAsyncLessThanPageSizeEventsDoesNotAddLinkToPreviousPageToIndex(
            [Frozen(As = typeof(IAtomEventStorage))] AtomEventsInMemory storage,
            AtomFeedParser <XmlContentSerializer> parser,
            AtomEventStream <XmlAttributedTestEventX> sut,
            Generator <XmlAttributedTestEventX> eventGenerator)
        {
            var before = DateTimeOffset.Now;
            var events = eventGenerator.Take(sut.PageSize).ToList();

            events.ForEach(e => sut.AppendAsync(e).Wait());

            var writtenIndex = storage.Feeds
                               .Select(parser.Parse)
                               .Single(f => f.Id == sut.Id);

            Assert.Equal(
                0,
                writtenIndex.Links.Count(AtomEventStream.IsPreviousFeedLink));
        }
        public void SutCanAppendAndYieldEnclosedPolymorphicEvents(
            [Frozen(As = typeof(IAtomEventStorage))] AtomEventsInMemory dummyInjectedIntoSut,
            AtomEventStream <DataContractEnvelope <IDataContractTestEvent> > sut,
            DataContractEnvelope <DataContractTestEventX> texEnvelope,
            DataContractEnvelope <DataContractTestEventY> teyEnvelope)
        {
            var texA = texEnvelope.Cast <IDataContractTestEvent>();
            var teyA = teyEnvelope.Cast <IDataContractTestEvent>();

            sut.AppendAsync(texA).Wait();
            sut.AppendAsync(teyA).Wait();

            var expected = new DataContractEnvelope <IDataContractTestEvent>[]
            {
                teyA,
                texA
            };

            Assert.True(expected.SequenceEqual(sut));
        }
        public void AppendAsyncPageSizeEventsSavesAllEntriesInIndex(
            [Frozen(As = typeof(IAtomEventStorage))] AtomEventsInMemory storage,
            AtomFeedParser <XmlContentSerializer> parser,
            AtomEventStream <XmlAttributedTestEventX> sut,
            Generator <XmlAttributedTestEventX> eventGenerator)
        {
            var before = DateTimeOffset.Now;
            var events = eventGenerator.Take(sut.PageSize).ToList();

            events.ForEach(e => sut.AppendAsync(e).Wait());

            var writtenFeed  = storage.Feeds.Select(parser.Parse).Single();
            var expectedFeed = new AtomFeedLikeness(
                before,
                sut.Id,
                events.AsEnumerable().Reverse().ToArray());

            Assert.True(
                expectedFeed.Equals(writtenFeed),
                "Expected feed must match actual feed.");
        }
        public void AppendAsyncMoreThanPageSizeEventsOnlyStoresOverflowingEvent(
            [Frozen(As = typeof(IAtomEventStorage))] AtomEventsInMemory storage,
            AtomFeedParser <XmlContentSerializer> parser,
            AtomEventStream <XmlAttributedTestEventX> sut,
            Generator <XmlAttributedTestEventX> eventGenerator)
        {
            var before = DateTimeOffset.Now;
            var events = eventGenerator.Take(sut.PageSize + 1).ToList();

            events.ForEach(e => sut.AppendAsync(e).Wait());

            var writtenIndex = storage.Feeds
                               .Select(parser.Parse)
                               .Single(f => f.Id == sut.Id);
            var expectedIndex = new AtomFeedLikeness(
                before,
                sut.Id,
                events.AsEnumerable().Reverse().First());

            Assert.True(
                expectedIndex.Equals(writtenIndex),
                "Expected feed must match actual feed.");
        }
 public void SutIsEnumerable(AtomEventStream <DataContractTestEventY> sut)
 {
     Assert.IsAssignableFrom <IEnumerable <DataContractTestEventY> >(sut);
 }
 public void OnCompletedDoesNotThrow(
     AtomEventStream <DataContractTestEventY> sut)
 {
     Assert.DoesNotThrow(() => sut.OnCompleted());
 }
 public void OnErrorDoesNotThrow(
     AtomEventStream <DataContractTestEventY> sut,
     Exception e)
 {
     Assert.DoesNotThrow(() => sut.OnError(e));
 }
 public void SutIsObserver(AtomEventStream <DataContractTestEventX> sut)
 {
     Assert.IsAssignableFrom <IObserver <DataContractTestEventX> >(sut);
 }