public async Task ExecuteAsync_does_not_execute_if_CancelRequested() { const SaleState startState = SaleState.Open; var sale = new Sale(saleID: 66) { State = startState }; var sut = new StateTransitionAutoFallbackAsync <Sale, SaleState, SaleEvent>( getStateMachine() , SaleState.Open , SaleState.Open , toState: SaleState.Complete , conditionAsync: (_, inCancelToken) => Task.FromResult(result: true) , name: "test" , priority: 1); using (var cancelSource = new CancellationTokenSource()) { var cancelToken = cancelSource.Token; cancelSource.Cancel(); var parameters = new ExecutionParameters <Sale, SaleEvent>(SaleEvent.Pay, sale, request: null, cancellationToken: cancelToken); var result = await sut.ExecuteAsync(parameters, getDummyResult(wasCancelled : true)); Assert.True(result.WasCancelled); Assert.False(result.WasTransitioned); Assert.Equal(startState, sale.State); } }
public void ExecuteAsync_ConditionAsync_can_be_cancelled() { const SaleState startState = SaleState.Open; var sale = new Sale(saleID: 66) { State = startState }; var sut = new StateTransitionAutoFallbackAsync <Sale, SaleState, SaleEvent>( getStateMachine() , startState , SaleState.Open , toState: SaleState.Complete , conditionAsync: (_, cancellationToken) => { Task.Delay(millisecondsDelay: 999999, cancellationToken: cancellationToken); return(Task.FromResult(!cancellationToken.IsCancellationRequested)); } , name: "test" , priority: 1); using (var cancelSource = new CancellationTokenSource()) { var parameters = new ExecutionParameters <Sale, SaleEvent>(SaleEvent.Pay, sale, cancellationToken: cancelSource.Token); Task.Run(async() => await sut.ExecuteAsync(parameters), cancelSource.Token); cancelSource.Cancel(); Assert.Equal(startState, sale.State); } }
public async Task ExecuteAsync_does_not_change_state_if_condition_not_met() { const SaleState startState = SaleState.Open; const SaleState endState = SaleState.Complete; var sale = new Sale(saleID: 66) { State = startState }; var sut = new StateTransitionAutoFallbackAsync <Sale, SaleState, SaleEvent>( getStateMachine() , startState , SaleState.Open , toState: endState , conditionAsync: (_, inCancelToken) => Task.FromResult(result: false) , name: "test" , priority: 1); await sut.ExecuteAsync(new ExecutionParameters <Sale, SaleEvent>(SaleEvent.Pay, sale), getDummyResult()); Assert.Equal(startState, sale.State); }