public async Task Emits_events_to_all_active_consumers_even_failed_ones()
        {
            var behaving              = AsyncInterceptingConsumer.Behaving();
            var behavingDelegating    = new Interceptions();
            var misbehaving           = AsyncInterceptingConsumer.Misbehaving(ev => ev.Sequence > Sequence.First);
            var misbehavingDelegating = new Interceptions();
            var sut = NewSut();

            sut.Subscribe(behaving);
            sut.Subscribe(
                behavingDelegating.InOnNewAsync,
                behavingDelegating.InOnAllSucceededAsync,
                behavingDelegating.InOnAnyFailedAsync);
            sut.Subscribe(misbehaving);
            sut.Subscribe(
                ev =>
            {
                misbehavingDelegating.InOnNew(ev);
                if (ev.Sequence > Sequence.First)
                {
                    throw new Exception(ev.ToString());
                }

                return(ValueTask.CompletedTask);
            },
                misbehavingDelegating.InOnAllSucceededAsync,
                misbehavingDelegating.InOnAnyFailedAsync);

            var ev1 = await sut.EmitAsync(Fake.Strings.Random());

            var ev2 = await sut.EmitAsync(Fake.Strings.Random());

            behaving.Ensure().OnNewOnlyHas(ev1, ev2);
            behaving.Ensure().OnAllSucceededOnlyHasId(ev1.Id);
            behaving.Ensure().OnAnyFailedOnlyHasId(ev2.Id);

            behavingDelegating.Ensure().OnNewOnlyHas(ev1, ev2);
            behavingDelegating.Ensure().OnAllSucceededOnlyHasId(ev1.Id);
            behavingDelegating.Ensure().OnAnyFailedOnlyHasId(ev2.Id);

            misbehaving.Ensure().OnNewOnlyHas(ev1, ev2);
            misbehaving.Ensure().OnAllSucceededOnlyHasId(ev1.Id);
            misbehaving.Ensure().OnAnyFailedOnlyHasId(ev2.Id);

            misbehavingDelegating.Ensure().OnNewOnlyHas(ev1, ev2);
            misbehavingDelegating.Ensure().OnAllSucceededOnlyHasId(ev1.Id);
            misbehavingDelegating.Ensure().OnAnyFailedOnlyHasId(ev2.Id);
        }
示例#2
0
        public void Emits_events_to_all_active_consumers_even_failed_ones()
        {
            var behaving              = InterceptingConsumer.Behaving();
            var behavingDelegating    = new Interceptions();
            var misbehaving           = InterceptingConsumer.Misbehaving(ev => ev.Sequence > Sequence.First);
            var misbehavingDelegating = new Interceptions();
            var sut = NewSut();

            sut.Subscribe(behaving);
            sut.Subscribe(
                behavingDelegating.InOnNew,
                behavingDelegating.InOnAllSucceeded,
                behavingDelegating.InOnAnyFailed);
            sut.Subscribe(misbehaving);
            sut.Subscribe(
                ev =>
            {
                misbehavingDelegating.InOnNew(ev);
                if (ev.Sequence > Sequence.First)
                {
                    throw new Exception(ev.ToString());
                }
            },
                misbehavingDelegating.InOnAllSucceeded,
                misbehavingDelegating.InOnAnyFailed);

            var ev1 = sut.Emit(Fake.Strings.Random());
            var ev2 = sut.Emit(Fake.Strings.Random());

            behaving.Ensure().OnNewOnlyHas(ev1, ev2);
            behaving.Ensure().OnAllSucceededOnlyHasId(ev1.Id);
            behaving.Ensure().OnAnyFailedOnlyHasId(ev2.Id);

            behavingDelegating.Ensure().OnNewOnlyHas(ev1, ev2);
            behavingDelegating.Ensure().OnAllSucceededOnlyHasId(ev1.Id);
            behavingDelegating.Ensure().OnAnyFailedOnlyHasId(ev2.Id);

            misbehaving.Ensure().OnNewOnlyHas(ev1, ev2);
            misbehaving.Ensure().OnAllSucceededOnlyHasId(ev1.Id);
            misbehaving.Ensure().OnAnyFailedOnlyHasId(ev2.Id);

            misbehavingDelegating.Ensure().OnNewOnlyHas(ev1, ev2);
            misbehavingDelegating.Ensure().OnAllSucceededOnlyHasId(ev1.Id);
            misbehavingDelegating.Ensure().OnAnyFailedOnlyHasId(ev2.Id);
        }
示例#3
0
        public void Unsubscribed_consumer_is_not_invoked_at_all()
        {
            var unsubscribing           = InterceptingConsumer.Behaving();
            var unsubscribingDelegating = new Interceptions();
            var sut = NewSut();

            sut.Subscribe(_ => throw new Exception("FAIL"));
            var sub1 = sut.Subscribe(unsubscribing);
            var sub2 = sut.Subscribe(
                unsubscribingDelegating.InOnNew,
                unsubscribingDelegating.InOnAllSucceeded,
                unsubscribingDelegating.InOnAnyFailed);

            sub1.Dispose();
            sub2.Dispose();

            sut.Emit(Fake.Strings.Random());
            unsubscribing.Ensure().ToBeUnTouched();
            unsubscribingDelegating.Ensure().ToBeUnTouched();
        }
示例#4
0
 internal static InterceptionsHas Ensure(this Interceptions interceptions) => new(interceptions);