/** * This file is part of d:swarm graph extension. * * d:swarm graph extension is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * d:swarm graph extension is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with d:swarm graph extension. If not, see <http://www.gnu.org/licenses/>. */ package org.dswarm.graph.maintain.test; import java.util.ArrayList; import java.util.Collection; import java.util.List; import java.util.Optional; import javax.ws.rs.core.MediaType; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.node.ArrayNode; import com.fasterxml.jackson.databind.node.ObjectNode; import com.sun.jersey.api.client.ClientResponse; import org.junit.Assert; import org.junit.Test; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.dswarm.common.DMPStatics; import org.dswarm.graph.gdm.test.BaseGDMResourceTest; import org.dswarm.graph.test.Neo4jDBWrapper; /** * @author tgaengler */ public abstract class MaintainResourceDeprecateTest extends BaseGDMResourceTest { private static final Logger LOG = LoggerFactory.getLogger(MaintainResourceDeleteTest.class); public MaintainResourceDeprecateTest(final Neo4jDBWrapper neo4jDBWrapper, final String dbTypeArg) { super(neo4jDBWrapper, dbTypeArg); } @Test public void testDeprecateDataModel() throws Exception { MaintainResourceDeprecateTest.LOG.debug("start deprecate data model test for maintain resource at {} DB", dbType); final String dataModelURI = "http://data.slub-dresden.de/resources/1"; writeGDMToDBInternal(dataModelURI, BaseGDMResourceTest.DEFAULT_GDM_FILE_NAME); final String recordClassURI = "http://www.ddb.de/professionell/mabxml/mabxml-1.xsd#datensatzType"; final int numberOfStatements = 191; readGDMFromDB(recordClassURI, dataModelURI, numberOfStatements, Optional.empty()); final String body = deprecateDataModel(dataModelURI); Assert.assertEquals("{\"deprecated\":152}", body); readGDMFromDB(recordClassURI, dataModelURI, 0, Optional.empty()); // try to deprecate data model again final String body2 = deprecateDataModel(dataModelURI); Assert.assertEquals("{\"deprecated\":0}", body2); // TODO: following thing doesn't work, since versioning is a bit broken atm // // write same data again to data model // writeGDMToDBInternal(dataModelURI, BaseGDMResourceTest.DEFAULT_GDM_FILE_NAME); // // readGDMFromDB(recordClassURI, dataModelURI, numberOfStatements, Optional.<Integer>empty()); MaintainResourceDeprecateTest.LOG.debug("finished deprecate data model test for maintain resource at {} DB", dbType); } @Test public void testDeprecateRecords() throws Exception { MaintainResourceDeprecateTest.LOG.debug("start deprecate some records in data model test for maintain resource at {} DB", dbType); final String dataModelURI = "http://data.slub-dresden.de/resources/1"; writeGDMToDBInternal(dataModelURI, BaseGDMResourceTest.DEFAULT_GDM_FILE_NAME); final String recordClassURI = "http://www.ddb.de/professionell/mabxml/mabxml-1.xsd#datensatzType"; final int numberOfStatements = 191; final String recordURI = "http://data.slub-dresden.de/datamodels/7/records/a1280f78-5f96-4fe6-b916-5e38e5d620d3"; final List<String> recordURIs = new ArrayList<>(); recordURIs.add(recordURI); readGDMFromDB(recordClassURI, dataModelURI, numberOfStatements, Optional.empty()); final String body = deprecateRecords(dataModelURI, recordURIs); Assert.assertEquals("{\"deprecated\":152}", body); readGDMFromDB(recordClassURI, dataModelURI, 0, Optional.empty()); // try to deprecate data model again final String body2 = deprecateRecords(dataModelURI, recordURIs); Assert.assertEquals("{\"deprecated\":0}", body2); // TODO: following thing doesn't work, since versioning is a bit broken atm // // write same data again to data model // writeGDMToDBInternal(dataModelURI, BaseGDMResourceTest.DEFAULT_GDM_FILE_NAME); // // readGDMFromDB(recordClassURI, dataModelURI, numberOfStatements, Optional.<Integer>empty()); MaintainResourceDeprecateTest.LOG.debug("finished deprecate some records in data model test for maintain resource at {} DB", dbType); } public String deprecateDataModel(final String dataModelURI) throws JsonProcessingException { final ObjectNode requestJSON = objectMapper.createObjectNode(); requestJSON.put(DMPStatics.DATA_MODEL_URI_IDENTIFIER, dataModelURI); final String request = objectMapper.writeValueAsString(requestJSON); final ClientResponse response = service().path("/maintain/deprecate/datamodel").type(MediaType.APPLICATION_JSON_TYPE).accept( MediaType.APPLICATION_JSON) .post(ClientResponse.class, request); Assert.assertEquals("expected 200", 200, response.getStatus()); final String body = response.getEntity(String.class); Assert.assertNotNull("response body shouldn't be null", body); return body; } public String deprecateRecords(final String dataModelURI, final Collection<String> recordURIs) throws JsonProcessingException { final ObjectNode requestJSON = objectMapper.createObjectNode(); requestJSON.put(DMPStatics.DATA_MODEL_URI_IDENTIFIER, dataModelURI); final ArrayNode recordsArray = objectMapper.createArrayNode(); for (final String recordURI : recordURIs) { recordsArray.add(recordURI); } requestJSON.set(DMPStatics.RECORDS_IDENTIFIER, recordsArray); final String request = objectMapper.writeValueAsString(requestJSON); final ClientResponse response = service().path("/maintain/deprecate/records").type(MediaType.APPLICATION_JSON_TYPE).accept( MediaType.APPLICATION_JSON) .post(ClientResponse.class, request); Assert.assertEquals("expected 200", 200, response.getStatus()); final String body = response.getEntity(String.class); Assert.assertNotNull("response body shouldn't be null", body); return body; } }