diff --git a/test/dataset/in/docObject.sample.json b/test/dataset/in/docObject.sample.json new file mode 100644 index 0000000..b8c9dec --- /dev/null +++ b/test/dataset/in/docObject.sample.json @@ -0,0 +1,42 @@ +{ + "idIstex": "0000000000000000000000000000000000000000", + "metadata": [{ + "mime": "application/xml", + "path": "file.xml", + "original": false + }, { + "mime": "application/mods+xml", + "path": "file.mods.xml", + "original": false + }], + "fulltext": [{ + "mime": "application/pdf", + "path": "file.pdf", + "original": true + }, { + "mime": "application/pdf", + "path": "file.unoriginal.pdf", + "original": false + }, { + "mime": "text/plain", + "path": "file.txt", + "original": true + }, { + "mime": "text/plain", + "path": "file.unoriginal.txt", + "original": false + }], + "annexes": [{ + "path": "file.first.jpeg", + "original": true, + "mime": "image/jpeg" + }, { + "path": "file.second.jpeg", + "original": true, + "mime": "image/jpeg" + }, { + "path": "file.first.png", + "original": true, + "mime": "image/png" + }] +} \ No newline at end of file diff --git a/test/dataset/in/test.files.json b/test/dataset/in/test.files.json new file mode 100644 index 0000000..9a87e14 --- /dev/null +++ b/test/dataset/in/test.files.json @@ -0,0 +1,156 @@ +{ + "selectAll": [{ + "label": "Devrait trouver 3 images dans les annexes (avec une RegExp)", + "container": "annexes", + "regExp": ["mime"], + "options": [{ + "mime": "image", + "original": true + }], + "result": { + "length": true, + "value": 3 + } + }, { + "label": "Ne devrait rien trouver dans les annexes (avec une RegExp)", + "container": "annexes", + "regExp": ["mime"], + "options": [{ + "mime": "text", + "original": true + }], + "result": { + "length": true, + "value": 0 + } + }, { + "label": "Devrait trouver 2 images (jpeg) dans les annexes (sans RegExp)", + "container": "annexes", + "regExp": ["mime"], + "options": [{ + "mime": "image/jpeg", + "original": true + }], + "result": { + "length": true, + "value": 2 + } + }, { + "label": "Ne devrait rien trouver dans les annexes (sans RegExp)", + "container": "annexes", + "regExp": ["mime"], + "options": [{ + "mime": "text/plain", + "original": true + }], + "result": { + "length": true, + "value": 0 + } + }], + "select": [{ + "label": "Devrait trouver un fichier texte dans les données fulltext", + "container": "fulltext", + "options": [{ + "mime": "text/plain", + "original": false + }, { + "mime": "text/plain", + "original": true + }], + "result": { + "not": true, + "value": null + } + }, { + "label": "Devrait trouver une image dans les annexes (avec une RegExp)", + "container": "annexes", + "regExp": ["mime"], + "options": [{ + "mime": "image", + "original": true + }], + "result": { + "not": true, + "value": null + } + }, { + "label": "Ne devrait pas trouver un fichier texte dans les annexes", + "container": "annexes", + "options": [{ + "mime": "text/plain" + }], + "result": { + "value": null + } + }], + "get": [{ + "label": "Devrait trouver un fichier mods dans les metadata", + "container": "metadata", + "options": { + "mime": "application/mods+xml" + }, + "result": { + "not": true, + "value": null + } + }, { + "label": "Ne devrait pas trouver un fichier mods dans les metadata", + "container": "metadata", + "options": { + "mime": "application/mods+xml", + "original": true + }, + "result": { + "value": null + } + }, { + "label": "Devrait trouver un fichier mods dans les metadata (avec une RegExp)", + "container": "metadata", + "regExp": ["mime"], + "options": { + "mime": "mods", + "original": false + }, + "result": { + "not": true, + "value": null + } + }, { + "label": "Ne devrait pas trouver un fichier mods dans les metadata (avec une RegExp)", + "container": "metadata", + "regExp": ["mime"], + "options": { + "mime": "mods+xml", + "original": true + }, + "result": { + "value": null + } + }], + "createPath": [{ + "label": "Devrait retourner un chemin correctement construit (non null)", + "options": { + "corpusPath": "/my/path/", + "id": "0000000000000000000000000000000000000000", + "type": "enrichments", + "label": "mymodule", + "extension": ".tei.xml" + }, + "result": { + "not": true, + "value": null + } + }, { + "label": "Devrait retourner null", + "options": { + "corpusPath": "/my/path/", + "type": "enrichments", + "label": "mymodule", + "extension": ".tei.xml" + }, + "result": { + "value": null + } + }] +} \ No newline at end of file diff --git a/test/run.js b/test/run.js new file mode 100644 index 0000000..5dcc7f9 --- /dev/null +++ b/test/run.js @@ -0,0 +1,102 @@ +/* global __dirname, require, process, it */ + +'use strict'; + +var + pkg = require('../package.json'), + myObject = require('../index.js'), + docObject = require('./dataset/in/docObject.sample.json'), + async = require('async'), + chai = require('chai'), + expect = chai.expect; + +// Mapping indiquant quelle fonction de test utiliser lors de chaque test +var mapTests = { + "selectAll": testOfFileRepresentation, + "select": testOfFileRepresentation, + "get": testOfFileRepresentation, + "createPath": testOfCreateFilePath +} + +// Données de test +var data = { + "files": require('./dataset/in/test.files.json') +}; + +describe(pkg.name + '/index.js', function() { + async.eachSeries(Object.keys(data.files), function(key, callback) { + /** + * Test de chaques fonctions : + * - myObject.files.selectAll() + * - myObject.files.select() + * - myObject.files.get() + * - myObject.files.createPath() + */ + describe('#' + key + '()', function() { + mapTests[key](data.files[key], myObject.files[key]); + }); + callback(); + }); +}); + +// Set une regex pour chaque clée demandée +function setRegex(keys, options) { + for (var i = 0; i < keys.length; i++) { + if (options instanceof Array) { + for (var j = 0; j < options.length; j++) { + options[j][keys[i]] = new RegExp(options[j][keys[i]]); + } + } else { + options[keys[i]] = new RegExp(options[keys[i]]); + } + } +} + +/** Fonction de test à appliquée pour : + * - myObject.files.selectAll() + * - myObject.files.select() + * - myObject.files.get() + */ +function testOfFileRepresentation(values, testedFunction) { + async.eachSeries(values, function(item, callback) { + it(item.label, function(done) { + // Transforme les string en regex si nécessaire + if (item.regExp) { + setRegex(item.regExp, item.options); + } + // Si on doit tester la longueur la valeur retournée + if (item.result.length) { + expect(testedFunction(docObject[item.container], item.options)).to.have.length(item.result.value); + return done(); + } + // Si on doit tester que la valeur retournée n'est pas égale à + if (item.result.not) { + expect(testedFunction(docObject[item.container], item.options)).to.not.equal(item.result.value); + return done(); + } + // Si on doit tester que la valeur retournée est pas égale à + expect(testedFunction(docObject[item.container], item.options)).to.equal(item.result.value); + return done(); + }); + callback(); + }); +} + +/** Fonction de test à appliquée pour : + * - myObject.files.createPath() + */ +function testOfCreateFilePath(values, testedFunction) { + async.eachSeries(values, function(item, callback) { + it(item.label, function(done) { + // Si on doit tester que la valeur retournée n'est pas égale à + if (item.result.not) { + expect(testedFunction(item.options)).to.not.equal(item.result.value); + return done(); + } + // Si on doit tester que la valeur retournée est pas égale à + expect(testedFunction(item.options)).to.equal(item.result.value); + return done(); + }); + callback(); + }); +} \ No newline at end of file