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(); }