public async void MinerWontStartWhenManuallyPaused() { var mockMiner = new Mock <IMiner>(); mockMiner.SetupProperty(x => x.CurrentState); var firstState = new MinerStoppedFromUserRequest(); mockMiner.Object.CurrentState = firstState; var stateHandler = new TrexMiner.MinerStateHandler(mockMiner.Object); var newState = new MinerStartedFromNoGaming(); var eventVerification = AddVerifyableEventHandler(stateHandler); var stateTransitionSuccess = await stateHandler.TransitionToStateAsync(newState); stateTransitionSuccess.Should().Be(false, "We should not start mining when there is no gaming activity even when the user has manually paused."); mockMiner.Verify(x => x.Start(), Times.Never); mockMiner.Object.CurrentState.Should().Be(firstState); eventVerification().Should().Be(false, "No notification should happen when state does not change."); }
public async void StateTransitionDoesNotHappenWhenThereIsNoChange() { var mockMiner = new Mock <IMiner>(); mockMiner.SetupProperty(x => x.CurrentState); var firstState = new MinerStartedFromNoGaming(); mockMiner.Object.CurrentState = firstState; var stateHandler = new TrexMiner.MinerStateHandler(mockMiner.Object); var newState = new MinerStartedFromNoGaming(); var eventVerification = AddVerifyableEventHandler(stateHandler); var stateTransitionSuccess = await stateHandler.TransitionToStateAsync(newState); stateTransitionSuccess.Should().Be(false, "We should not transition state when we are already in that state."); mockMiner.Verify(x => x.Start(), Times.Never); mockMiner.Object.CurrentState.Should().Be(firstState); eventVerification().Should().Be(false, "we should not be notified if state transition failed."); }
public async void MinerStartsFromNogaming() { var mockMiner = new Mock <IMiner>(); mockMiner.SetupProperty(x => x.CurrentState); var firstState = new UnknownMinerState(); mockMiner.Object.CurrentState = firstState; var stateHandler = new TrexMiner.MinerStateHandler(mockMiner.Object); var newState = new MinerStartedFromNoGaming(); var eventVerification = AddVerifyableEventHandler(stateHandler); var stateTransitionSuccess = await stateHandler.TransitionToStateAsync(newState); stateTransitionSuccess.Should().Be(true, "We should start when there is no gaming activity"); mockMiner.Verify(x => x.Start(), Times.Once); mockMiner.Object.CurrentState.Should().Be(newState); eventVerification().Should().Be(true, "we should be notified during successful state transition."); }
public async void UserCanOnlySuccessfullyStartWhenTheyHavePaused() { var mockMiner = new Mock <IMiner>(); mockMiner.SetupProperty(x => x.CurrentState); var firstState = new MinerStartedFromNoGaming(); mockMiner.Object.CurrentState = firstState; var stateHandler = new TrexMiner.MinerStateHandler(mockMiner.Object); var newState = new MinerStartedFromUserRequest(); var eventVerification = AddVerifyableEventHandler(stateHandler); var stateTransitionSuccess = await stateHandler.TransitionToStateAsync(newState); stateTransitionSuccess.Should().Be(false, "We should not transition state when the user has not paused."); mockMiner.Verify(x => x.Start(), Times.Never); mockMiner.Object.CurrentState.Should().Be(firstState); eventVerification().Should().Be(false, "we should not be notified if state transition failed."); }
public async void MinerStopsWhenManuallyPaused() { var mockMiner = new Mock <IMiner>(); mockMiner.SetupProperty(x => x.CurrentState); var firstState = new MinerStartedFromNoGaming(); mockMiner.Object.CurrentState = firstState; var stateHandler = new TrexMiner.MinerStateHandler(mockMiner.Object); var newState = new MinerStoppedFromUserRequest(); var eventVerification = AddEventHandler(stateHandler, newState); var stateTransitionSuccess = await stateHandler.TransitionToStateAsync(newState); stateTransitionSuccess.Should().Be(true, "We should pause from user request if running."); mockMiner.Verify(x => x.Stop(), Times.Once); mockMiner.Object.CurrentState.Should().Be(newState); eventVerification().Should().Be(true, "We should be notified during successful state transition."); }