public void GetAvailableEvents_WhenValidState_ReturnsAvailableEvents(
            string currentState, string[] expectedEvents)
        {
            var sut = new StateMachine(GetTestTransitionTable());

            IEnumerable<string> result = sut.GetAvailableEvents(currentState);

            Assert.Equal(expectedEvents, result.ToArray());
        }
        public void GetAvailableEvents_WhenInvalidState_Throws()
        {
            var sut = new StateMachine(GetTestTransitionTable());

            var ex = Assert.Throws<InvalidOperationException>(
                () => sut.GetAvailableEvents("Bogus"));

            Assert.Equal("Invalid state: 'Bogus'.", ex.Message);
        }
        public void GetAvailableEvents_WhenTerminalState_ReturnsEmpty()
        {
            const string TerminalState = "Terminal";

            var transitionTable =
                new List<Transition>
                    {
                        new Transition("Whatever", "something", TerminalState)
                    };

            var sut = new StateMachine(transitionTable);

            IEnumerable<string> result = sut.GetAvailableEvents(TerminalState);

            Assert.Empty(result);
        }
        public void GetAvailableEvents_WhenCurrentStateIsNull_Throws()
        {
            var sut = new StateMachine(GetTestTransitionTable());

            Assert.Throws<ArgumentNullException>(
                () => sut.GetAvailableEvents(null));
        }