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