This is an automated email from the ASF dual-hosted git repository. rombert pushed a commit to annotated tag org.apache.sling.resourcebuilder-1.0.0 in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-resourcebuilder.git
commit feae532aeb12eb8fe2391ec279301d30f911f0e1 Author: Bertrand Delacretaz <[email protected]> AuthorDate: Thu Dec 10 16:10:05 2015 +0000 SLING-5356 - test default mime-type and last-modified values git-svn-id: https://svn.apache.org/repos/asf/sling/trunk/bundles/commons/resourcebuilder@1719103 13f79535-47bb-0310-9956-ffa450edef68 --- pom.xml | 17 ++++- .../resourcebuilder/impl/ResourceBuilderImpl.java | 25 +++++-- .../impl/ResourceBuilderImplTest.java | 79 +++++++++++++++++----- 3 files changed, 99 insertions(+), 22 deletions(-) diff --git a/pom.xml b/pom.xml index ca8feba..fc668f7 100644 --- a/pom.xml +++ b/pom.xml @@ -51,7 +51,16 @@ <groupId>org.apache.felix</groupId> <artifactId>maven-scr-plugin</artifactId> </plugin> - </plugins> + <plugin> + <groupId>org.apache.rat</groupId> + <artifactId>apache-rat-plugin</artifactId> + <configuration> + <excludes> + <exclude>src/test/resources/**</exclude> + </excludes> + </configuration> + </plugin> + </plugins> </build> <dependencies> @@ -75,6 +84,12 @@ <scope>provided</scope> </dependency> <dependency> + <groupId>org.apache.sling</groupId> + <artifactId>org.apache.sling.commons.mime</artifactId> + <version>2.1.2</version> + <scope>provided</scope> + </dependency> + <dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>2.4</version> diff --git a/src/main/java/org/apache/sling/resourcebuilder/impl/ResourceBuilderImpl.java b/src/main/java/org/apache/sling/resourcebuilder/impl/ResourceBuilderImpl.java index bb278d1..51618b8 100644 --- a/src/main/java/org/apache/sling/resourcebuilder/impl/ResourceBuilderImpl.java +++ b/src/main/java/org/apache/sling/resourcebuilder/impl/ResourceBuilderImpl.java @@ -27,6 +27,7 @@ import org.apache.sling.api.resource.PersistenceException; import org.apache.sling.api.resource.Resource; import org.apache.sling.api.resource.ResourceResolver; import org.apache.sling.api.resource.ResourceUtil; +import org.apache.sling.commons.mime.MimeTypeService; import org.apache.sling.resourcebuilder.api.ResourceBuilder; /** ResourceBuilder implementation */ @@ -44,7 +45,10 @@ public class ResourceBuilderImpl implements ResourceBuilder { public static final String JCR_CONTENT = "jcr:content"; public static final String NT_RESOURCE = "nt:resource"; - public ResourceBuilderImpl(Resource parent) { + private final MimeTypeService mimeTypeService; + + public ResourceBuilderImpl(Resource parent, MimeTypeService mts) { + mimeTypeService = mts; if(parent == null) { throw new IllegalArgumentException("Parent resource is null"); } @@ -136,6 +140,20 @@ public class ResourceBuilderImpl implements ResourceBuilder { } } + protected String getMimeType(String filename, String userSuppliedMimeType) { + if(userSuppliedMimeType != null) { + return userSuppliedMimeType; + } + return mimeTypeService.getMimeType(filename); + } + + protected long getLastModified(long userSuppliedValue) { + if(userSuppliedValue < 0) { + return System.currentTimeMillis(); + } + return userSuppliedValue; + } + @Override public ResourceBuilder file(String filename, InputStream data, String mimeType, long lastModified) { Resource file = null; @@ -157,9 +175,8 @@ public class ResourceBuilderImpl implements ResourceBuilder { file = resolver.create(currentParent, name, null); final Map<String, Object> props = new HashMap<String, Object>(); props.put(JCR_PRIMARYTYPE, NT_RESOURCE); - // TODO get mime type from MimeTypeService - props.put(JCR_MIMETYPE, mimeType); - props.put(JCR_LASTMODIFIED, lastModified >= 0 ? lastModified : System.currentTimeMillis()); + props.put(JCR_MIMETYPE, getMimeType(filename, mimeType)); + props.put(JCR_LASTMODIFIED, getLastModified(lastModified)); props.put(JCR_DATA, data); resolver.create(file, JCR_CONTENT, props); } catch(PersistenceException pex) { diff --git a/src/test/java/org/apache/sling/resourcebuilder/impl/ResourceBuilderImplTest.java b/src/test/java/org/apache/sling/resourcebuilder/impl/ResourceBuilderImplTest.java index dbf0253..9807507 100644 --- a/src/test/java/org/apache/sling/resourcebuilder/impl/ResourceBuilderImplTest.java +++ b/src/test/java/org/apache/sling/resourcebuilder/impl/ResourceBuilderImplTest.java @@ -18,24 +18,27 @@ */ package org.apache.sling.resourcebuilder.impl; -import static org.junit.Assert.assertTrue; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertTrue; +import static org.junit.Assert.fail; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; import java.util.Map; +import java.util.Random; import java.util.UUID; import org.apache.commons.io.IOUtils; -import org.apache.sling.api.resource.PersistenceException; import org.apache.sling.api.resource.Resource; import org.apache.sling.api.resource.ResourceResolver; import org.apache.sling.api.resource.ResourceUtil; import org.apache.sling.api.resource.ValueMap; +import org.apache.sling.commons.mime.MimeTypeService; import org.apache.sling.testing.mock.sling.ResourceResolverType; import org.apache.sling.testing.mock.sling.junit.SlingContext; +import org.apache.sling.testing.mock.sling.services.MockMimeTypeService; import org.junit.Before; import org.junit.Rule; import org.junit.Test; @@ -44,14 +47,36 @@ public class ResourceBuilderImplTest { private String testRootPath; private ResourceResolver resourceResolver; + private long lastModified; + private Random random = new Random(System.currentTimeMillis()); + private static final MimeTypeService mimeTypeService = new MockMimeTypeService(); @Rule public SlingContext context = new SlingContext(ResourceResolverType.RESOURCERESOLVER_MOCK); - private ResourceBuilderImpl getBuilder(String path) throws PersistenceException { + private ResourceBuilderImpl getBuilder(String path) throws Exception { final Resource root = context.resourceResolver().resolve("/"); assertNotNull("Expecting non-null root", root); - return new ResourceBuilderImpl(resourceResolver.create(root, ResourceUtil.getName(path), null)); + lastModified = random.nextLong(); + + final Resource parent = resourceResolver.create(root, ResourceUtil.getName(path), null); + final ResourceBuilderImpl result = new ResourceBuilderImpl(parent, mimeTypeService) { + @Override + protected long getLastModified(long userSuppliedValue) { + final long now = System.currentTimeMillis(); + final long superValue = super.getLastModified(-1); + final long maxDelta = 60 * 1000L; + if(superValue < now || superValue - now > maxDelta) { + fail("getLastModified does not seem to use current time as its default value"); + } + + if(userSuppliedValue >= 0) { + return super.getLastModified(userSuppliedValue); + } + return lastModified; + } + }; + return result; } @Before @@ -113,7 +138,7 @@ public class ResourceBuilderImplTest { } @Test - public void basicResource() throws PersistenceException { + public void basicResource() throws Exception { getBuilder(testRootPath) .resource("child", "title", "foo") .commit(); @@ -123,11 +148,11 @@ public class ResourceBuilderImplTest { } @Test - public void ensureResourceExists() throws PersistenceException { + public void ensureResourceExists() throws Exception { class MyResourceBuilder extends ResourceBuilderImpl { MyResourceBuilder() { - super(resourceResolver.getResource("/")); + super(resourceResolver.getResource("/"), null); } Resource r(String path) { @@ -142,7 +167,7 @@ public class ResourceBuilderImplTest { } @Test - public void deepResource() throws PersistenceException { + public void deepResource() throws Exception { getBuilder(testRootPath) .resource("a/b/c", "title", "foo") .commit(); @@ -154,7 +179,7 @@ public class ResourceBuilderImplTest { } @Test - public void intermediatePrimaryTypes() throws PersistenceException { + public void intermediatePrimaryTypes() throws Exception { getBuilder(testRootPath) .resource("a/b/c") .withIntermediatePrimaryType("foo") @@ -169,7 +194,7 @@ public class ResourceBuilderImplTest { } @Test - public void resetParent() throws PersistenceException { + public void resetParent() throws Exception { getBuilder(testRootPath) .resource("a/b/c") .resetParent() @@ -181,7 +206,7 @@ public class ResourceBuilderImplTest { } @Test - public void noResetParent() throws PersistenceException { + public void noResetParent() throws Exception { getBuilder(testRootPath) .resource("a/b/c") .resource("d/e") @@ -192,24 +217,24 @@ public class ResourceBuilderImplTest { } @Test - public void getParent() throws PersistenceException { + public void getParent() throws Exception { final Resource parent = getBuilder(testRootPath).getCurrentParent(); assertNotNull(parent); assertEquals(testRootPath, parent.getPath()); } @Test(expected=RuntimeException.class) - public void missingParentFails() throws PersistenceException { - new ResourceBuilderImpl(null).resource("foo"); + public void missingParentFails() throws Exception { + new ResourceBuilderImpl(null, null).resource("foo"); } @Test(expected=IllegalArgumentException.class) - public void absolutePathFails() throws PersistenceException { + public void absolutePathFails() throws Exception { getBuilder(testRootPath).resource("/absolute"); } @Test - public void simpleTree() throws PersistenceException { + public void simpleTree() throws Exception { getBuilder(testRootPath) .resource("a/b/c", "title", "foo", "count", 21) .siblingsMode() @@ -231,7 +256,7 @@ public class ResourceBuilderImplTest { } @Test - public void treeWithFiles() throws PersistenceException, IOException { + public void treeWithFiles() throws Exception { getBuilder(testRootPath) .resource("apps/myapp/components/resource") .siblingsMode() @@ -262,4 +287,24 @@ public class ResourceBuilderImplTest { assertFile("apps/content/myapp.json", "MT4", "\"sling:resourceType\":\"its/resource/type\"", 45L); } + + @Test + public void autoMimetype() throws Exception { + getBuilder(testRootPath) + .file("models.js", getClass().getResourceAsStream("/models.js"), null, 42) + .commit() + ; + assertFile("models.js", + "application/javascript", "function someJavascriptFunction()", 42L); + } + + @Test + public void autoLastModified() throws Exception { + getBuilder(testRootPath) + .file("models.js", getClass().getResourceAsStream("/models.js"), "MT1", -1) + .commit() + ; + assertFile("models.js", + "MT1", "function someJavascriptFunction()", lastModified); + } } -- To stop receiving notification emails like this one, please contact "[email protected]" <[email protected]>.
