public bool TryUndoSteps_WithoutFailure(NonNegativeInt stepsCount) { //arrange var(_, steps) = MigrationTestsContext.GenerateMigrationState(0, stepsCount); var historyStack = new Stack <MigrationItem>(steps); //act var(executionHistory, executionResult) = MigrationHandler.TryUndoSteps(historyStack); var originalVersions = steps.Select(x => x.Version.ToString()); var executedVersions = executionHistory.Select(r => r.Version.ToString()); //assert return(executionResult.Type is ExecutionResultType.Success && originalVersions.SequenceEqual(executedVersions)); }
public Property TryUndoSteps_WithFailure(NonNegativeInt stepsCount, NonNegativeInt failurePosition) { bool Predicate() { //arrange var(_, steps) = MigrationTestsContext.GenerateMigrationState(0, stepsCount); steps[failurePosition.Item - 1] = MigrationTestsContext.MigrationItem(steps[failurePosition.Item - 1].Version, ExecutionResult.Failure(null), throwExceptionOnUndo: true); var historyStack = new Stack <MigrationItem>(steps); //act var(executionHistory, executionResult) = MigrationHandler.TryUndoSteps(historyStack); var originalVersions = steps.Take(failurePosition.Item - 1).Select(x => x.Version.ToString()); var executedVersions = executionHistory.Reverse().Select(r => r.Version.ToString()); //assert return(executionResult.Type is ExecutionResultType.Failure && originalVersions.SequenceEqual(executedVersions)); } return(new Func <bool>(Predicate).When(stepsCount.Item >= failurePosition.Item && failurePosition.Item > 0)); }