diff --git a/modeshape-jcr/src/test/java/org/modeshape/jcr/JcrNodeTest.java b/modeshape-jcr/src/test/java/org/modeshape/jcr/JcrNodeTest.java index 35ebbfd..7b5f6f2 100644 --- a/modeshape-jcr/src/test/java/org/modeshape/jcr/JcrNodeTest.java +++ b/modeshape-jcr/src/test/java/org/modeshape/jcr/JcrNodeTest.java @@ -885,4 +885,30 @@ assertNode("/snsFolder/cds:sibling[1]"); assertNode("/snsFolder/cds:sibling[2]"); } + + @Test + public void shouldHaveMixinDefinedInPrimaryNodeType() throws Exception { + // construct node with node type that includes mix:referenceable + // [car:referenceableCar] > car:Car, mix:referenceable + final Node node = session.getRootNode().addNode("node", "car:referenceableCar"); + assertHasMixins(node, JcrConstants.MIX_REFERENCEABLE); // fails + } + + @Test + public void shouldHaveMixinIfAddedMoreThanOnce() throws Exception { + // CND node type definition does not include mixin + final Node goodNode = session.getRootNode().addNode("good", JcrConstants.NT_UNSTRUCTURED); + goodNode.addMixin(JcrConstants.MIX_REFERENCEABLE); + assertHasMixins(goodNode, JcrConstants.MIX_REFERENCEABLE); // success + + // CND node type definition includes mixin + // [car:referenceableCar] > car:Car, mix:referenceable + final Node badNode = session.getRootNode().addNode("bad", "car:referenceableCar"); + + badNode.addMixin("mode:hashed"); // add mixin not defined in CND + assertHasMixins(badNode, "mode:hashed"); // success + + badNode.addMixin(JcrConstants.MIX_REFERENCEABLE); // add mixin already defined in CND + assertHasMixins(badNode, JcrConstants.MIX_REFERENCEABLE); // fails + } }