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")); }