You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
gcat/src/test/java/org/gcube/gcat/persistence/ckan/CKANPackageTest.java

186 lines
6.7 KiB
Java

package org.gcube.gcat.persistence.ckan;
import org.gcube.gcat.ContextTest;
import org.gcube.gcat.persistence.ckan.CKAN;
import org.gcube.gcat.persistence.ckan.CKANPackage;
import org.gcube.gcat.persistence.ckan.CKANResource;
import org.junit.Assert;
import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.node.ArrayNode;
import com.fasterxml.jackson.databind.node.ObjectNode;
/**
* @author Luca Frosini (ISTI - CNR)
*/
public class CKANPackageTest extends ContextTest {
private static Logger logger = LoggerFactory.getLogger(CKANPackageTest.class);
private static final String NOTES_KEY = "notes";
private static final String URL_KEY = "url";
private static final String PRIVATE_KEY = "private";
private static final String ITEM_NAME_VALUE = "restful_transaction_model";
private static final String LICENSE_VALUE = "CC-BY-SA-4.0";
private static final String EXTRAS_TYPE_VALUE_VALUE = "EmptyType";
@Test
public void list() throws Exception {
CKANPackage ckanPackage = new CKANPackage();
ObjectMapper mapper = new ObjectMapper();
String ret = ckanPackage.list();
JsonNode gotList = mapper.readTree(ret);
Assert.assertTrue(gotList instanceof ArrayNode);
logger.debug("List :\n{}", mapper.writeValueAsString(gotList));
}
/*
* DEV
* Workspace(luca.frosini) > RESTful Transaction Model.pdf
* https://data-d.d4science.org/shub/e03355cd-058a-4e3a-8d5b-cf3676a46840
* URL url = new URL("https://goo.gl/fSZH1o");
*
*
* Workspace(luca.frosini) > RESTful Transaction Model v 1.0.pdf
* https://data-d.d4science.org/shub/8ad187c4-8f94-4c47-a780-706d0d33c1bb
* URL url = new URL("https://goo.gl/6vZSmp");
*
*
* Workspace(luca.frosini) > RESTful Transaction Model v 1.1.pdf
* https://data-d.d4science.org/shub/7b6628e4-b397-4df9-b387-2d643ae0095c
* URL url = new URL("https://goo.gl/jvXMcd");
*
*/
protected CKANPackage createPackage(ObjectMapper mapper) throws Exception {
ObjectNode itemObjectNode = mapper.createObjectNode();
itemObjectNode.put(CKAN.NAME_KEY, ITEM_NAME_VALUE);
itemObjectNode.put(CKANPackage.TITLE_KEY, "RESTful Transaction Model");
itemObjectNode.put(CKANPackage.LICENSE_KEY, LICENSE_VALUE);
itemObjectNode.put(PRIVATE_KEY, false);
itemObjectNode.put(NOTES_KEY, "A research of Luca Frosini");
itemObjectNode.put(URL_KEY, "http://www.d4science.org");
ArrayNode tagArrayNode = itemObjectNode.putArray(CKANPackage.TAGS_KEY);
ObjectNode tagNode = mapper.createObjectNode();
tagNode.put(CKANPackage.NAME_KEY, "REST");
tagArrayNode.add(tagNode);
ArrayNode resourceArrayNode = itemObjectNode.putArray(CKANPackage.RESOURCES_KEY);
ObjectNode resourceNode = mapper.createObjectNode();
resourceNode.put(CKANResource.NAME_KEY, "RESTful Transaction Model");
// Workspace(luca.frosini) > RESTful Transaction Model v 1.0.pdf
resourceNode.put(CKANResource.URL_KEY, "https://goo.gl/6vZSmp");
resourceArrayNode.add(resourceNode);
ArrayNode extraArrayNode = itemObjectNode.putArray(CKANPackage.EXTRA_TYPES_KEY);
ObjectNode extraNode = mapper.createObjectNode();
extraNode.put(CKANPackage.EXTRA_TYPES_KEY_KEY, CKANPackage.EXTRA_TYPES_KEY_VALUE_SYSTEM_TYPE);
extraNode.put(CKANPackage.EXTRA_TYPES_VALUE_KEY, EXTRAS_TYPE_VALUE_VALUE);
extraArrayNode.add(extraNode);
CKANPackage ckanPackage = new CKANPackage();
ckanPackage.setName(ITEM_NAME_VALUE);
//ckanPackage.setApiKey(CKANUtility.getSysAdminAPI());
String createdItem = ckanPackage.create(mapper.writeValueAsString(itemObjectNode));
logger.debug(createdItem);
return ckanPackage;
}
@Test
public void create() throws Exception {
ObjectMapper mapper = new ObjectMapper();
createPackage(mapper);
}
@Test
public void createReadUpdateUpdatePurge() throws Exception {
ObjectMapper mapper = new ObjectMapper();
createPackage(mapper);
CKANPackage ckanPackage = new CKANPackage();
ckanPackage.setName(ITEM_NAME_VALUE);
String readItem = ckanPackage.read();
JsonNode readItemObjectNode = mapper.readTree(readItem);
String readID = readItemObjectNode.get(CKANPackage.NAME_KEY).asText();
Assert.assertNotNull(readID);
Assert.assertTrue(ITEM_NAME_VALUE.compareTo(readID)==0);
String updatedNotes = "A research of Luca Frosini made during the PhD";
((ObjectNode) readItemObjectNode).put(NOTES_KEY, updatedNotes);
ArrayNode resources = (ArrayNode) readItemObjectNode.get(CKANPackage.RESOURCES_KEY);
ObjectNode objectNode = (ObjectNode) resources.get(0);
// Workspace(luca.frosini) > RESTful Transaction Model v 1.1.pdf
objectNode.put(CKANResource.URL_KEY, "https://goo.gl/jvXMcd");
resources.set(0, objectNode);
((ObjectNode) readItemObjectNode).replace(CKANPackage.RESOURCES_KEY, resources);
ckanPackage = new CKANPackage();
ckanPackage.setName(ITEM_NAME_VALUE);
String updatedItem = ckanPackage.update(mapper.writeValueAsString(readItemObjectNode));
logger.trace(updatedItem);
JsonNode updatedItemObjectNode = mapper.readTree(updatedItem);
String gotUpdatedNotes = updatedItemObjectNode.get(NOTES_KEY).asText();
Assert.assertTrue(gotUpdatedNotes.compareTo(updatedNotes)==0);
ckanPackage = new CKANPackage();
ckanPackage.setName(ITEM_NAME_VALUE);
((ObjectNode) updatedItemObjectNode).remove(CKANPackage.RESOURCES_KEY);
String secondUpdateItem = ckanPackage.update(mapper.writeValueAsString(updatedItemObjectNode));
logger.trace(secondUpdateItem);
/*
ObjectNode patchObjectNode = mapper.createObjectNode();
String patchedNotes = updatedNotes + " in October 2018";
patchObjectNode.put(NOTES_KEY, patchedNotes);
patchObjectNode.put(CKANPackage.NAME_KEY, ITEM_NAME_VALUE);
ckanPackage = new CKANPackage();
ckanPackage.setName(ITEM_NAME_VALUE);
String patchedItem = ckanPackage.patch(mapper.writeValueAsString(patchObjectNode));
logger.trace(patchedItem);
JsonNode patchedItemObjectNode = mapper.readTree(patchedItem);
String gotPatchedNotes = patchedItemObjectNode.get(NOTES_KEY).asText();
Assert.assertTrue(gotPatchedNotes.compareTo(patchedNotes)==0);
*/
ckanPackage = new CKANPackage();
ckanPackage.setName(ITEM_NAME_VALUE);
ckanPackage.purge();
logger.debug("Item {} purge successfully", ITEM_NAME_VALUE);
}
@Test
//(expected = NotFoundException.class)
public void read() throws Exception {
CKANPackage ckanPackage = new CKANPackage();
ckanPackage.setName(ITEM_NAME_VALUE);
String ret = ckanPackage.read();
logger.debug(ret);
}
@Test
//(expected = NotFoundException.class)
public void delete() throws Exception {
CKANPackage ckanPackage = new CKANPackage();
ckanPackage.setName(ITEM_NAME_VALUE);
ckanPackage.delete(true);
}
}