public void RunUntilBookmarkShouldRunUntilIdleWithBookmarkNameAndTimeout()
        {
            // Arrange
            const string ExpectedBookmarkName = "Test";
            var workflowApplication =
                new WorkflowApplication(new TestBookmark<int> { BookmarkName = ExpectedBookmarkName });

            // Act
            var result = workflowApplication.RunUntilBookmark(Constants.Timeout, ExpectedBookmarkName);

            // Assert
            Assert.IsInstanceOfType(result, typeof(WorkflowIdleEpisodeResult));
            Assert.AreEqual(ActivityInstanceState.Executing, result.State);
        }
        public void RunUntilBookmarkNoNameRunUntilIdleWithAnyBookmarkName()
        {
            // Arrange
            const string ExpectedBookmarkName1 = "Test1";
            const string ExpectedBookmarkName2 = "Test2";
            var workflowApplication =
                new WorkflowApplication(
                    new Parallel
                        {
                            Branches =
                                {
                                    new TestBookmark<int> { BookmarkName = ExpectedBookmarkName1 },
                                    new TestBookmark<int> { BookmarkName = ExpectedBookmarkName2 },
                                }
                        });

            // Act
            WorkflowEpisode.DefaultTimeout = Constants.Timeout;

            var result = workflowApplication.RunUntilBookmark();

            // Assert
            Assert.IsInstanceOfType(result, typeof(WorkflowIdleEpisodeResult));
            Assert.AreEqual(ActivityInstanceState.Executing, result.State);
        }
        public void ResumeUntilBookmarkShouldTimeoutOnBadName()
        {
            // Arrange
            const string ExpectedBookmarkName1 = "Test1";
            const string ExpectedBookmarkName2 = "Test2";
            var workflowApplication =
                new WorkflowApplication(
                    new Sequence
                        {
                            Activities =
                                {
                                    new TestBookmark<int> { BookmarkName = ExpectedBookmarkName1 },
                                    new TestBookmark<int> { BookmarkName = ExpectedBookmarkName2 },
                                }
                        });

            workflowApplication.RunUntilBookmark(ExpectedBookmarkName1);

            // Act / Assert
            AssertHelper.Throws<TimeoutException>(
                () =>
                workflowApplication.ResumeUntilBookmark(ExpectedBookmarkName1, 1, TimeSpan.FromMilliseconds(100), "BAD"));
        }
        public void RunUntilBookmarkNoMatchThrowsTimeout()
        {
            // Arrange
            const string ExpectedBookmarkName1 = "Test1";
            const string ExpectedBookmarkName2 = "Test2";
            var workflowApplication =
                new WorkflowApplication(
                    new Parallel
                        {
                            Branches =
                                {
                                    new TestBookmark<int> { BookmarkName = ExpectedBookmarkName1 },
                                    new TestBookmark<int> { BookmarkName = ExpectedBookmarkName2 },
                                }
                        });
            WorkflowEpisode.DefaultTimeout = TimeSpan.FromMilliseconds(100);

            // Act / Assert
            AssertHelper.Throws<TimeoutException>(() => workflowApplication.RunUntilBookmark("BAD"));
        }
        public void ResumeUntilBookmarkShouldResumeUntilIdleWithBookmarkNameAndTimeout()
        {
            // Arrange
            const string ExpectedBookmarkName1 = "Test1";
            const string ExpectedBookmarkName2 = "Test2";
            var workflowApplication =
                new WorkflowApplication(
                    new Sequence
                        {
                            Activities =
                                {
                                    new TestBookmark<int> { BookmarkName = ExpectedBookmarkName1 },
                                    new TestBookmark<int> { BookmarkName = ExpectedBookmarkName2 },
                                }
                        });

            workflowApplication.RunUntilBookmark(ExpectedBookmarkName1);

            // Act
            var result = workflowApplication.ResumeUntilBookmark(
                ExpectedBookmarkName1, 1, Constants.Timeout, ExpectedBookmarkName2);

            // Assert
            Assert.IsInstanceOfType(result, typeof(WorkflowIdleEpisodeResult));
            Assert.AreEqual(ActivityInstanceState.Executing, result.State);
        }