public void VisitSqlSubStatementExpression_WithChanges()
        {
            var sqlStatement = SqlStatementModelObjectMother.CreateSqlStatement(Expression.Constant(0));
            var expression   = new SqlSubStatementExpression(sqlStatement);

            var fakeResolvedStatement = SqlStatementModelObjectMother.CreateSqlStatement(Expression.Constant(1));

            _stageMock
            .Expect(mock => mock.ResolveSqlStatement(sqlStatement, _mappingResolutionContext))
            .Return(fakeResolvedStatement);
            var fakeSimplifiedExpression = Expression.Constant(0);

            _groupAggregateSimplifierMock
            .Expect(
                mock => mock.SimplifyIfPossible(
                    Arg <SqlSubStatementExpression> .Matches(e => ReferenceEquals(e.SqlStatement, fakeResolvedStatement)),
                    Arg.Is(expression.SqlStatement.SelectProjection)))
            .Return(fakeSimplifiedExpression);

            var result = _visitor.Visit(expression);

            _stageMock.VerifyAllExpectations();
            _groupAggregateSimplifierMock.VerifyAllExpectations();
            Assert.That(result, Is.SameAs(fakeSimplifiedExpression));
        }