public async Task StateMachineDemoBehaves() { DemoStatemachine demoStateMachine = new DemoStatemachine(DemoStatemachine.UnVerified); DemoContext dc = new DemoContext { UserName = "******" }; demoStateMachine.StateChanges += DemoStateMachine_StateChanges; var time = new ManualTimeProvider(DateTime.UtcNow); await demoStateMachine.Tick(time.Now, dc); Trace.WriteLine("Next time to tick = " + demoStateMachine.NextTimedEventAt); time.AddTime(days: 1); await demoStateMachine.Tick(time.Now, dc); Trace.WriteLine("Next time to tick = " + demoStateMachine.NextTimedEventAt); time.AddTime(days: 1); await demoStateMachine.Tick(time.Now, dc); Trace.WriteLine("Next time to tick = " + demoStateMachine.NextTimedEventAt); time.AddTime(days: 1); // Finally the user verifies their email await demoStateMachine.VerifiesEmail(dc); time.AddTime(days: 1); await demoStateMachine.Tick(time.Now, dc); time.AddTime(days: 1); await demoStateMachine.Tick(time.Now, dc); }
public async Task TestMethod1() { DemoStatemachine demoStateMachine = new DemoStatemachine(DemoStatemachine.UnVerified); DemoContext dc = new DemoContext { UserName = "******" }; demoStateMachine.StateChanges += DemoStateMachine_StateChanges; // Normally you would be looking at the NextTimeEventAt field, and when it's after UtcNow you would call Tick() // For this test, simulate several days going by ... await demoStateMachine.Tick(DateTime.UtcNow.AddDays(1), dc); Trace.WriteLine("Next time to tick = " + demoStateMachine.NextTimedEventAt); await demoStateMachine.Tick(DateTime.UtcNow.AddDays(2), dc); Trace.WriteLine("Next time to tick = " + demoStateMachine.NextTimedEventAt); await demoStateMachine.Tick(DateTime.UtcNow.AddDays(3), dc); Trace.WriteLine("Next time to tick = " + demoStateMachine.NextTimedEventAt); await demoStateMachine.Tick(DateTime.UtcNow.AddDays(4), dc); // Finally the user verifies their email await demoStateMachine.VerifiesEmail(dc); await demoStateMachine.Tick(DateTime.UtcNow.AddDays(5), dc); await demoStateMachine.Tick(DateTime.UtcNow.AddDays(6), dc); }