Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

243 draft doi sent to datacite incorrectly and incompletely maps some fields #259

103 changes: 103 additions & 0 deletions src/__testData__/expectedDataCiteStructure.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,103 @@

const expectedDataCiteStructure = {
"data": {
"type": "dois",
"attributes": {
"prefix": "10.21966",
"creators": [
{
"name": "Sorochak, Austen",
"nameType": "Personal",
"givenName": "Austen",
"familyName": "Sorochak",
"affiliation": [
{
"name": "Royal Roads University",
"schemeUri": "https://ror.org",
"affiliationIdentifier": "https://ror.org/05w4ste42",
"affiliationIdentifierScheme": "ROR",
},
],
},
{
"name": "PumpkinKing, Jack",
"nameType": "Personal",
"givenName": "Jack",
"familyName": "PumpkinKing",
"affiliation": [],
},
],
"titles": [
{
"lang": "en",
"title": "This is a mock record",
},
{
"lang": "fr",
"title": "Il s'agit d'un faux record",
},
],
"publisher": "Royal Roads University",
"publicationYear": 2023,
"subjects": [
{
"lang": "en",
"subject": "abundance and biomass",
},
{
"lang": "fr",
"subject": "abondance et biomasse",
},
],
"dates": [
{
"date": "2023-10-01T19:00:00.000Z",
"dateType": "Collected",
"dateInformation": "Start date when data was first collected",
},
{
"date": "2023-10-04T19:00:00.000Z",
"dateType": "Collected",
"dateInformation": "End date when data was last collected",
},
],
"rightsList": [
{
"rights": "Creative Commons Attribution 4.0 Attribution",
"rightsUri": "https://creativecommons.org/licenses/by/4.0",
"schemeUri": "https://spdx.org/licenses/",
"rightsIdentifier": "CC-BY-4.0",
"rightsIdentifierScheme": "SPDX",
},
],
"descriptions": [
{
"lang": "en",
"description": "This is a mock record to be used in unit tests, to ensure the continued functionality of the mapping function.",
"descriptionType": "Abstract",
},
{
"lang": "fr",
"description": "Il s'agit d'un enregistrement fictif à utiliser dans les tests unitaires, afin de garantir la fonctionnalité continue de la fonction de mappage.",
"descriptionType": "Abstract",
},
],
"geoLocations": [
{
"geoLocationBox": {
"eastBoundLongitude": -160,
"northBoundLatitude": 60,
"southBoundLatitude": 45,
"westBoundLongitude": -120,
},
},
],
"types": {
"resourceTypeGeneral": "Dataset",
},
"url": "https://catalogue.hakai.org/dataset/ca-cioos_b6f44266-5815-48bb-bd0c-dd050c6fe465",
},
},
}

export default expectedDataCiteStructure;
119 changes: 119 additions & 0 deletions src/__testData__/mockMetadataRecord.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,119 @@

const mockMetadataRecord = {
"title": {
"en": "This is a mock record",
"fr": "Il s'agit d'un faux record",
},
"abstract": {
"en": "This is a mock record to be used in unit tests, to ensure the continued functionality of the mapping function.",
"fr": "Il s'agit d'un enregistrement fictif à utiliser dans les tests unitaires, afin de garantir la fonctionnalité continue de la fonction de mappage.",
},
"keywords": {
"en": [
"abundance and biomass",
],
"fr": [
"abondance et biomasse",
],
},
"eov": [
"dissolvedOrganicCarbon",
],
"progress": "onGoing",
"distribution": [],
"dateStart": "2023-10-01T19:00:00.000Z",
"dateEnd": "2023-10-04T19:00:00.000Z",
"map": {
"east": "-160",
"north": "60",
"polygon": "",
"south": "45",
"west": "-120",
},
"verticalExtentMin": "",
"verticalExtentMax": "",
"datePublished": "2023-10-26T19:00:00.000Z",
"dateRevised": null,
"edition": "",
"recordID": "-Nhi6_2lQjNwKkzdv_Qu",
"instruments": [],
"platform": "",
"platformID": "",
"platformDescription": "",
"language": "en",
"license": "CC-BY-4.0",
"contacts": [
{
"role": [
"custodian",
],
"orgName": "Royal Roads University",
"orgEmail": "",
"orgURL": "http://www.royalroads.ca/",
"orgAdress": "",
"orgCity": "Victoria",
"orgCountry": "Canada",
"orgRor": "https://ror.org/05w4ste42",
"indPosition": "",
"indEmail": "",
"indOrcid": "",
"givenNames": "Austen",
"lastName": "Sorochak",
"inCitation": true,
},
{
"role": [],
"orgName": "",
"orgEmail": "",
"orgURL": "",
"orgAdress": "",
"orgCity": "",
"orgCountry": "",
"orgRor": "",
"indPosition": "",
"indEmail": "",
"indOrcid": "",
"givenNames": "Jack",
"lastName": "PumpkinKing",
"inCitation": true,
},
{
"role": [
"publisher",
],
"orgName": "Royal Roads University",
"orgEmail": "",
"orgURL": "",
"orgAdress": "",
"orgCity": "",
"orgCountry": "",
"orgRor": "",
"indPosition": "",
"indEmail": "",
"indOrcid": "",
"givenNames": "",
"lastName": "",
"inCitation": true,
},
],
"status": "",
"comment": "",
"limitations": "",
"lastEditedBy": {
"displayName": "Austen Sorochak",
"email": "[email protected]",
},
"category": "",
"verticalExtentDirection": "",
"datasetIdentifier": "",
"doiCreationStatus": "",
"noPlatform": false,
"filename": "",
"organization": "",
"timeFirstPublished": "",
"identifier": "b6f44266-5815-48bb-bd0c-dd050c6fe465",
"created": "2023-11-03T21:04:37.548Z",
"userID": "gP03Su7SUndv1bwlW6YnBhtAwSw2",
}

export default mockMetadataRecord
19 changes: 19 additions & 0 deletions src/__tests__/recordToDataCite.test.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
import recordToDataCite from './../utils/recordToDataCite'
import licenses from './../utils/licenses';
import regions from './../regions';
import mockMetadataRecord from '../__testData__/mockMetadataRecord';
import expectedDataCiteStructure from '../__testData__/expectedDataCiteStructure';

const language = 'en';
const region = 'hakai';

describe('recordToDataCite', () => {
it('should correctly map metadata record to DataCite format', () => {

const testResult = recordToDataCite(mockMetadataRecord, language, region);

// Assert that the output matches the expected structure
expect(testResult).toEqual(expectedDataCiteStructure);

});
})
2 changes: 1 addition & 1 deletion src/components/Tabs/IdentificationTab.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -82,7 +82,7 @@ const IdentificationTab = ({
setLoadingDoi(true);

try {
const mappedDataCiteObject = recordToDataCite(record);
const mappedDataCiteObject = recordToDataCite(record, language, region);
await createDraftDoi(mappedDataCiteObject)
.then((response) => {
return response.data.data.attributes;
Expand Down
49 changes: 22 additions & 27 deletions src/utils/recordToDataCite.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,29 +2,35 @@ import licenses from "./licenses";
import regions from "../regions";


function recordToDataCite(metadata) {
function recordToDataCite(metadata, language, region) {

// Reduce contacts to a list of creators
const creators = metadata.contacts ? metadata.contacts.reduce((creatorList, contact) => {
let creator;

if (contact.inCitation) {
if (contact.inCitation && !contact.role.includes("publisher")) {
const {
indName,
orgName,
lastName,
givenNames,
lastName,
orgName,
indOrcid,
orgRor,
} = contact;

// Create an individual creator object if indName is present
if (indName) {
// Create an individual creator object with names
if (givenNames) {
creator = {
name: `${lastName}, ${givenNames}`,
nameType: "Personal",
givenName: givenNames,
familyName: lastName,
// Add affiliation for individual if organization details are provided
affiliation: orgName ? [{
name: orgName,
schemeUri: "https://ror.org",
affiliationIdentifier: orgRor,
affiliationIdentifierScheme: "ROR",
}] : [],
};

// Add nameIdentifiers for individual with an ORCID
Expand All @@ -38,25 +44,6 @@ function recordToDataCite(metadata) {
];
}
}

// Create an organizational creator object if orgName is present
if (orgName) {
creator = {
name: orgName,
nameType: "Organizational",
};

// Add nameIdentifiers for organization with a ROR
if (orgRor) {
creator.nameIdentifiers = [
{
schemeUri: "https://ror.org",
nameIdentifier: orgRor,
nameIdentifierScheme: "ROR",
},
];
}
}
}

// Add the creator to the list if it exists
Expand Down Expand Up @@ -157,7 +144,7 @@ function recordToDataCite(metadata) {
data: {
type: "dois",
attributes: {
prefix: regions.hakai.datacitePrefix,
prefix: regions[region].datacitePrefix,
creators,
// Initialize an empty array for titles
titles: [],
Expand Down Expand Up @@ -219,6 +206,14 @@ function recordToDataCite(metadata) {
mappedDataCiteObject.data.attributes.geoLocations = geoLocations;
}

// Auto-populate Datacite Resource type general as 'dataset'
mappedDataCiteObject.data.attributes.types = {
resourceTypeGeneral: "Dataset",
};

// Generate URL element
mappedDataCiteObject.data.attributes.url = `${regions[region].catalogueURL[language]}dataset/ca-cioos_${metadata.identifier}`;

return mappedDataCiteObject;
}

Expand Down
Loading