GitLab will be upgraded on June 23rd evening. During the upgrade the service will be unavailable, sorry for the inconvenience.

Commit 610a0eab authored by Chaillet Maxime's avatar Chaillet Maxime

Write more tests on the json extractor.

parent 42abc767
......@@ -55,26 +55,12 @@ module.exports = function (config) {
// enable / disable colors in the output (reporters and logs)
colors: true,
client: {
captureConsole: true
},
browserConsoleLogOptions: {
level: 'log',
format: '%b %T: %m',
terminal: true
},
// level of logging
// possible values: config.LOG_DISABLE || config.LOG_ERROR || config.LOG_WARN || config.LOG_INFO || config.LOG_DEBUG
logLevel: config.LOG_INFO,
// enable / disable watching file and executing tests whenever any file changes
autoWatch: true,
......
......@@ -57,6 +57,7 @@ DOIController.prototype.render = function (doi, data) {
doiData.dataciteLink = _this.doiServer + doi;
doiData.publisher = jsonExtractor.getPublisher(data);
doiData.creators = jsonExtractor.getCreators(data);
doiData.publiclyAccessibleYear = jsonExtractor.getPubliclyAccessibleYear(data);
......
......@@ -7,7 +7,7 @@ function JsonExtractor() {
/**
* Extract the DOI title from the datacite's JSON response.
* @param {string} data The data object provided by datacite
* @param {json} data The data object provided by datacite
* @return {string} doi title. Null if it does not exist
*/
JsonExtractor.prototype.getTitle = function (data) {
......@@ -20,12 +20,13 @@ JsonExtractor.prototype.getTitle = function (data) {
}
}
}
console.log('[JSON EXTRACTOR ERROR] title extraction failed.');
return null;
}
/**
* Extract the DOI number from the datacite's JSON response.
* @param {string} data The data object provided by datacite
* @param {json} data The data object provided by datacite
* @return {string} doi number. Null if it does not exist.
*/
JsonExtractor.prototype.getDOI = function (data) {
......@@ -34,12 +35,13 @@ JsonExtractor.prototype.getDOI = function (data) {
return data.doi.toUpperCase();
}
}
console.log('[JSON EXTRACTOR ERROR] doi extraction failed.');
return null;
}
/**
* Extract the DOI publisher from the datacite's JSON response.
* @param {string} data The data object provided by datacite
* @param {json} data The data object provided by datacite
* @return {string} doi publisher. Null if it does not exist.
*/
JsonExtractor.prototype.getPublisher = function (data) {
......@@ -48,49 +50,77 @@ JsonExtractor.prototype.getPublisher = function (data) {
return data.publisher;
}
}
console.log('[JSON EXTRACTOR ERROR] publisher extraction failed.');
return null;
}
/**
* Extract the DOI authors/creators from the datacite's JSON response.
* @param {string} data The data object provided by datacite
* @return {array} doi creators. Null if it does not exist. When creators details are not available, it returns
* a null item within the table.
* @param {json} data The data object provided by datacite
* @return {array} doi creators. Null if creators does not exist. When creators details are not available, it returns
* an empty item within the array for each badly extracted creator.
*/
JsonExtractor.prototype.getCreators = function (data) {
console.log('salut')
if (data) {
if (data.creators) {
var test = _.map(data.creators, (item) => {
if ((item.givenName && item.familyName) || item.name) {
return item;
} else {
return null;
}
})
console.log(test)
return {
creators: test
creators: _.map(data.creators, (item) => {
if ((item.givenName && item.familyName) || item.name) {
return item;
} else {
console.log('[JSON EXTRACTOR ERROR] one of the creator could not be properly extracted.');
return {};
}
})
}
}
}
console.log('[JSON EXTRACTOR ERROR] Extraction of the creators failed.');
return null;
}
/**
* Extract the year the DOI referenced data will become publicly available.
* @param {json} data json datacite object
* @return {string} the year. Null if extraction failed.
*/
JsonExtractor.prototype.getPubliclyAccessibleYear = function (data) {
if (data && data.publicationYear) {
return data.publicationYear
}
console.log('[JSON EXTRACTOR ERROR] Extraction of the publication year failed.');
return null;
}
/**
* Extract investigationId from the data.doi field as received from the json
* response.
* Extract investigationId from the data.doi field as received from the json response.
* @param {string} data The data object provided by datacite
* @return {string} investigationId The investigationID requested for accessing data in ICAT.
* @return {string} investigationID requested for accessing data in ICAT. Null if it failed
*/
JsonExtractor.prototype.getInvestigationId = function (data) {
var regExp = RegExp(/\/\w*-*[Ee][Ss][Rr][Ff]-[Ee][Ss]-(\d+)$/);
if (regExp.exec(data.doi)) {
return regExp.exec(data.doi)[1];
}
console.log('[JSON EXTRACTOR ERROR] investigationId extraction failed.');
return null;
};
/**
* Extract field value (beamline, proposal number and proposal type) from the
* data json object. Returns null if the field is not found.
......
......@@ -238,23 +238,84 @@ describe("jsonExtractor", () => {
let actualDOIdata = {
"creators": [
{
"nameType": "Personal",
"name": "LEAKE, Steven",
"givenName": "Steven",
"familyName": "LEAKE"
"nameType": "Personal",
"name": "LEAKE, Steven",
"givenName": "Steven",
"familyName": "LEAKE"
},
{
"nameType": "Personal",
"name": "ZATTERIN, Edoardo",
"givenName": "Edoardo",
"familyName": "ZATTERIN"
"nameType": "Personal",
"name": "ZATTERIN, Edoardo",
"givenName": "Edoardo",
"familyName": "ZATTERIN"
}
]
]
};
let expectedCreators = actualDOIdata;
let myJsonExtractor = new JsonExtractor();
expect(myJsonExtractor.getPublisher(actualDOIdata)).toEqual(expectedCreators);
expect(myJsonExtractor.getCreators(actualDOIdata)).toEqual(expectedCreators);
})
it('returns only the creators for which givenName && familyName is defined or name is defined', () => {
let actualDOIdata = {
"creators": [
{
"nameType": "Personal",
"name": "LEAKE, Steven",
},
{
"nameType": "Personal",
},
{
"nameType": "Personal",
"name": "ZATTERIN, Edoardo",
"givenName": "Edoardo",
"familyName": "ZATTERIN"
}
]
};
let expectedCreators = {
"creators": [
{
"nameType": "Personal",
"name": "LEAKE, Steven",
},
{},
{
"nameType": "Personal",
"name": "ZATTERIN, Edoardo",
"givenName": "Edoardo",
"familyName": "ZATTERIN"
}
]
};;
let myJsonExtractor = new JsonExtractor();
expect(myJsonExtractor.getCreators(actualDOIdata)).toEqual(expectedCreators);
})
})
describe("GetPubliclyAccessibleYear", () => {
it('returns the year the data will be publicly accessible', () => {
let actualDOIdata = {
"publicationYear": 2021
};
let expectedCreators = 2021;
let myJsonExtractor = new JsonExtractor();
expect(myJsonExtractor.getPubliclyAccessibleYear(actualDOIdata)).toEqual(expectedCreators);
})
it('returns null when the year the data will be publicly accessible is not available', () => {
let actualDOIdata = {
"publicationYear": null
};
let expectedCreators = null;
let myJsonExtractor = new JsonExtractor();
expect(myJsonExtractor.getPubliclyAccessibleYear(actualDOIdata)).toEqual(expectedCreators);
})
})
})
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment