[ 
https://issues.apache.org/jira/browse/OAK-5229?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15727400#comment-15727400
 ] 

Tobias Bocanegra commented on OAK-5229:
---------------------------------------

{code}
    @Test
    public void setPrimaryTypeFails() throws RepositoryException {
        Node testNode = getNode(TEST_PATH);
        assertEquals("nt:unstructured", 
testNode.getPrimaryNodeType().getName());
        assertEquals("nt:unstructured", 
testNode.getProperty("jcr:primaryType").getString());

        // create subnode that would not be allowed with nt:folder
        testNode.addNode("unstructured_child", NodeType.NT_UNSTRUCTURED);
        getAdminSession().save();

        testNode.setPrimaryType("nt:folder");
        try {
            getAdminSession().save();
/*1*/     fail("Changing the primary type to nt:folder should fail."); 
        } catch (RepositoryException e) {
            // ok
        }

        Session session2 = createAnonymousSession();
        try {
            testNode = session2.getNode(TEST_PATH);
/*2*/     assertEquals("nt:unstructured", 
testNode.getPrimaryNodeType().getName());
            assertEquals("nt:unstructured", 
testNode.getProperty("jcr:primaryType").getString());
        } finally {
            session2.logout();
        }

        getAdminSession().getNode(TEST_PATH + 
"/unstructured_child").setProperty("test", "value");
/*3*/ getAdminSession().save();
    }
{code}

Sample test:
1. saving the changed primary type should fail. 
2. if the check for (1) is disabled, then (2) fails. and nodetype indeed is now 
nt:folder
3. if the check for (1) and (2) is disabled, then (3) fails with exception 
mentioned above

> Using Node.setPrimaryType() should fail if non-matching childnodes
> ------------------------------------------------------------------
>
>                 Key: OAK-5229
>                 URL: https://issues.apache.org/jira/browse/OAK-5229
>             Project: Jackrabbit Oak
>          Issue Type: Bug
>          Components: core
>    Affects Versions: 1.5.14
>            Reporter: Tobias Bocanegra
>
> 1. Assume the following:
> {noformat}
> /testNode [nt:unstructured]
>   /unstructured_child [nt:unstructured]
> {noformat}
> 2. setting "/testNode".setPrimaryType("nt:folder")
> the above works, leaving the repository in an inconsistent state.
> subsequent calls to "/testNiode/unstructured_child".setProperty() will fail:
> {noformat}
> javax.jcr.nodetype.ConstraintViolationException: OakConstraint0001: 
> /test_node[[nt:folder]]: No matching definition found for child node 
> unstructured_child with effective type [nt:unstructured]
> {noformat}



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to