예제 #1
0
        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));
        }
예제 #2
0
        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));
        }