public void TestPoisionPill()
        {
            ILogic <AppState, TestAction> logic = new CancelableLogic();
            Mock <IMultiDispatcher>       mock  = new Mock <IMultiDispatcher>();

            Task t = logic.Process(() => new AppState(), new TestAction(), mock.Object);

            logic.Cancel(new PoisonPill("Killing"));

            Assert.IsTrue(t.IsCanceled);
        }
        public void TestDispatchingCancel()
        {
            Mock <IStore <AppState> > storeMock = new Mock <IStore <AppState> >();
            CancelableLogic           logic     = new CancelableLogic();

            IStore <AppState> store = storeMock.Object.ConfigureLogic(x => x.AddLogics(logic));

            store.Dispatch(new TestAction());

            store.Dispatch(new CancelTestAction());

            Assert.IsTrue(logic.ProcessTask.IsCanceled);
        }
        public void TestNonFatalPosionPill()
        {
            Mock <IStore <AppState> > storeMock = new Mock <IStore <AppState> >();
            CancelableLogic           logic     = new CancelableLogic();

            IStore <AppState> store = storeMock.Object.ConfigureLogic(x => x.AddLogics(logic));

            store.Dispatch(new TestAction());

            store.Dispatch(new PoisonPill("test", kill: false));

            Assert.IsTrue(logic.ProcessTask.IsCanceled);

            store.Dispatch(new TestAction());

            Assert.False(logic.ProcessTask.IsCanceled);
        }
        public void TestCannotProcessKilledLogic()
        {
            Mock <IStore <AppState> > storeMock = new Mock <IStore <AppState> >();
            CancelableLogic           logic     = new CancelableLogic();

            IStore <AppState> store = storeMock.Object.ConfigureLogic(x => x.AddLogics(logic));

            logic.OnProcessExecuted = false;
            store.Dispatch(new TestAction());

            Assert.True(logic.OnProcessExecuted);

            store.Dispatch(new PoisonPill("test"));

            logic.OnProcessExecuted = false;
            var result = (logic as ILogic <AppState, TestAction>).Process(() => store.State, new TestAction(), null);

            Assert.False(logic.OnProcessExecuted);
        }
        public void TestPoisionPillWillNeverBeProcessed()
        {
            Mock <IStore <AppState> > storeMock           = new Mock <IStore <AppState> >();
            CancelableLogic           logic               = new CancelableLogic();
            PoisonPillProcessor       poisonPillProcessor = new PoisonPillProcessor();

            IStore <AppState> store = storeMock.Object.ConfigureLogic(x =>
            {
                x.AddLogics(logic);
                x.AddLogics(poisonPillProcessor);
            });

            store.Dispatch(new TestAction());

            store.Dispatch(new PoisonPill("test"));

            Assert.IsTrue(logic.ProcessTask.IsCanceled);

            Assert.False(poisonPillProcessor.OnProcessExecuted);
        }
        public void TestCancelActionWillBeFurtherProcessed()
        {
            Mock <IStore <AppState> > storeMock             = new Mock <IStore <AppState> >();
            CancelableLogic           logic                 = new CancelableLogic();
            CancelTestActionProcessor cancelActionProcessor = new CancelTestActionProcessor();

            IStore <AppState> store = storeMock.Object.ConfigureLogic(x =>
            {
                x.AddLogics(logic);
                x.AddLogics(cancelActionProcessor);
            });

            store.Dispatch(new TestAction());

            store.Dispatch(new CancelTestAction());

            Assert.IsTrue(logic.ProcessTask.IsCanceled);

            Assert.True(cancelActionProcessor.OnProcessExecuted);
        }
        public void TestCannotPreprocessKilledLogic()
        {
            Mock <IStore <AppState> > storeMock = new Mock <IStore <AppState> >();
            CancelableLogic           logic     = new CancelableLogic();

            IStore <AppState> store = storeMock.Object.ConfigureLogic(x => x.AddLogics(logic));

            store.Dispatch(new TestAction());

            store.Dispatch(new PoisonPill("test"));

            Assert.IsTrue(logic.ProcessTask.IsCanceled);

            store.Dispatch(new TestAction());

            Assert.True(logic.ProcessTask.IsCanceled);

            var result = (logic as ILogic <AppState, TestAction>).PreProcess(store, new TestAction()).Result;

            Assert.False(result.ContinueToNextStep);
        }