public void Should_Handle_IsOpen_Correctly()
        {
            // Arrange
            var timesCalled = 0;

            _stateEngineWrapperMock.Setup(m => m.ShowMessage(It.IsAny <object>(), It.IsAny <string>()))
            .Callback <object, string>((sender, args) =>
            {
                if (args == _messages[EventMessages.Should_Handle_Door_Open])
                {
                    timesCalled++;
                }
            });
            _stateEngineWrapperMock.Setup(m => m.OpenDoor(It.IsAny <object>(), It.IsAny <object>()))
            .Callback <object, object>((sender, args) => { timesCalled++; });

            var microwaveData = new MicrowaveData
            {
                IsOpen = true
            };

            StateEngine.OpenDoor    += _stateEngineWrapperMock.Object.OpenDoor;
            StateEngine.ShowMessage += _stateEngineWrapperMock.Object.ShowMessage;

            // Act
            StateEngine.MicrowaveEngine(microwaveData);

            // Assert
            Assert.Equal(2, timesCalled);
        }
        public void Should_Handle_Closed_Door_Higher_Time_Than_0()
        {
            // Arrange
            var microwaveData = new MicrowaveData
            {
                IsOpen = false,
                Time   = 1337
            };
            var timesCalled = 0;

            _stateEngineWrapperMock.Setup(m => m.SetReady(It.IsAny <object>(), It.IsAny <object>()))
            .Callback <object, object>((sender, args) => { timesCalled++; });
            _stateEngineWrapperMock.Setup(m => m.SetLightReady(It.IsAny <object>(), It.IsAny <object>()))
            .Callback <object, object>((sender, args) => { timesCalled++; });

            StateEngine.SetReady      += _stateEngineWrapperMock.Object.SetReady;
            StateEngine.SetLightReady += _stateEngineWrapperMock.Object.SetLightReady;

            // Act
            StateEngine.MicrowaveEngine(microwaveData);

            // Assert
            Assert.Equal(2, timesCalled);
            Assert.Equal(StateEngine.State.Ready, StateEngine.CurrentState);
        }
        public void Should_Not_Start_When_Door_Is_Open()
        {
            // Arrange
            var microwaveData = new MicrowaveData
            {
                IsOpen         = false,
                Time           = 0,
                IsStartClicked = true
            };
            var timesCalled = 0;

            _stateEngineWrapperMock.Setup(m => m.ShowMessage(It.IsAny <object>(), It.IsAny <string>()))
            .Callback <object, string>((sender, args) =>
            {
                if (args == _messages[EventMessages.Should_Not_Start_When_Door_Is_Open])
                {
                    timesCalled++;
                }
            });

            StateEngine.ShowMessage += _stateEngineWrapperMock.Object.ShowMessage;

            // Act
            StateEngine.MicrowaveEngine(microwaveData);

            // Assert
            Assert.Equal(1, timesCalled);
        }
Ejemplo n.º 4
0
        /// <summary>
        ///     The microwave engine.
        /// </summary>
        /// <param name="currInput">
        ///     The current state of the microwave input.
        /// </param>
        public static void MicrowaveEngine(MicrowaveData currInput)
        {
            switch (CurrentState)
            {
            case State.Closed:
                if (currInput.IsOpen)
                {
                    // If the door is open
                    CurrentState = State.Open;

                    RaiseOpenDoor();
                    RaiseShowMessage($"Door is open");
                }

                else if (currInput.Time > 0)
                {
                    CurrentState = State.Ready;
                    RaiseSetReady();
                    RaiseSetLightReady();
                }
                else if (currInput.IsStartClicked)
                {
                    // If start is clicked and door is closed
                    RaiseShowMessage($"Can not start when the door is open");
                    currInput.IsStartClicked = false;
                }

                break;

            case State.Open:
                if (currInput.IsOpen == false && currInput.Time > 0)
                {
                    // If the door is closed and the timer has been set
                    CurrentState = State.Ready;

                    RaiseCloseDoor();
                    RaiseSetReady();
                    RaiseSetLightReady();
                }
                else if (!currInput.IsOpen)
                {
                    // If door is closed
                    CurrentState = State.Closed;
                    RaiseCloseDoor();
                }
                else if (currInput.IsStartClicked)
                {
                    // If start is pressed
                    RaiseShowMessage("I can't do that like this senpai!");
                    currInput.IsStartClicked = false;
                }

                break;

            case State.Cooking:
                // Door closed and timer 0
                if (currInput.Time <= 0)
                {
                    CurrentState = State.Closed;

                    currInput.IsStartClicked = false;
                    RaiseSetLightInactive();
                    RaiseShowMessage("Your meal is ready");
                }
                else if (currInput.IsOpen && currInput.Time > 0)
                {
                    // If the door is open and timer not 0
                    CurrentState = State.Open;

                    RaiseOpenDoor();
                    currInput.IsStartClicked = false;
                    RaiseSetLightInactive();
                    RaisePauseTimer();
                    RaiseShowMessage($"Close the door en press start to resume cooking");
                }
                else if (!currInput.IsStartClicked)
                {
                    // If the start is clicked off
                    currInput.IsStartClicked = true;
                    RaiseShowMessage("Can not start without a time set");
                }

                break;

            case State.Ready:
                if (currInput.IsOpen)
                {
                    // If the door is open
                    RaiseShowMessage("The door is forcefully closed");
                    currInput.IsOpen = false;
                }
                else if (currInput.IsStartClicked)
                {
                    // If start is pressed
                    CurrentState = State.Cooking;

                    RaiseStartTimer();
                    RaiseSetLightActive();
                    RaiseShowMessage($"The cooking started");
                }
                else if (currInput.Time <= 0)
                {
                    CurrentState = State.Closed;

                    RaiseShowMessage($"The microwave stopped");
                    RaiseSetLightInactive();
                }

                break;

            default:
                throw new Exception("ERROR: Not existing state");
            }
        }