This is an automated email from the ASF dual-hosted git repository. rombert pushed a commit to annotated tag org.apache.sling.testing.jcr-mock-1.1.10 in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-testing-jcr-mock.git
commit 6e986976903bcbc37d9beb596496195b4efc1db9 Author: Stefan Seifert <[email protected]> AuthorDate: Tue Apr 7 20:35:44 2015 +0000 SLING-4548 workaround for setting jcr:created/jcr:createdBy and new state properly when creating nt:file nodes git-svn-id: https://svn.apache.org/repos/asf/sling/trunk/testing/mocks/jcr-mock@1671940 13f79535-47bb-0310-9956-ffa450edef68 --- .../org/apache/sling/testing/mock/jcr/AbstractItem.java | 4 ++-- .../java/org/apache/sling/testing/mock/jcr/ItemData.java | 11 ++++++++++- .../java/org/apache/sling/testing/mock/jcr/MockNode.java | 8 ++++++++ .../java/org/apache/sling/testing/mock/jcr/MockSession.java | 5 ++++- .../org/apache/sling/testing/mock/jcr/MockNodeTest.java | 8 ++++++++ .../org/apache/sling/testing/mock/jcr/MockSessionTest.java | 13 +++++++++++++ 6 files changed, 45 insertions(+), 4 deletions(-) diff --git a/src/main/java/org/apache/sling/testing/mock/jcr/AbstractItem.java b/src/main/java/org/apache/sling/testing/mock/jcr/AbstractItem.java index 9284fe5..38870cd 100644 --- a/src/main/java/org/apache/sling/testing/mock/jcr/AbstractItem.java +++ b/src/main/java/org/apache/sling/testing/mock/jcr/AbstractItem.java @@ -67,9 +67,9 @@ abstract class AbstractItem implements Item { @Override public boolean isNew() { - return false; + return itemData.isNew(); } - + @Override public Item getAncestor(final int depth) throws RepositoryException { if (depth < 0 || depth > getDepth()) { diff --git a/src/main/java/org/apache/sling/testing/mock/jcr/ItemData.java b/src/main/java/org/apache/sling/testing/mock/jcr/ItemData.java index 64ec7c1..538844f 100644 --- a/src/main/java/org/apache/sling/testing/mock/jcr/ItemData.java +++ b/src/main/java/org/apache/sling/testing/mock/jcr/ItemData.java @@ -37,14 +37,15 @@ class ItemData { private final NodeType nodeType; private Value[] values; private boolean isMultiple; + private boolean isNew; private ItemData(String path, boolean isNode, String uuid, NodeType nodeType) { - super(); this.path = path; this.name = ResourceUtil.getName(path); this.uuid = uuid; this.isNode = isNode; this.nodeType = nodeType; + this.isNew = true; } public String getPath() { @@ -114,6 +115,14 @@ class ItemData { } } + public boolean isNew() { + return isNew; + } + + public void setIsNew(boolean isNew) { + this.isNew = isNew; + } + @Override public int hashCode() { return path.hashCode(); diff --git a/src/main/java/org/apache/sling/testing/mock/jcr/MockNode.java b/src/main/java/org/apache/sling/testing/mock/jcr/MockNode.java index 3913479..f06c3a9 100644 --- a/src/main/java/org/apache/sling/testing/mock/jcr/MockNode.java +++ b/src/main/java/org/apache/sling/testing/mock/jcr/MockNode.java @@ -40,6 +40,7 @@ import javax.jcr.nodetype.NodeType; import javax.jcr.version.Version; import javax.jcr.version.VersionHistory; +import org.apache.commons.lang3.StringUtils; import org.apache.jackrabbit.JcrConstants; import org.apache.jackrabbit.commons.iterator.NodeIteratorAdapter; import org.apache.jackrabbit.commons.iterator.PropertyIteratorAdapter; @@ -64,6 +65,13 @@ class MockNode extends AbstractItem implements Node { ItemData itemData = ItemData.newNode(path, new MockNodeType(primaryNodeTypeName)); Node node = new MockNode(itemData, getSession()); getMockedSession().addItem(itemData); + + // special handling for some node types + if (StringUtils.equals(primaryNodeTypeName, JcrConstants.NT_FILE)) { + node.setProperty(JcrConstants.JCR_CREATED, Calendar.getInstance()); + node.setProperty("jcr:createdBy", getMockedSession().getUserID()); + } + return node; } diff --git a/src/main/java/org/apache/sling/testing/mock/jcr/MockSession.java b/src/main/java/org/apache/sling/testing/mock/jcr/MockSession.java index 3fd661d..41b7db2 100644 --- a/src/main/java/org/apache/sling/testing/mock/jcr/MockSession.java +++ b/src/main/java/org/apache/sling/testing/mock/jcr/MockSession.java @@ -239,7 +239,10 @@ class MockSession implements Session { @Override public void save() throws RepositoryException { - // do nothing + // reset new flags + for (ItemData itemData : this.items.values()) { + itemData.setIsNew(false); + } } @Override diff --git a/src/test/java/org/apache/sling/testing/mock/jcr/MockNodeTest.java b/src/test/java/org/apache/sling/testing/mock/jcr/MockNodeTest.java index b666f5f..fc8ad9a 100644 --- a/src/test/java/org/apache/sling/testing/mock/jcr/MockNodeTest.java +++ b/src/test/java/org/apache/sling/testing/mock/jcr/MockNodeTest.java @@ -20,6 +20,7 @@ package org.apache.sling.testing.mock.jcr; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; import javax.jcr.ItemNotFoundException; @@ -128,4 +129,11 @@ public class MockNodeTest { this.node1.getPrimaryItem(); } + @Test + public void testNtFileNode() throws RepositoryException { + Node ntFile = this.session.getRootNode().addNode("testFile", JcrConstants.NT_FILE); + assertNotNull(ntFile.getProperty(JcrConstants.JCR_CREATED).getDate()); + assertNotNull(ntFile.getProperty("jcr:createdBy").getString()); + } + } diff --git a/src/test/java/org/apache/sling/testing/mock/jcr/MockSessionTest.java b/src/test/java/org/apache/sling/testing/mock/jcr/MockSessionTest.java index 22fd014..51068d7 100644 --- a/src/test/java/org/apache/sling/testing/mock/jcr/MockSessionTest.java +++ b/src/test/java/org/apache/sling/testing/mock/jcr/MockSessionTest.java @@ -247,4 +247,17 @@ public class MockSessionTest { this.session.removeItem("/foo/"); assertFalse("Removing /foo/ should succeed", this.session.nodeExists("/foo")); } + + @Test + public void testNewState() throws RepositoryException { + Node node = this.session.getRootNode().addNode("foo"); + Property property = node.setProperty("testProp", "value123"); + assertTrue(node.isNew()); + assertTrue(property.isNew()); + + this.session.save(); + assertFalse(node.isNew()); + assertFalse(property.isNew()); + } + } -- To stop receiving notification emails like this one, please contact "[email protected]" <[email protected]>.
