public void CurrentStateIsReported() { // Arrange using (var testdb = new SqlWorkflowInstanceStoreTest()) { var view = new TestWorkflowView(testdb.CreateInstanceStore()); var model = view.Model; // Act model.New(); // Assert Assert.AreEqual(StateMachineExample.State1, model.CurrentState); } }
public void CtorShouldCreateTracker() { // Arrange using (var testdb = new SqlWorkflowInstanceStoreTest()) { var view = new TestWorkflowView(testdb.CreateInstanceStore()); var model = new WorkflowModel(view); // Act var wi = new WorkflowInstance(model); // Assert Assert.IsNotNull(wi.StateTracker); } }
public void CurrentStateIsNullWhenNew() { // Arrange using (var testdb = new SqlWorkflowInstanceStoreTest()) { var view = new TestWorkflowView(testdb.CreateInstanceStore()); var model = view.Model; // Act var state = model.CurrentState; // Assert Assert.IsNull(state); } }
public void HostIsNotNull() { // Arrange using (var testdb = new SqlWorkflowInstanceStoreTest()) { var view = new TestWorkflowView(testdb.CreateInstanceStore()); var model = new WorkflowModel(view); var wi = new WorkflowInstance(model); // Act wi.New(); // Assert Assert.IsNotNull(wi.Host); } }
public void TransitionsReturnCollectionWhenRun() { // Arrange using (var testdb = new SqlWorkflowInstanceStoreTest()) { var view = new TestWorkflowView(testdb.CreateInstanceStore()); var model = view.Model; model.New(); // Act var actual = model.Transitions; // Assert Assert.AreEqual(2, actual.Count); AssertHelper.OccursInOrder(actual, StateTrigger.T1.ToString(), StateTrigger.T2.ToString()); } }
public void OnCompleteRemovesCurrent() { // Arrange using (var testdb = new SqlWorkflowInstanceStoreTest()) { var view = new TestWorkflowView(testdb.CreateInstanceStore()); var model = view.Model; var completedEvent = new AutoResetEvent(false); model.Workflows.CollectionChanged += (sender, args) => completedEvent.Set(); model.New(); // Act model.ResumeBookmark(StateTrigger.T1); var index1 = model.SelectedIndex; var count1 = model.Workflows.Count; // Complete the workflow model.ResumeBookmark(StateTrigger.T5); completedEvent.WaitOne(Globals.Timeout); var index2 = model.SelectedIndex; var count2 = model.Workflows.Count; // Assert Assert.AreEqual(1, count1); Assert.AreEqual(0, index1); Assert.AreEqual(0, count2); Assert.AreEqual(-1, index2); } }
public void TrackerAccumulatesHistoryAcrossLoad() { using (var testdb = new SqlWorkflowInstanceStoreTest()) { // Arrange var triggers = new[] { ExampleTrigger.T1 }; var activity = new StateMachineExample(); var host = WorkflowApplicationTest.Create(activity); Guid id; StateMachineStateTracker.Attach(host.TestWorkflowApplication, testdb.CreateInstanceStore()); // Act using (host) { try { // Start the workflow and run until it becomes idle with at least one bookmark host.TestWorkflowApplication.RunEpisode(AnyBookmark, Constants.Timeout); // Play each of the triggers foreach (var trigger in triggers) { // Resume the workflow and run until any bookmark host.TestWorkflowApplication.ResumeEpisodeBookmark( trigger.ToString(), Constants.Timeout, AnyBookmark); } host.Persist(Constants.Timeout); host.Unload(Constants.Timeout); id = host.Id; } finally { host.Tracking.Trace(); } } var tracker = StateMachineStateTracker.LoadInstance(id, activity, testdb.ConnectionString); var host2 = WorkflowApplicationTest.Create(activity); StateMachineStateTracker.Attach(host2.TestWorkflowApplication, testdb.InstanceStore, tracker: tracker); host2.Load(id, Constants.Timeout); using (host2) { try { // Resume the workflow and run until any bookmark host2.TestWorkflowApplication.ResumeEpisodeBookmark( ExampleTrigger.T3.ToString(), Constants.Timeout, AnyBookmark); } finally { host.Tracking.Trace(); } } // Assert Assert.IsNotNull(tracker); Assert.AreEqual(3, tracker.StateHistory.Count); } }
public void UnloadShouldUnloadWorkflowApp() { using (var testdb = new SqlWorkflowInstanceStoreTest()) { // Arrange var view = new TestWorkflowView(testdb.CreateInstanceStore()); var model = new WorkflowModel(view); // Create and run the workflow model.New(); // Act // Load the instances from the datbase var workflowInstance = model.CurrentInstance; workflowInstance.Unload(); var isLoaded = workflowInstance.IsLoaded; // Assert Assert.IsFalse(isLoaded); } }
public void IsLoadedReturnsTrueOnNew() { // Arrange using (var testdb = new SqlWorkflowInstanceStoreTest()) { var view = new TestWorkflowView(testdb.CreateInstanceStore()); var model = new WorkflowModel(view); var wi = new WorkflowInstance(model); wi.New(); // Act var actual = wi.IsLoaded; // Assert Assert.IsTrue(actual); } }
public void TrackerShouldLoadInstancesWithXamlx() { using (var testdb = new SqlWorkflowInstanceStoreTest()) { // Arrange testdb.CreateInstanceStore(); // Create a couple of state machines in the persistence store RunSampleStateMachineService(testdb, ExampleTrigger.T1, ExampleTrigger.T2); RunSampleStateMachineService(testdb, ExampleTrigger.T1, ExampleTrigger.T2, ExampleTrigger.T5); // Get the root activity of the workflow service var activity = XamlHelper.Load(Constants.StateMachineServiceExampleXamlx); var instances = StateMachineStateTracker.LoadInstances(activity, testdb.ConnectionString); Assert.IsNotNull(instances); Assert.AreEqual(2, instances.Count); } }
public void CurrentStateMachineNameIsNullWhenNew() { // Arrange using (var testdb = new SqlWorkflowInstanceStoreTest()) { var view = new TestWorkflowView(testdb.CreateInstanceStore()); var model = view.Model; // Act var stateMachineName = model.CurrentStateMachineName; // Assert Assert.AreEqual(WorkflowModel.Unknown, stateMachineName); } }
public void ProcedureExistsReturnsTrueWhenProcDoesExist() { using (var testdb = new SqlWorkflowInstanceStoreTest()) { // Arrange testdb.CreateInstanceStore(); // Act var actual = testdb.ProcedureExists("LoadInstance"); // Assert Assert.IsTrue(actual); } }
public void TrackerShouldLoadInstancesWithActivity() { using (var testdb = new SqlWorkflowInstanceStoreTest()) { // Arrange testdb.CreateInstanceStore(); var id = this.RunSampleStateMachine(testdb, StateTrigger.T1, StateTrigger.T3); // Act var instance = StateTracker.LoadInstance(id, testdb.ConnectionString); // Assert Assert.IsNotNull(instance); Assert.AreEqual(id, instance.InstanceId); } }
public void LoadInstancesLoadsTwo() { using (var testdb = new SqlWorkflowInstanceStoreTest()) { // Arrange testdb.CreateInstanceStore(); // Create a couple of state machines in the persistence store this.RunSampleStateMachine(testdb, StateTrigger.T1, StateTrigger.T3); this.RunSampleStateMachine(testdb, StateTrigger.T1, StateTrigger.T3, StateTrigger.T2); var instances = StateTracker.LoadInstances(testdb.ConnectionString); Assert.IsNotNull(instances); Assert.AreEqual(2, instances.Count); foreach (var stateTracker in instances) { stateTracker.Trace(); } } }
public void ExistsTrueForExistentDatabase() { using (var testdb = new SqlWorkflowInstanceStoreTest()) { // Arrange testdb.CreateInstanceStore(); // Act var actual = SqlWorkflowInstanceStoreManager.InstanceStoreExists( testdb.DatabaseName, testdb.ConnectionString); // Assert Assert.IsTrue(actual); } }
public void DropShouldDropDatabase() { using (var testdb = new SqlWorkflowInstanceStoreTest()) { // Arrange testdb.CreateInstanceStore(); // Act SqlWorkflowInstanceStoreManager.DropInstanceStore( testdb.DatabaseName, testdb.ConnectionString); // Assert Assert.IsFalse(testdb.Exists()); } }
public void TrackerShouldNotLoadInstancesWithBadId() { using (var testdb = new SqlWorkflowInstanceStoreTest()) { // Arrange testdb.CreateInstanceStore(); // Act var instance = StateMachineStateTracker.LoadInstance( Guid.NewGuid(), new StateMachineExample(), testdb.ConnectionString); Assert.IsNull(instance); } }
public void IdIsNotEmptyGuid() { // Arrange using (var testdb = new SqlWorkflowInstanceStoreTest()) { var view = new TestWorkflowView(testdb.CreateInstanceStore()); var model = new WorkflowModel(view); var wi = new WorkflowInstance(model); // Act var id = wi.Id; // Assert Assert.AreEqual(Guid.Empty, id); } }
public void ViewExistsReturnsTrueWhenViewDoesExist() { using (var testdb = new SqlWorkflowInstanceStoreTest()) { // Arrange testdb.CreateInstanceStore(); // Act var actual = testdb.ViewExists("Instances"); // Assert Assert.IsTrue(actual); } }
public void TrackerShouldLoadInstancesWithXaml() { using (var testdb = new SqlWorkflowInstanceStoreTest()) { // Arrange testdb.CreateInstanceStore(); // Create a couple of state machines in the persistence store this.RunSampleStateMachine(testdb, ExampleTrigger.T1, ExampleTrigger.T3); this.RunSampleStateMachine(testdb, ExampleTrigger.T1, ExampleTrigger.T3, ExampleTrigger.T2); var instances = StateMachineStateTracker.LoadInstances( Constants.StateMachineExampleXaml, Constants.StateMachineExample, testdb.ConnectionString); Assert.IsNotNull(instances); Assert.AreEqual(2, instances.Count); } }
public void IdIsLoadedTrackerId() { using (var testdb = new SqlWorkflowInstanceStoreTest()) { // Arrange var view = new TestWorkflowView(testdb.CreateInstanceStore()); var model = new WorkflowModel(view); // Create and run the workflow var id = model.New(); // Act // Load the instances from the datbase model.LoadInstances(view); // Get the id from the state tracker var hostid = model.CurrentInstance.Id; // Assert Assert.AreEqual(hostid, id); } }
public void IsLoadedFalseAfterCreate() { // Arrange using (var testdb = new SqlWorkflowInstanceStoreTest()) { var view = new TestWorkflowView(testdb.CreateInstanceStore()); var model = view.Model; // Act var actual = model.IsLoaded; // Assert Assert.IsFalse(actual); } }
public void IsLoadedFiresPropertyChanged() { // Arrange using (var testdb = new SqlWorkflowInstanceStoreTest()) { var view = new TestWorkflowView(testdb.CreateInstanceStore()); var model = new WorkflowModel(view); var wi = new WorkflowInstance(model); var propChanged = false; wi.PropertyChanged += (sender, args) => { if (!propChanged) { propChanged = args.PropertyName == "IsLoaded"; } }; // Act wi.New(); // Assert Assert.IsTrue(propChanged); } }
public void IsLoadedTrueWhenRun() { // Arrange using (var testdb = new SqlWorkflowInstanceStoreTest()) { var view = new TestWorkflowView(testdb.CreateInstanceStore()); var model = view.Model; model.New(); // Act var actual = model.IsLoaded; // Assert Assert.IsTrue(actual); } }
public void ResumeShouldResume() { // Arrange using (var testdb = new SqlWorkflowInstanceStoreTest()) { var view = new TestWorkflowView(testdb.CreateInstanceStore()); var model = new WorkflowModel(view); var wi = new WorkflowInstance(model); wi.New(); // Act wi.Resume(StateTrigger.T1); // Assert Assert.AreEqual(StateMachineExample.State2, wi.StateTracker.CurrentState); } }
public void LoadReturnsFalseWhenNoCurrentInstance() { // Arrange using (var testdb = new SqlWorkflowInstanceStoreTest()) { var view = new TestWorkflowView(testdb.CreateInstanceStore()); var model = view.Model; // Act var actual = model.Load(); // Assert Assert.IsFalse(actual); } }
public void LoadShouldLoadWorkflowApp() { using (var testdb = new SqlWorkflowInstanceStoreTest()) { // Arrange var view = new TestWorkflowView(testdb.CreateInstanceStore()); var model = view.Model; // Create and run the workflow model.New(); model.Unload(); // Act model.Load(); var isLoaded = model.IsLoaded; // Assert Assert.IsTrue(isLoaded); } }
public void ModelReturnsStateHistory() { // Arrange using (var testdb = new SqlWorkflowInstanceStoreTest()) { var view = new TestWorkflowView(testdb.CreateInstanceStore()); var model = view.Model; // Act model.New(); // Assert Assert.AreEqual(1, model.StateHistory.Count); } }
public void IdIsHostId() { // Arrange using (var testdb = new SqlWorkflowInstanceStoreTest()) { var view = new TestWorkflowView(testdb.CreateInstanceStore()); var model = new WorkflowModel(view); var wi = new WorkflowInstance(model); // Act wi.New(); var hostid = wi.Host.Id; var id = wi.Id; // Assert Assert.AreEqual(hostid, id); } }
public void AttachToInitializedWorkflowServiceHostShouldThrow() { using (var testdb = new SqlWorkflowInstanceStoreTest()) { // Arrange var store = testdb.CreateInstanceStore(); var host = new WorkflowServiceHost( new TestBookmark<int> { BookmarkName = "B1" }, ServiceTest.GetUniqueUri()); host.DurableInstancingOptions.InstanceStore = store; host.Open(); // Act / Assert AssertHelper.Throws<InvalidOperationException>(() => StateMachineStateTracker.Attach(host, store)); } }