assertTrue(options.isUsePostOverride());
}
@Test
public void testAppClient() throws Exception {
AbderaClient abderaClient = new AbderaClient();
Entry entry = getFactory().newEntry();
RequestOptions options = abderaClient.getDefaultRequestOptions();
options.setHeader("Connection", "close");
options.setUseExpectContinue(false);
// do the introspection step
ClientResponse response = abderaClient.get("http://localhost:" + JettyUtil.getPort() + "/service", options);
String col_uri;
try {
assertEquals(200, response.getStatus());
Document<Service> service_doc = response.getDocument();
assertNotNull(service_doc);
assertEquals(1, service_doc.getRoot().getWorkspaces().size());
Workspace workspace = service_doc.getRoot().getWorkspace("Test");
assertNotNull(workspace);
for (Collection c : workspace.getCollections()) {
assertNotNull(c.getTitle());
assertNotNull(c.getHref());
}
col_uri = getBase() + "/collections/entries";
} finally {
response.release();
}
// post a new entry
response = abderaClient.post(col_uri, entry, options);
String self_uri;
try {
assertEquals(201, response.getStatus());
assertNotNull(response.getLocation());
assertNotNull(response.getContentLocation());
self_uri = response.getLocation().toString();
} finally {
response.release();
}
// get the collection to see if our entry is there
response = abderaClient.get(col_uri, options);
try {
assertEquals(200, response.getStatus());
Document<Feed> feed_doc = response.getDocument();
assertEquals(1, feed_doc.getRoot().getEntries().size());
} finally {
response.release();
}
// get the entry to see if we can get it
response = abderaClient.get(self_uri, options);
String edit_uri;
try {
assertEquals(200, response.getStatus());
Document<Entry> entry_doc = response.getDocument();
// this isn't always true, but for our tests they are the same
assertEquals(self_uri, entry_doc.getRoot().getId().toString());
// get the edit uri from the entry
edit_uri = entry_doc.getRoot().getEditLink().getHref().toString();
// change the entry
Document<Entry> doc = response.getDocument();
entry = (Entry)doc.getRoot().clone();
entry.setTitle("New title");
} finally {
response.release();
}
// submit the changed entry back to the server
response = abderaClient.put(edit_uri, entry, options);
try {
assertEquals(204, response.getStatus());
} finally {
response.release();
}
// check to see if the entry was modified properly
response = abderaClient.get(self_uri, options);
try {
assertEquals(200, response.getStatus());
Document<Entry> entry_doc = response.getDocument();
assertEquals("New title", entry_doc.getRoot().getTitle());
} finally {
response.release();
}
// delete the entry
response = abderaClient.delete(edit_uri, options);
try {
assertEquals(204, response.getStatus());
} finally {
response.release();
}
// is it gone?
response = abderaClient.get(self_uri, options);
try {
assertEquals(404, response.getStatus());
} finally {
response.release();
}
// YAY! We're a working APP client
// Now let's try to do a media post
// Post the media resource
options = abderaClient.getDefaultRequestOptions();
options.setContentType("text/plain");
options.setHeader("Connection", "close");
options.setUseExpectContinue(false);
response = abderaClient.post(col_uri, new ByteArrayInputStream("test".getBytes()), options);
try {
assertEquals(201, response.getStatus());
assertNotNull(response.getLocation());
assertNotNull(response.getContentLocation());
self_uri = response.getLocation().toString();
} finally {
response.release();
}
// was an entry created?
options = abderaClient.getDefaultRequestOptions();
options.setHeader("Connection", "close");
response = abderaClient.get(self_uri, options);
String edit_media, media;
try {
assertEquals(200, response.getStatus());
Document<Entry> entry_doc = response.getDocument();
// this isn't always true, but for our tests they are the same
assertEquals(self_uri, entry_doc.getRoot().getId().toString());
// get the right links from the entry
edit_uri = entry_doc.getRoot().getEditLink().getHref().toString();
edit_media = entry_doc.getRoot().getLink("edit-media").getHref().toString();
media = entry_doc.getRoot().getContentElement().getSrc().toString();
// edit the entry
Document<Entry> doc = response.getDocument();
entry = (Entry)doc.getRoot().clone();
entry.setTitle("New title");
} finally {
response.release();
}
// submit the changes
options = abderaClient.getDefaultRequestOptions();
options.setContentType("application/atom+xml;type=entry");
options.setHeader("Connection", "close");
options.setUseExpectContinue(false);
response = abderaClient.put(edit_uri, entry, options);
try {
assertEquals(204, response.getStatus());
} finally {
response.release();
}
// get the media resource
response = abderaClient.get(media);
try {
assertEquals(200, response.getStatus());
String mediavalue = read(response.getInputStream());
assertEquals("test", mediavalue);
} finally {
response.release();
}
// edit the media resource
options = abderaClient.getDefaultRequestOptions();
options.setHeader("Connection", "close");
options.setContentType("text/plain");
options.setUseExpectContinue(false);
response = abderaClient.put(edit_media, new ByteArrayInputStream("TEST".getBytes()), options);
try {
assertEquals(204, response.getStatus());
} finally {
response.release();
}
// was the resource changed?
response = abderaClient.get(media, options);
try {
assertEquals(200, response.getStatus());
String mediavalue = read(response.getInputStream());
assertEquals("TEST", mediavalue);
} finally {
response.release();
}
// delete the entry
response = abderaClient.delete(edit_uri, options);
try {
assertEquals(204, response.getStatus());
} finally {
response.release();
}
// is the entry gone?
response = abderaClient.get(self_uri, options);
try {
assertEquals(404, response.getStatus());
} finally {
response.release();
}
// is the media resource gone?
options.setNoCache(true); // need to force revalidation to check
response = abderaClient.get(media, options);
try {
assertEquals(404, response.getStatus());
} finally {
response.release();