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

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

            //act
            controller.GetCurrentVersion();

            //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(long.MaxValue)).MustHaveHappened();
            A.CallTo(() => _testHelper.ProvidedControlNode.Accept(_testHelper.ProvidedFindAndCopyVersioningChildVisitor)).MustHaveHappened();
            A.CallTo(() => _testHelper.ProvidedControlNode.Accept(_testHelper.ProvidedRollbackVisitor)).MustHaveHappened();
        }