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); } }