コード例 #1
0
ファイル: DispatchTests.cs プロジェクト: pearcefleming/Fluxor
        public async Task WhenSynchronousEffectThrowsException_ThenStillExecutesSubsequentEffects()
        {
            var subject = new TestStore();
            var action  = new object();

            var mockSynchronousEffectThatThrows = new Mock <IEffect>();

            mockSynchronousEffectThatThrows
            .Setup(x => x.ShouldReactToAction(action))
            .Returns(true);
            mockSynchronousEffectThatThrows
            .Setup(x => x.HandleAsync(action, subject))
            .ThrowsAsync(new NotImplementedException());

            var mockEffectThatFollows = new Mock <IEffect>();

            mockEffectThatFollows
            .Setup(x => x.ShouldReactToAction(action))
            .Returns(true);

            await subject.InitializeAsync();

            subject.AddEffect(mockSynchronousEffectThatThrows.Object);
            subject.AddEffect(mockEffectThatFollows.Object);
            subject.Dispatch(action);

            mockSynchronousEffectThatThrows.Verify(x => x.HandleAsync(action, subject));
            mockEffectThatFollows.Verify(x => x.HandleAsync(action, subject));
        }
コード例 #2
0
ファイル: DispatchTests.cs プロジェクト: pearcefleming/Fluxor
        public async Task WhenCalled_ThenTriggersOnlyEffectsThatHandleTheDispatchedAction()
        {
            var mockIncompatibleEffect = new Mock <IEffect>();

            mockIncompatibleEffect
            .Setup(x => x.ShouldReactToAction(It.IsAny <object>()))
            .Returns(false);
            var mockCompatibleEffect = new Mock <IEffect>();

            mockCompatibleEffect
            .Setup(x => x.ShouldReactToAction(It.IsAny <object>()))
            .Returns(true);

            var subject = new TestStore();
            await subject.InitializeAsync();

            subject.AddEffect(mockIncompatibleEffect.Object);
            subject.AddEffect(mockCompatibleEffect.Object);

            var action = new TestAction();

            subject.Dispatch(action);

            mockIncompatibleEffect.Verify(x => x.HandleAsync(action, It.IsAny <IDispatcher>()), Times.Never);
            mockCompatibleEffect.Verify(x => x.HandleAsync(action, It.IsAny <IDispatcher>()), Times.Once);
        }
コード例 #3
0
 public UnhandledExceptionTests()
 {
     Subject = new TestStore();
     Subject.AddEffect(new EffectThatThrowsSimpleException());
     Subject.AddEffect(new EffectThatThrowsAggregateException());
     Subject.InitializeAsync().Wait();
 }
コード例 #4
0
        public async Task WhenStoreIsInitialized_ThenCallsInitializeAsyncOnAllRegisteredMiddlewares()
        {
            var subject = new TestStore();
            await subject.InitializeAsync();

            var mockMiddleware = new Mock <IMiddleware>();

            subject.AddMiddleware(mockMiddleware.Object);

            mockMiddleware
            .Verify(x => x.InitializeAsync(subject));
        }
コード例 #5
0
ファイル: DispatchTests.cs プロジェクト: pearcefleming/Fluxor
        public async Task WhenCalled_ThenCallsBeforeDispatchOnAllMiddlewares()
        {
            var testAction     = new TestAction();
            var mockMiddleware = MockMiddlewareFactory.Create();
            var subject        = new TestStore();
            await subject.InitializeAsync();

            subject.AddMiddleware(mockMiddleware.Object);

            subject.Dispatch(testAction);

            mockMiddleware
            .Verify(x => x.BeforeDispatch(testAction), Times.Once);
        }
コード例 #6
0
ファイル: DispatchTests.cs プロジェクト: pearcefleming/Fluxor
        public async Task WhenCalled_ThenPassesActionOnToAllFeatures()
        {
            var mockFeature = MockFeatureFactory.Create();
            var subject     = new TestStore();

            subject.AddFeature(mockFeature.Object);
            await subject.InitializeAsync();

            var testAction = new TestAction();

            subject.Dispatch(testAction);

            mockFeature
            .Verify(x => x.ReceiveDispatchNotificationFromStore(testAction));
        }
コード例 #7
0
ファイル: DispatchTests.cs プロジェクト: pearcefleming/Fluxor
        public async Task WhenMiddlewareForbidsIt_ThenDoesNotSendActionToFeatures()
        {
            var testAction     = new TestAction();
            var mockFeature    = MockFeatureFactory.Create();
            var mockMiddleware = MockMiddlewareFactory.Create();

            mockMiddleware
            .Setup(x => x.MayDispatchAction(testAction))
            .Returns(false);
            var subject = new TestStore();
            await subject.InitializeAsync();

            subject.Dispatch(testAction);

            mockFeature
            .Verify(x => x.ReceiveDispatchNotificationFromStore(testAction), Times.Never);
        }
コード例 #8
0
ファイル: DispatchTests.cs プロジェクト: pearcefleming/Fluxor
        public async Task WhenIsInsideMiddlewareChange_ThenDoesNotDispatchActions()
        {
            var mockMiddleware = MockMiddlewareFactory.Create();

            var subject = new TestStore();
            await subject.InitializeAsync();

            subject.AddMiddleware(mockMiddleware.Object);

            var testAction = new TestAction();

            using (subject.BeginInternalMiddlewareChange())
            {
                subject.Dispatch(testAction);
            }

            mockMiddleware.Verify(x => x.MayDispatchAction(testAction), Times.Never);
        }
コード例 #9
0
ファイル: DispatchTests.cs プロジェクト: pearcefleming/Fluxor
        public async Task WhenFinished_ThenDispatchesTasksFromRegisteredEffects()
        {
            var mockFeature   = MockFeatureFactory.Create();
            var actionToEmit1 = new TestActionFromEffect1();
            var actionToEmit2 = new TestActionFromEffect2();
            var actionsToEmit = new object[] { actionToEmit1, actionToEmit2 };
            var subject       = new TestStore();
            await subject.InitializeAsync();

            subject.AddFeature(mockFeature.Object);
            subject.AddEffect(new EffectThatEmitsActions <TestAction>(actionsToEmit));

            subject.Dispatch(new TestAction());

            mockFeature
            .Verify(x => x.ReceiveDispatchNotificationFromStore(actionToEmit1), Times.Once);
            mockFeature
            .Verify(x => x.ReceiveDispatchNotificationFromStore(actionToEmit2), Times.Once);
        }
コード例 #10
0
        public async Task WhenStoreHasAlreadyBeenInitialized_ThenCallsAfterInitializeAllMiddlewares()
        {
            var subject        = new TestStore();
            var signal         = new ManualResetEvent(false);
            var mockMiddleware = new Mock <IMiddleware>();

            mockMiddleware
            .Setup(x => x.AfterInitializeAllMiddlewares())
            .Callback(() => signal.Set());

            await subject.InitializeAsync();

            subject.AddMiddleware(mockMiddleware.Object);

            // Wait no more than 1 second for AfterInitializeAllMiddlewares to be executed
            signal.WaitOne(TimeSpan.FromSeconds(1));

            mockMiddleware
            .Verify(x => x.AfterInitializeAllMiddlewares());
        }