public void when_getting_version_without_modifications_past_specific_version()
        {
            //setup
            var baseObject = TestHelper.CreateWithNonDefaultProperties<FlatPropertyBag>();
            var change = TestHelper.MakeDontCareChange<FlatPropertyBag>();

            const long targetVersion = 2L;
            
            var controller = new PropertyBagVersionController<FlatPropertyBag>(baseObject,
                                                                               _testHelper.MakeConfiguredCloneFactoryFor<FlatPropertyBag>(),
                                                                               new[]{change},
                                                                               _testHelper.MakeConfiguredVisitorFactory(),
                                                                               _testHelper.MakeConfiguredProxyFactory());

            //act
            controller.WithoutModificationsPast(targetVersion);

            //assert : It must have created a versioning copy of itself, then invoked find children on the clone, then invoked rollback on the clone.
            A.CallTo(() => _testHelper.ProvidedProxyFactory.CreateVersioning<FlatPropertyBag>(null, null, null))
             .WhenArgumentsMatch(args => calledWithBaseObjectAndChangeSet(args, baseObject, change))
             .MustHaveHappened();
            A.CallTo(() => _testHelper.ProvidedVisitorFactory.MakeVisitor<FindAndCopyVersioningChildVisitor>()).MustHaveHappened();
            A.CallTo(() => _testHelper.ProvidedVisitorFactory.MakeRollbackVisitor(targetVersion)).MustHaveHappened();
            A.CallTo(() => _testHelper.ProvidedControlNode.Accept(_testHelper.ProvidedFindAndCopyVersioningChildVisitor)).MustHaveHappened();
            A.CallTo(() => _testHelper.ProvidedControlNode.Accept(_testHelper.ProvidedRollbackVisitor)).MustHaveHappened();
        }