()
       {
           public Void execute() throws Throwable
           {
               // Check that the version label is correct
               assertEquals("1.2", NODE_SERVICE.getProperty(testNode, ContentModel.PROP_VERSION_LABEL));
               
               // Check that the content is correct
               ContentReader contentReader = CONTENT_SERVICE.getReader(testNode, ContentModel.PROP_CONTENT);
               assertNotNull(contentReader);
               assertEquals(originalContent, contentReader.getContentString());
               
               // Check the history still has 3 versions
               // The head version is now 1.2
               VersionHistory history = VERSION_SERVICE.getVersionHistory(testNode);
               log.debug("Node version history: " + history);
               for (Version v : history.getAllVersions()) { log.debug(v.getVersionLabel()); }
               
               final Version version1_2 = history.getHeadVersion();
               
               assertEquals(version1_2.getVersionLabel(), history.getHeadVersion().getVersionLabel());
               assertEquals(version1_2.getVersionedNodeRef(), history.getHeadVersion().getVersionedNodeRef());
               assertEquals(3, history.getAllVersions().size());
               
               Version[] versions = history.getAllVersions().toArray(new Version[0]);
               assertEquals("1.2", versions[0].getVersionLabel());
               assertEquals("1.1", versions[1].getVersionLabel());
               assertEquals("1.0", versions[2].getVersionLabel());
               
               assertEquals("1.2", history.getHeadVersion().getVersionLabel());
               return null;
           }
       });
    }
    /**
     * MNT-9369
     * 
     * Initially the ContentModel.PROP_AUTO_VERSION and ContentModel.PROP_AUTO_VERSION_PROPS are true by defaults.
     */
    @Test
    public void testVersioningPropsDefault()
    {
        createTestContent(false);
        Map versionableProps = DICTIONARY_SERVICE.getAspect(ContentModel.ASPECT_VERSIONABLE).getProperties();
        autoVersion = Boolean.parseBoolean(versionableProps.get(ContentModel.PROP_AUTO_VERSION).getDefaultValue());
        autoVersionProps = Boolean.parseBoolean(versionableProps.get(ContentModel.PROP_AUTO_VERSION_PROPS).getDefaultValue());
        TRANSACTION_HELPER.doInTransaction(new RetryingTransactionCallback()
        {
            public Void execute() throws Throwable
            {
                log.debug("Adding versionable aspect.");
                ScriptNode sn = new ScriptNode(testNode, SERVICE_REGISTRY);
                sn.addAspect("cm:versionable");
                return null;
            }
        });
        assertEquals("Incorrect Auto Version property.", autoVersion, NODE_SERVICE.getProperty(testNode, ContentModel.PROP_AUTO_VERSION));
        assertEquals("Incorrect Auto Version Props property.", autoVersionProps, NODE_SERVICE.getProperty(testNode, ContentModel.PROP_AUTO_VERSION_PROPS));
    }
    /**
     * MNT-9369
     * 
     * Initially the ContentModel.PROP_AUTO_VERSION and ContentModel.PROP_AUTO_VERSION_PROPS are true by defaults. We'll set them to false.
     */
    @Test
    public void testVersioningPropsDefaultChanged()
    {
        setUpBootstrap();
        TRANSACTION_HELPER.doInTransaction(new RetryingTransactionCallback()
        {
            public Void execute() throws Throwable
            {
                log.debug("Adding new model.");
                // Create a model node
                PropertyMap properties = new PropertyMap(1);
                properties.put(ContentModel.PROP_MODEL_ACTIVE, true);
                final NodeRef modelNode = NODE_SERVICE.createNode(rootNodeRef, ContentModel.ASSOC_CHILDREN, QName.createQName(NamespaceService.ALFRESCO_URI, "dictionaryModels"),
                        ContentModel.TYPE_DICTIONARY_MODEL, properties).getChildRef();
                assertNotNull(modelNode);
                // Add the model content to the model node
                ContentWriter contentWriter = CONTENT_SERVICE.getWriter(modelNode, ContentModel.PROP_CONTENT, true);
                contentWriter.setEncoding("UTF-8");
                contentWriter.setMimetype(MimetypeMap.MIMETYPE_XML);
                InputStream cmStream = getClass().getClassLoader().getResourceAsStream(TEST_CONTENT_MODEL);
                contentWriter.putContent(IOUtils.toString(cmStream));
                cmStream.close();
                return null;
            }
        });
        Map versionableProps = DICTIONARY_SERVICE.getAspect(ContentModel.ASPECT_VERSIONABLE).getProperties();
        autoVersion = Boolean.parseBoolean(versionableProps.get(ContentModel.PROP_AUTO_VERSION).getDefaultValue());
        autoVersionProps = Boolean.parseBoolean(versionableProps.get(ContentModel.PROP_AUTO_VERSION_PROPS).getDefaultValue());
        createTestContent(false);
        TRANSACTION_HELPER.doInTransaction(new RetryingTransactionCallback()
        {
            public Void execute() throws Throwable
            {
                log.debug("Adding versionable aspect.");
                ScriptNode sn = new ScriptNode(testNode, SERVICE_REGISTRY);
                sn.addAspect("cm:versionable");
                return null;
            }
        });
        assertEquals("Incorrect Auto Version property.", autoVersion, NODE_SERVICE.getProperty(testNode, ContentModel.PROP_AUTO_VERSION));
        assertEquals("Incorrect Auto Version Props property.", autoVersionProps, NODE_SERVICE.getProperty(testNode, ContentModel.PROP_AUTO_VERSION_PROPS));
        revertBootstrap();
    }
}