ckan2zenodo-library/src/test/java/org/gcube/tests/ZenodoTests.java

167 lines
6.0 KiB
Java
Raw Normal View History

2019-11-26 14:55:20 +01:00
package org.gcube.tests;
import java.io.IOException;
import java.util.Arrays;
import java.util.Date;
2020-06-25 17:12:55 +02:00
import java.util.Map;
import java.util.Map.Entry;
2019-11-26 14:55:20 +01:00
2019-12-05 11:56:51 +01:00
import org.gcube.common.resources.gcore.GenericResource;
import org.gcube.common.resources.gcore.Resources;
2019-12-10 17:06:52 +01:00
import org.gcube.data.publishing.ckan2zenodo.Translator;
2019-11-26 14:55:20 +01:00
import org.gcube.data.publishing.ckan2zenodo.clients.Zenodo;
2019-12-05 11:56:51 +01:00
import org.gcube.data.publishing.ckan2zenodo.commons.IS;
2020-01-31 14:56:51 +01:00
import org.gcube.data.publishing.ckan2zenodo.commons.Net;
2019-12-02 18:02:11 +01:00
import org.gcube.data.publishing.ckan2zenodo.model.CkanItemDescriptor;
2019-12-16 18:49:29 +01:00
import org.gcube.data.publishing.ckan2zenodo.model.CkanRelatedIdentifier;
2019-12-10 17:06:52 +01:00
import org.gcube.data.publishing.ckan2zenodo.model.CkanResource;
2020-01-31 14:56:51 +01:00
import org.gcube.data.publishing.ckan2zenodo.model.DownloadedFile;
2019-11-27 18:21:01 +01:00
import org.gcube.data.publishing.ckan2zenodo.model.ZenodoCredentials;
2019-12-05 11:56:51 +01:00
import org.gcube.data.publishing.ckan2zenodo.model.faults.ConfigurationException;
2019-11-26 14:55:20 +01:00
import org.gcube.data.publishing.ckan2zenodo.model.faults.ZenodoException;
import org.gcube.data.publishing.ckan2zenodo.model.zenodo.Creator;
2019-11-27 18:21:01 +01:00
import org.gcube.data.publishing.ckan2zenodo.model.zenodo.DepositionMetadata;
import org.gcube.data.publishing.ckan2zenodo.model.zenodo.DepositionMetadata.AccessRights;
import org.gcube.data.publishing.ckan2zenodo.model.zenodo.DepositionMetadata.UploadType;
2019-12-10 17:06:52 +01:00
import org.gcube.data.publishing.ckan2zenodo.model.zenodo.FileDeposition;
import org.gcube.data.publishing.ckan2zenodo.model.zenodo.ZenodoDeposition;
2019-12-16 18:49:29 +01:00
import org.junit.Assert;
import org.junit.BeforeClass;
2019-11-26 14:55:20 +01:00
import org.junit.Test;
import com.fasterxml.jackson.core.JsonProcessingException;
2019-12-16 18:49:29 +01:00
import com.jayway.jsonpath.JsonPath;
2019-11-26 14:55:20 +01:00
public class ZenodoTests {
2019-12-02 18:02:11 +01:00
private static ZenodoCredentials credentials;
2020-06-25 17:12:55 +02:00
private static Map<String,String> mappings;
@BeforeClass
public static final void init() throws IOException {
2019-12-02 18:02:11 +01:00
credentials=TestCommons.loadCredentials();
2020-06-25 17:12:55 +02:00
mappings=TestCommons.getDefinedMappings();
}
@Test
public void readFromZenodo() throws IOException, ZenodoException {
// private static final String BASE_URL="https://zenodo.org/api/";
Zenodo z=new Zenodo(credentials);
2019-11-27 18:21:01 +01:00
2020-01-31 14:56:51 +01:00
System.out.println(z.readDeposition(472904));
2019-11-27 18:21:01 +01:00
2019-11-26 14:55:20 +01:00
}
@Test
public void createDeposition() throws ZenodoException, JsonProcessingException {
Zenodo z=new Zenodo(credentials);
ZenodoDeposition dep=z.createNew();
dep.setMetadata(new DepositionMetadata(UploadType.dataset,
new Date(System.currentTimeMillis()),
"Test",
Arrays.asList(new Creator("simpleMan")),
"Simple description",
AccessRights.open));
2019-12-10 17:06:52 +01:00
System.out.println(z.updateMetadata(dep));
}
2019-12-02 18:02:11 +01:00
2019-12-05 11:56:51 +01:00
@Test
public void createFromSimpleItem() throws ConfigurationException, Exception {
Zenodo z=new Zenodo(credentials);
GenericResource res=Resources.unmarshal(GenericResource.class, TransformationTests.class.getResourceAsStream("/ResearchObject.xml"));
ZenodoDeposition dep=z.createNew();
2021-03-08 17:12:28 +01:00
Translator tran=new Translator(IS.readMappings(res));
2019-12-10 17:06:52 +01:00
dep=TestCommons.readAndTransform("/ResearchObject.json", tran,dep);
dep=z.updateMetadata(dep);
2019-12-05 11:56:51 +01:00
2019-12-10 17:06:52 +01:00
System.out.println("Resulting Deposition with metadata : ");
System.out.println();
String json=TestCommons.convertStreamToString(TransformationTests.class.getResourceAsStream("/ResearchObject.json"));
CkanItemDescriptor desc=new CkanItemDescriptor(json);
2019-12-05 11:56:51 +01:00
2019-12-10 17:06:52 +01:00
for(CkanResource cRes:tran.filterResources(desc)) {
2020-01-31 14:56:51 +01:00
DownloadedFile f=Net.download(cRes);
FileDeposition file=z.uploadFile(dep, cRes.getName(), f.getF());
2019-12-10 17:06:52 +01:00
System.out.println("Published "+file);
}
dep=z.publish(dep);
System.out.println();
2019-12-05 11:56:51 +01:00
}
2019-12-16 18:49:29 +01:00
@Test
public void updateExisting() throws ConfigurationException, Exception {
// publish new
Zenodo z=new Zenodo(credentials);
GenericResource res=Resources.unmarshal(GenericResource.class, TransformationTests.class.getResourceAsStream("/ResearchObject.xml"));
ZenodoDeposition dep=z.createNew();
2021-03-08 17:12:28 +01:00
Translator tran=new Translator(IS.readMappings(res));
2019-12-16 18:49:29 +01:00
dep=TestCommons.readAndTransform("/ResearchObject.json", tran,dep);
dep=z.updateMetadata(dep);
System.out.println("Resulting Deposition with metadata : ");
System.out.println();
String json=TestCommons.convertStreamToString(TransformationTests.class.getResourceAsStream("/ResearchObject.json"));
CkanItemDescriptor desc=new CkanItemDescriptor(json);
for(CkanResource cRes:tran.filterResources(desc)) {
2020-01-31 14:56:51 +01:00
DownloadedFile f=Net.download(cRes);
FileDeposition file=z.uploadFile(dep, cRes.getName(), f.getF());
2019-12-16 18:49:29 +01:00
System.out.println("Published "+file);
}
dep=z.publish(dep);
2020-01-31 14:56:51 +01:00
Assert.assertTrue("Invalid deposition state after publishing ",dep.getState().equals("done"));
Assert.assertTrue("Invalid submitted state after publishing", dep.getSubmitted());
2019-12-16 18:49:29 +01:00
2020-01-23 18:03:28 +01:00
desc.setZenodoDoi(CkanRelatedIdentifier.getZenodo(dep.getDOIUrl()));
2019-12-16 18:49:29 +01:00
// Change title
String fakeTitle="Dummy Title";
String modifiedJson=JsonPath.parse(desc.getContent()).put("$", "title", fakeTitle).jsonString();
desc=new CkanItemDescriptor(modifiedJson);
// Publish logic :
Assert.assertNotNull(desc);
Assert.assertNotNull(desc.getZenodoDoi());
Assert.assertEquals(fakeTitle, desc.getTitle());
dep=z.readDeposition(desc.getZenodoDoi().getZenodoId());
dep=tran.transform(desc, dep);
z.unlockPublished(dep.getId());
System.out.println(z.updateMetadata(dep));
dep=z.publish(dep);
Assert.assertEquals(fakeTitle, dep.getTitle());
System.out.println(dep);
}
2020-06-25 17:12:55 +02:00
@Test
public void testMappings() throws Exception {
Zenodo z=new Zenodo(credentials);
for(Entry<String,String> entry:mappings.entrySet()) {
GenericResource resource=Resources.unmarshal(GenericResource.class, TransformationTests.class.getResourceAsStream(entry.getValue()));
Translator translator=new Translator(IS.readMappings(resource));
ZenodoDeposition dep=TestCommons.readAndTransform(entry.getKey(), translator,z.createNew());
dep=z.updateMetadata(dep);
System.out.println("Created "+dep);
2021-03-08 17:12:28 +01:00
//No payload to publish
2020-06-25 17:12:55 +02:00
// System.out.println("Published "+z.publish(dep));
}
}
2019-11-26 14:55:20 +01:00
}