Some more testing, creating a new random container for each test to avoid 
side-effects.


Project: http://git-wip-us.apache.org/repos/asf/marmotta/repo
Commit: http://git-wip-us.apache.org/repos/asf/marmotta/commit/d80cd642
Tree: http://git-wip-us.apache.org/repos/asf/marmotta/tree/d80cd642
Diff: http://git-wip-us.apache.org/repos/asf/marmotta/diff/d80cd642

Branch: refs/heads/ldp
Commit: d80cd6421f96a759005be9e7664cdc9a1582cae4
Parents: 7e8b713
Author: Jakob Frank <[email protected]>
Authored: Wed Sep 10 09:58:41 2014 +0200
Committer: Jakob Frank <[email protected]>
Committed: Wed Sep 10 10:01:14 2014 +0200

----------------------------------------------------------------------
 .../ldp/webservices/LdpWebServiceTest.java      | 147 +++++++++++++------
 1 file changed, 105 insertions(+), 42 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/marmotta/blob/d80cd642/platform/marmotta-ldp/src/test/java/org/apache/marmotta/platform/ldp/webservices/LdpWebServiceTest.java
----------------------------------------------------------------------
diff --git 
a/platform/marmotta-ldp/src/test/java/org/apache/marmotta/platform/ldp/webservices/LdpWebServiceTest.java
 
b/platform/marmotta-ldp/src/test/java/org/apache/marmotta/platform/ldp/webservices/LdpWebServiceTest.java
index 7033669..287a173 100644
--- 
a/platform/marmotta-ldp/src/test/java/org/apache/marmotta/platform/ldp/webservices/LdpWebServiceTest.java
+++ 
b/platform/marmotta-ldp/src/test/java/org/apache/marmotta/platform/ldp/webservices/LdpWebServiceTest.java
@@ -20,14 +20,16 @@ package org.apache.marmotta.platform.ldp.webservices;
 import com.jayway.restassured.RestAssured;
 import org.apache.commons.io.IOUtils;
 import org.apache.marmotta.commons.sesame.test.SesameMatchers;
-import org.apache.marmotta.commons.sesame.test.base.SesameMatcher;
 import org.apache.marmotta.commons.util.HashUtils;
 import org.apache.marmotta.commons.vocabulary.LDP;
 import org.apache.marmotta.platform.core.exception.io.MarmottaImportException;
 import org.apache.marmotta.platform.core.test.base.JettyMarmotta;
 import org.apache.marmotta.platform.ldp.util.EntityTagUtils;
+import org.apache.marmotta.platform.ldp.util.LdpUtils;
 import org.apache.marmotta.platform.ldp.webservices.util.HeaderMatchers;
 import org.hamcrest.CoreMatchers;
+import org.hamcrest.Description;
+import org.hamcrest.TypeSafeMatcher;
 import org.junit.AfterClass;
 import org.junit.BeforeClass;
 import org.junit.Test;
@@ -40,6 +42,7 @@ import org.openrdf.model.vocabulary.RDFS;
 import org.openrdf.rio.RDFFormat;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import org.w3.ldp.testsuite.matcher.HttpStatusSuccessMatcher;
 
 import javax.ws.rs.core.EntityTag;
 import javax.ws.rs.core.HttpHeaders;
@@ -47,6 +50,7 @@ import javax.ws.rs.core.Link;
 import javax.ws.rs.core.UriBuilder;
 import java.io.IOException;
 import java.net.URISyntaxException;
+import java.util.regex.Pattern;
 
 import static org.junit.Assert.assertEquals;
 
@@ -87,16 +91,12 @@ public class LdpWebServiceTest {
 
     @Test
     public void testCRUD() {
-        final String testBase = "test";
-        final String containerName = "container1";
         final String resourceName = "resource1";
 
         // The container
-        final String container = 
UriBuilder.fromPath(LdpWebService.PATH).path(testBase).path(containerName).build().toString();
+        final String container = createTestContainer();
         final String mimeType = RDFFormat.TURTLE.getDefaultMIMEType();
 
-        RestAssured.expect().statusCode(404).get(container);
-
         // Create
         final String newResource = RestAssured
             .given()
@@ -121,9 +121,9 @@ public class LdpWebServiceTest {
                 )
                 .header("ETag", HeaderMatchers.hasEntityTag(true)) // FIXME: 
be more specific here
                 .contentType(mimeType)
-                .body(SesameMatchers.rdfStringMatches(mimeType, 
baseUrl+container,
-                        SesameMatchers.hasStatement(new URIImpl(baseUrl + 
container), DCTERMS.MODIFIED, null),
-                        SesameMatchers.hasStatement(new URIImpl(baseUrl + 
container), RDF.TYPE, LDP.BasicContainer)
+                .body(SesameMatchers.rdfStringMatches(mimeType, container,
+                        SesameMatchers.hasStatement(new URIImpl(container), 
DCTERMS.MODIFIED, null),
+                        SesameMatchers.hasStatement(new URIImpl(container), 
RDF.TYPE, LDP.BasicContainer)
                 ))
             .get(container);
 
@@ -139,7 +139,7 @@ public class LdpWebServiceTest {
                 )
                 .header("ETag", HeaderMatchers.hasEntityTag(true)) // FIXME: 
be more specific here
                 .contentType(mimeType)
-                .body(SesameMatchers.rdfStringMatches(mimeType, baseUrl + 
container,
+                .body(SesameMatchers.rdfStringMatches(mimeType, container,
                         SesameMatchers.hasStatement(new URIImpl(newResource), 
DCTERMS.MODIFIED, null),
                         SesameMatchers.hasStatement(new URIImpl(newResource), 
RDF.TYPE, LDP.Resource)
                 ))
@@ -166,17 +166,12 @@ public class LdpWebServiceTest {
 
     @Test
     public void testNR() throws IOException {
-        final String testBase = "test";
-        final String containerName = "container2";
         final String resourceName = "resource1";
 
         // The container
-        final String container = 
UriBuilder.fromPath(LdpWebService.PATH).path(testBase).path(containerName).build().toString();
-        final String newResource = 
UriBuilder.fromUri(container).path(resourceName).build().toString();
+        final String container = createTestContainer();
         final String mimeType = "image/png";
 
-        RestAssured.expect().statusCode(404).get(container);
-
         // Create
         final String binaryResource = RestAssured
             .given()
@@ -186,13 +181,17 @@ public class LdpWebServiceTest {
             .expect()
                 .statusCode(201)
                 .header("Link", CoreMatchers.anyOf( //TODO: RestAssured only 
checks the FIRST header...
-                        HeaderMatchers.isLink(baseUrl + newResource, 
"describedby"),
+                        //  HeaderMatchers.isLink(metaResource, "describedby"),
                         
HeaderMatchers.isLink(LdpWebService.LDP_SERVER_CONSTRAINTS, "describedby"),
                         
HeaderMatchers.isLink(LDP.BasicContainer.stringValue(), "type"))
                 )
             .post(container)
                 .getHeader("Location");
 
+
+
+        final String metaResource = binaryResource.replaceFirst("\\.png$", "");
+
         // now the container hasType
         RestAssured
             .given()
@@ -205,13 +204,13 @@ public class LdpWebServiceTest {
                 )
                 .header("ETag", HeaderMatchers.hasEntityTag(true)) // FIXME: 
be more specific here
                 .contentType(RDFFormat.TURTLE.getDefaultMIMEType())
-                
.body(SesameMatchers.rdfStringMatches(RDFFormat.TURTLE.getDefaultMIMEType(), 
baseUrl + container,
-                        SesameMatchers.hasStatement(new URIImpl(baseUrl + 
container), RDF.TYPE, LDP.Resource),
-                        SesameMatchers.hasStatement(new URIImpl(baseUrl + 
container), RDF.TYPE, LDP.RDFSource),
-                        SesameMatchers.hasStatement(new URIImpl(baseUrl + 
container), RDF.TYPE, LDP.Container),
-                        SesameMatchers.hasStatement(new URIImpl(baseUrl + 
container), RDF.TYPE, LDP.BasicContainer),
-                        SesameMatchers.hasStatement(new URIImpl(baseUrl + 
container), DCTERMS.MODIFIED, null),
-                        SesameMatchers.hasStatement(new URIImpl(baseUrl + 
container), LDP.contains, new URIImpl(binaryResource)))
+                
.body(SesameMatchers.rdfStringMatches(RDFFormat.TURTLE.getDefaultMIMEType(), 
container,
+                        SesameMatchers.hasStatement(new URIImpl(container), 
RDF.TYPE, LDP.Resource),
+                        SesameMatchers.hasStatement(new URIImpl(container), 
RDF.TYPE, LDP.RDFSource),
+                        SesameMatchers.hasStatement(new URIImpl(container), 
RDF.TYPE, LDP.Container),
+                        SesameMatchers.hasStatement(new URIImpl(container), 
RDF.TYPE, LDP.BasicContainer),
+                        SesameMatchers.hasStatement(new URIImpl(container), 
DCTERMS.MODIFIED, null),
+                        SesameMatchers.hasStatement(new URIImpl(container), 
LDP.contains, new URIImpl(binaryResource)))
                 )
             .get(container);
 
@@ -229,13 +228,13 @@ public class LdpWebServiceTest {
                 )
                 .header("ETag", HeaderMatchers.hasEntityTag(true)) // FIXME: 
be more specific here
                 .contentType(RDFFormat.TURTLE.getDefaultMIMEType())
-                
.body(SesameMatchers.rdfStringMatches(RDFFormat.TURTLE.getDefaultMIMEType(), 
baseUrl + newResource,
-                        SesameMatchers.hasStatement(new URIImpl(baseUrl + 
newResource), RDF.TYPE, LDP.Resource),
-                        SesameMatchers.hasStatement(new URIImpl(baseUrl + 
newResource), RDF.TYPE, LDP.RDFSource),
-                        SesameMatchers.hasStatement(new URIImpl(baseUrl + 
newResource), DCTERMS.MODIFIED, null),
-                        SesameMatchers.hasStatement(new URIImpl(baseUrl + 
newResource), DCTERMS.HAS_FORMAT, new URIImpl(binaryResource))
+                
.body(SesameMatchers.rdfStringMatches(RDFFormat.TURTLE.getDefaultMIMEType(), 
metaResource,
+                        SesameMatchers.hasStatement(new URIImpl(metaResource), 
RDF.TYPE, LDP.Resource),
+                        SesameMatchers.hasStatement(new URIImpl(metaResource), 
RDF.TYPE, LDP.RDFSource),
+                        SesameMatchers.hasStatement(new URIImpl(metaResource), 
DCTERMS.MODIFIED, null),
+                        SesameMatchers.hasStatement(new URIImpl(metaResource), 
DCTERMS.HAS_FORMAT, new URIImpl(binaryResource))
                 ))
-            .get(newResource);
+            .get(metaResource);
 
         // now the resource hasType
         RestAssured
@@ -255,7 +254,7 @@ public class LdpWebServiceTest {
                         SesameMatchers.hasStatement(new 
URIImpl(binaryResource), RDF.TYPE, LDP.NonRDFSource),
                         SesameMatchers.hasStatement(new 
URIImpl(binaryResource), DCTERMS.MODIFIED, null),
                         SesameMatchers.hasStatement(new 
URIImpl(binaryResource), DCTERMS.FORMAT, new LiteralImpl(mimeType)),
-                        SesameMatchers.hasStatement(new 
URIImpl(binaryResource), DCTERMS.IS_FORMAT_OF, new URIImpl(baseUrl + 
newResource))
+                        SesameMatchers.hasStatement(new 
URIImpl(binaryResource), DCTERMS.IS_FORMAT_OF, new URIImpl(metaResource))
                 ))
             .get(binaryResource);
 
@@ -281,7 +280,7 @@ public class LdpWebServiceTest {
 
     @Test
     public void testInteractionModel() throws Exception {
-        final String container = baseUrl+LdpWebService.PATH + "/iam";
+        final String container = createTestContainer();
 
         // Try LDPR
         final String ldpr = RestAssured
@@ -316,7 +315,7 @@ public class LdpWebServiceTest {
 
     @Test
     public void testPUT() throws Exception {
-        final String container = baseUrl+LdpWebService.PATH + "/test";
+        final String container = createTestContainer();
 
         final String put_valid = 
IOUtils.toString(LdpWebServiceTest.class.getResourceAsStream("/test_update.ttl"),
 "utf8");
         final String put_invalid = 
IOUtils.toString(LdpWebServiceTest.class.getResourceAsStream("/test_update_invalid.ttl"),
 "utf8");
@@ -418,21 +417,34 @@ public class LdpWebServiceTest {
             .get(resource);
     }
 
+    private String createTestContainer() {
+        return createTestContainer("");
+    }
+
+    private String createTestContainer(String slug) {
+        return RestAssured
+            .given()
+                .header("Slug", String.valueOf(slug))
+                .header(HttpHeaders.CONTENT_TYPE, 
RDFFormat.TURTLE.getDefaultMIMEType())
+                .body("<> a <http://example.com/unit-test> .".getBytes())
+            .expect()
+                .statusCode(HttpStatusSuccessMatcher.isSuccessful())
+                .header(HttpHeaders.LOCATION, CoreMatchers.notNullValue())
+            .post(baseUrl + LdpWebService.PATH)
+                .getHeader(HttpHeaders.LOCATION);
+    }
+
     /**
      * Test for <a 
href="https://issues.apache.org/jira/browse/MARMOTTA-525";>MARMOTTA-525</a>
      */
     @Test
     public void testMARMOTTA_525() {
-        final String testBase = "MARMOTTA_525";
-        final String containerName = "c1";
         final String resourceName = "r1";
 
         // The container
-        final String container = 
UriBuilder.fromPath(LdpWebService.PATH).path(testBase).path(containerName).build().toString();
+        final String container = createTestContainer();
         final String mimeType = RDFFormat.TURTLE.getDefaultMIMEType();
 
-        RestAssured.expect().statusCode(404).get(container);
-
         // Create
         final String newResource = RestAssured
             .given()
@@ -455,9 +467,9 @@ public class LdpWebServiceTest {
                 )
                 .header("ETag", HeaderMatchers.hasEntityTag(true)) // FIXME: 
be more specific here
                 .contentType(mimeType)
-                .body(SesameMatchers.rdfStringMatches(mimeType, 
baseUrl+container,
-                        SesameMatchers.hasStatement(new URIImpl(baseUrl + 
container), DCTERMS.MODIFIED, null),
-                        SesameMatchers.hasStatement(new URIImpl(baseUrl + 
container), RDF.TYPE, LDP.BasicContainer)
+                .body(SesameMatchers.rdfStringMatches(mimeType, container,
+                        SesameMatchers.hasStatement(new URIImpl(container), 
DCTERMS.MODIFIED, null),
+                        SesameMatchers.hasStatement(new URIImpl(container), 
RDF.TYPE, LDP.BasicContainer)
                 ))
             .get(container);
 
@@ -471,7 +483,7 @@ public class LdpWebServiceTest {
                 )
                 .header("ETag", HeaderMatchers.hasEntityTag(true)) // FIXME: 
be more specific here
                 .contentType(mimeType)
-                .body(SesameMatchers.rdfStringMatches(mimeType, baseUrl + 
container,
+                .body(SesameMatchers.rdfStringMatches(mimeType, container,
                         SesameMatchers.hasStatement(new URIImpl(newResource), 
DCTERMS.MODIFIED, null),
                         SesameMatchers.hasStatement(new URIImpl(newResource), 
RDF.TYPE, LDP.Resource)
                 ))
@@ -494,4 +506,55 @@ public class LdpWebServiceTest {
 
     }
 
+    @Test
+    public void testSlugHeader() {
+        final String slug1 = "niceName", slug2 = "with some späcial chars";
+
+        final String container = createTestContainer("slugger");
+
+        // This one is easy:
+        RestAssured
+            .given()
+                .header("Slug", slug1)
+                .header(HttpHeaders.CONTENT_TYPE, 
RDFFormat.TURTLE.getDefaultMIMEType())
+                .body(testResourceTTL.getBytes())
+            .expect()
+                .statusCode(201)
+                .header(HttpHeaders.LOCATION, CoreMatchers.endsWith(slug1))
+            .post(container);
+
+        // Trying again with the same SLUG
+        RestAssured
+            .given()
+                .header("Slug", slug1)
+                .header(HttpHeaders.CONTENT_TYPE, 
RDFFormat.TURTLE.getDefaultMIMEType())
+                .body(testResourceTTL.getBytes())
+            .expect()
+                .statusCode(201)
+                .header(HttpHeaders.LOCATION, new TypeSafeMatcher<String>() {
+                    @Override
+                    protected boolean matchesSafely(String item) {
+                        return item.matches(String.format(".*/%s(-\\d+)$", 
Pattern.quote(slug1)));
+                    }
+
+                    @Override
+                    public void describeTo(Description description) {
+                        description.appendText("an URL ending with something 
like ").appendValue(slug1);
+                    }
+                })
+            .post(container);
+
+
+        // This one does some magic on the slug
+        RestAssured
+            .given()
+                .header("Slug", slug2)
+                .header(HttpHeaders.CONTENT_TYPE, 
RDFFormat.TURTLE.getDefaultMIMEType())
+                .body(testResourceTTL.getBytes())
+            .expect()
+                .statusCode(201)
+                .header(HttpHeaders.LOCATION, 
CoreMatchers.endsWith(LdpUtils.urify(slug2)))
+            .post(container);
+
+    }
 }

Reply via email to