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