private Func <bool> AddVerifyableEventHandler(TrexMiner.MinerStateHandler handler) { var result = false; handler.MiningInformationChanged += (o, e) => { result = true; }; return(() => { return result; }); }
private Func <bool> AddEventHandler(TrexMiner.MinerStateHandler handler, IMinerState desiredNotificationState) { var result = false; handler.MiningInformationChanged += (o, e) => { result = e.Value.Equals(desiredNotificationState.StateName); }; return(() => { return result; }); }
public async void MinerStoppedFromGaming() { var mockMiner = new Mock <IMiner>(); mockMiner.SetupProperty(x => x.CurrentState); mockMiner.Object.CurrentState = new MinerStartedFromNoGaming(); var stateHandler = new TrexMiner.MinerStateHandler(mockMiner.Object); var newState = new MinerStoppedFromGaming(); var eventVerification = AddEventHandler(stateHandler, newState); var stateTransitionSuccess = await stateHandler.TransitionToStateAsync(newState); stateTransitionSuccess.Should().Be(true, "We should be able to stop from gaming if we started from gaming."); mockMiner.Verify(x => x.Stop(), Times.Once, "The miner should ask to stop every time."); mockMiner.Object.CurrentState.Should().Be(newState, "The state value should reflect the new state."); eventVerification().Should().Be(true, "We should be notified during successful state transition."); }
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 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 MinerDoesNotStopWhenNotRunning() { 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 MinerStoppedFromGaming(); var eventVerification = AddVerifyableEventHandler(stateHandler); var stateTransitionSuccess = await stateHandler.TransitionToStateAsync(newState); stateTransitionSuccess.Should().Be(false, "We should not transition state when not running."); 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 MinerStartsFromUserRequest() { 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 MinerStartedFromUserRequest(); var eventVerification = AddVerifyableEventHandler(stateHandler); var stateTransitionSuccess = await stateHandler.TransitionToStateAsync(newState); stateTransitionSuccess.Should().Be(true, "We should start when the user asks to resume from a pause."); 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 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 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."); }