示例#1
0
        public void StateEngineTest()
        {
            {
                // Setup page state
                var pageState = new StateDefinition <Page, PageStatus>(
                    x => x.Status,
                    new StateTransitionDefinition <Page, PageStatus>(PageStatus.Unpublished, PageStatusExtended.ForTranslation),
                    new StateTransitionDefinition <Page, PageStatus>(PageStatusExtended.ForTranslation, PageStatusExtended.ReadToPublish),
                    new StateTransitionDefinition <Page, PageStatus>(PageStatusExtended.ReadToPublish, PageStatus.Published),
                    new StateTransitionDefinition <Page, PageStatus>(PageStatusExtended.ReadToPublish, PageStatus.DeleyPublished)
                {
                    ExpectParameterType = typeof(DeleydPublishArgs),
                    Expect    = (page, o) => o.Date > DateTime.Now,
                    PreAction = (container, page, arg3) => page.TimePublishDate = arg3.Date
                }
                    );

                StateEngine.Add(pageState);
            }

            {
                // the actual test
                var page = new Page();

                using (var uow = new DummyUnitOfWorkContainer())
                {
                    Assert.Throws <StateTransitionNotAllowedException>(() => uow.StateEngine.Execute(page, PageStatus.Published));
                    Assert.Throws <StateTransitionNotAllowedException>(() => uow.StateEngine.Execute(page, PageStatusExtended.ReadToPublish));
                    uow.StateEngine.Execute(page, PageStatusExtended.ForTranslation);
                    Assert.Throws <StateTransitionNotAllowedException>(() => uow.StateEngine.Execute(page, PageStatus.Unpublished));
                    Assert.Throws <StateTransitionNotAllowedException>(() => uow.StateEngine.Execute(page, PageStatus.Published));
                    uow.StateEngine.Execute(page, PageStatusExtended.ReadToPublish);
                    Assert.Throws <StateTransitionNotAllowedException>(() => uow.StateEngine.Execute(page, PageStatus.Unpublished));
                    Assert.Throws <StateTransitionNotAllowedException>(() => uow.StateEngine.Execute(page, PageStatusExtended.ForTranslation));
                    Assert.Throws <StateTransitionNotAllowedException>(() => uow.StateEngine.Execute(page, PageStatusExtended.ReadToPublish));
                    uow.StateEngine.Execute(page, PageStatus.Published);
                }
            }

            Assert.Equal(PageStatus.Get("test"), PageStatus.Get("test"));
            Assert.Equal(PageStatus.Get("test"), PageStatus.Get("test"));
            Assert.Equal(PageStatus.Get("test"), PageStatus.Get("test"));
        }