@natlibfi/melinda-commons 13.0.21-alpha.1 → 13.1.0-alpha.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/subRecordPicker.js +41 -7
- package/dist/subRecordPicker.js.map +1 -1
- package/dist/subRecordPicker.spec.js +24 -4
- package/dist/subRecordPicker.spec.js.map +1 -1
- package/package.json +1 -1
- package/src/subRecordPicker.js +41 -8
- package/src/subRecordPicker.spec.js +21 -3
- package/test-fixtures/subRecordPicker/readAllSubrecords/01/metadata.json +1 -0
- package/test-fixtures/subRecordPicker/readAllSubrecords/02/expected-records.json +632 -0
- package/test-fixtures/subRecordPicker/readAllSubrecords/02/metadata.json +22 -0
- package/test-fixtures/subRecordPicker/readAllSubrecords/02/response01.xml +136 -0
- package/test-fixtures/subRecordPicker/readAllSubrecords/02/response02.xml +71 -0
- package/test-fixtures/subRecordPicker/readAllSubrecords/03/expected-records.json +1 -0
- package/test-fixtures/subRecordPicker/readAllSubrecords/03/metadata.json +17 -0
- package/test-fixtures/subRecordPicker/readAllSubrecords/03/response01.xml +4 -0
- package/test-fixtures/subRecordPicker/readSomeSubrecords/01/metadata.json +1 -0
- package/test-fixtures/subRecordPicker/readSubrecordAmount/01/metadata.json +16 -0
- package/test-fixtures/subRecordPicker/readSubrecordAmount/01/response01.xml +4 -0
package/dist/subRecordPicker.js
CHANGED
|
@@ -9,28 +9,55 @@ var _sruClient = _interopRequireDefault(require("@natlibfi/sru-client"));
|
|
|
9
9
|
var _marcRecordSerializers = require("@natlibfi/marc-record-serializers");
|
|
10
10
|
var _debug = _interopRequireDefault(require("debug"));
|
|
11
11
|
var _error = require("./error");
|
|
12
|
-
|
|
12
|
+
const componentIndex = 'melinda.partsofhost';
|
|
13
|
+
const monoHostComponentIndex = 'melinda.partsofmonohost';
|
|
14
|
+
function createSubrecordPicker(sruUrl, retrieveAll = false, monoHostComponentsOnly = false) {
|
|
15
|
+
const debug = (0, _debug.default)('@natlibfi/melinda-commons:subRecordPicker');
|
|
16
|
+
debug(`SRU client url: ${sruUrl}`);
|
|
13
17
|
if (sruUrl === undefined) {
|
|
14
18
|
// eslint-disable-line functional/no-conditional-statements
|
|
15
19
|
throw new _error.Error(400, 'Invalid sru url');
|
|
16
20
|
}
|
|
17
|
-
const debug = (0, _debug.default)('@natlibfi/melinda-commons:subRecordPicker');
|
|
18
|
-
debug(`SRU client url: ${sruUrl}`);
|
|
19
21
|
const sruClient = (0, _sruClient.default)({
|
|
20
22
|
url: sruUrl,
|
|
21
23
|
recordSchema: 'marcxml',
|
|
22
24
|
retrieveAll
|
|
23
25
|
});
|
|
26
|
+
// SRU client with maxRecordsPerRequest does not retrieve any records
|
|
27
|
+
const sruClientForAmount = (0, _sruClient.default)({
|
|
28
|
+
url: sruUrl,
|
|
29
|
+
recordSchema: 'marcxml',
|
|
30
|
+
retrieveAll,
|
|
31
|
+
maxRecordsPerRequest: 0
|
|
32
|
+
});
|
|
33
|
+
const index = monoHostComponentsOnly ? monoHostComponentIndex : componentIndex;
|
|
34
|
+
debug(`Using index ${index}, (monoHostComponentsOnly: ${monoHostComponentsOnly})`);
|
|
24
35
|
return {
|
|
36
|
+
readSubrecordAmount,
|
|
25
37
|
readSomeSubrecords,
|
|
26
38
|
readAllSubrecords
|
|
27
39
|
};
|
|
40
|
+
function readSubrecordAmount(recordId) {
|
|
41
|
+
debug(`Getting subrecord amount for ${recordId}`);
|
|
42
|
+
return new Promise((resolve, reject) => {
|
|
43
|
+
sruClientForAmount.searchRetrieve(`${index}=${recordId}`).on('total', totalNumberOfRecords => {
|
|
44
|
+
resolve({
|
|
45
|
+
amount: totalNumberOfRecords
|
|
46
|
+
});
|
|
47
|
+
}).on('error', err => reject(err));
|
|
48
|
+
});
|
|
49
|
+
}
|
|
28
50
|
function readSomeSubrecords(recordId, offset = 1) {
|
|
29
51
|
debug(`Picking subrecords for ${recordId}`);
|
|
30
52
|
return new Promise((resolve, reject) => {
|
|
31
53
|
const promises = [];
|
|
32
|
-
|
|
54
|
+
// eslint-disable-next-line functional/no-let
|
|
55
|
+
let amount;
|
|
56
|
+
sruClient.searchRetrieve(`${index}=${recordId}`, {
|
|
33
57
|
startRecord: offset
|
|
58
|
+
}).on('total', totalNumberOfRecords => {
|
|
59
|
+
// eslint-disable-next-line no-const-assign
|
|
60
|
+
amount = totalNumberOfRecords;
|
|
34
61
|
}).on('record', xmlString => {
|
|
35
62
|
promises.push(_marcRecordSerializers.MARCXML.from(xmlString, {
|
|
36
63
|
subfieldValues: false
|
|
@@ -40,7 +67,8 @@ function createSubrecordPicker(sruUrl, retrieveAll = false) {
|
|
|
40
67
|
const records = await Promise.all(promises);
|
|
41
68
|
resolve({
|
|
42
69
|
nextRecordOffset,
|
|
43
|
-
records
|
|
70
|
+
records,
|
|
71
|
+
amount
|
|
44
72
|
});
|
|
45
73
|
} catch (error) {
|
|
46
74
|
reject(error);
|
|
@@ -52,7 +80,12 @@ function createSubrecordPicker(sruUrl, retrieveAll = false) {
|
|
|
52
80
|
debug(`Picking subrecords for ${recordId}`);
|
|
53
81
|
return new Promise((resolve, reject) => {
|
|
54
82
|
const promises = [];
|
|
55
|
-
|
|
83
|
+
// eslint-disable-next-line functional/no-let
|
|
84
|
+
let amount;
|
|
85
|
+
sruClient.searchRetrieve(`${index}=${recordId}`).on('total', totalNumberOfRecords => {
|
|
86
|
+
// eslint-disable-next-line no-const-assign
|
|
87
|
+
amount = totalNumberOfRecords;
|
|
88
|
+
}).on('record', xmlString => {
|
|
56
89
|
promises.push(_marcRecordSerializers.MARCXML.from(xmlString, {
|
|
57
90
|
subfieldValues: false
|
|
58
91
|
})); // eslint-disable-line functional/immutable-data
|
|
@@ -60,7 +93,8 @@ function createSubrecordPicker(sruUrl, retrieveAll = false) {
|
|
|
60
93
|
try {
|
|
61
94
|
const records = await Promise.all(promises);
|
|
62
95
|
resolve({
|
|
63
|
-
records
|
|
96
|
+
records,
|
|
97
|
+
amount
|
|
64
98
|
});
|
|
65
99
|
} catch (error) {
|
|
66
100
|
reject(error);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"subRecordPicker.js","names":["_sruClient","_interopRequireDefault","require","_marcRecordSerializers","_debug","_error","createSubrecordPicker","sruUrl","retrieveAll","
|
|
1
|
+
{"version":3,"file":"subRecordPicker.js","names":["_sruClient","_interopRequireDefault","require","_marcRecordSerializers","_debug","_error","componentIndex","monoHostComponentIndex","createSubrecordPicker","sruUrl","retrieveAll","monoHostComponentsOnly","debug","createDebugLogger","undefined","ApiError","sruClient","createSruClient","url","recordSchema","sruClientForAmount","maxRecordsPerRequest","index","readSubrecordAmount","readSomeSubrecords","readAllSubrecords","recordId","Promise","resolve","reject","searchRetrieve","on","totalNumberOfRecords","amount","err","offset","promises","startRecord","xmlString","push","MARCXML","from","subfieldValues","nextRecordOffset","records","all","error"],"sources":["../src/subRecordPicker.js"],"sourcesContent":["import createSruClient from '@natlibfi/sru-client';\nimport {MARCXML} from '@natlibfi/marc-record-serializers';\nimport createDebugLogger from 'debug';\nimport {Error as ApiError} from './error';\n\nconst componentIndex = 'melinda.partsofhost';\nconst monoHostComponentIndex = 'melinda.partsofmonohost';\n\nexport function createSubrecordPicker(sruUrl, retrieveAll = false, monoHostComponentsOnly = false) {\n\n const debug = createDebugLogger('@natlibfi/melinda-commons:subRecordPicker');\n\n debug(`SRU client url: ${sruUrl}`);\n if (sruUrl === undefined) { // eslint-disable-line functional/no-conditional-statements\n throw new ApiError(400, 'Invalid sru url');\n }\n\n const sruClient = createSruClient({url: sruUrl, recordSchema: 'marcxml', retrieveAll});\n // SRU client with maxRecordsPerRequest does not retrieve any records\n const sruClientForAmount = createSruClient({url: sruUrl, recordSchema: 'marcxml', retrieveAll, maxRecordsPerRequest: 0});\n\n const index = monoHostComponentsOnly ? monoHostComponentIndex : componentIndex;\n debug(`Using index ${index}, (monoHostComponentsOnly: ${monoHostComponentsOnly})`);\n\n return {readSubrecordAmount, readSomeSubrecords, readAllSubrecords};\n\n function readSubrecordAmount(recordId) {\n debug(`Getting subrecord amount for ${recordId}`);\n return new Promise((resolve, reject) => {\n sruClientForAmount.searchRetrieve(`${index}=${recordId}`)\n .on('total', totalNumberOfRecords => {\n resolve({amount: totalNumberOfRecords});\n })\n .on('error', err => reject(err));\n });\n }\n\n function readSomeSubrecords(recordId, offset = 1) {\n debug(`Picking subrecords for ${recordId}`);\n return new Promise((resolve, reject) => {\n const promises = [];\n // eslint-disable-next-line functional/no-let\n let amount;\n sruClient.searchRetrieve(`${index}=${recordId}`, {startRecord: offset})\n .on('total', totalNumberOfRecords => {\n // eslint-disable-next-line no-const-assign\n amount = totalNumberOfRecords;\n })\n .on('record', xmlString => {\n promises.push(MARCXML.from(xmlString, {subfieldValues: false})); // eslint-disable-line functional/immutable-data\n })\n .on('end', async nextRecordOffset => {\n try {\n const records = await Promise.all(promises);\n resolve({nextRecordOffset, records, amount});\n } catch (error) {\n reject(error);\n }\n })\n .on('error', err => reject(err));\n });\n }\n\n function readAllSubrecords(recordId) {\n debug(`Picking subrecords for ${recordId}`);\n return new Promise((resolve, reject) => {\n const promises = [];\n // eslint-disable-next-line functional/no-let\n let amount;\n sruClient.searchRetrieve(`${index}=${recordId}`)\n .on('total', totalNumberOfRecords => {\n // eslint-disable-next-line no-const-assign\n amount = totalNumberOfRecords;\n })\n .on('record', xmlString => {\n promises.push(MARCXML.from(xmlString, {subfieldValues: false})); // eslint-disable-line functional/immutable-data\n })\n .on('end', async () => {\n try {\n const records = await Promise.all(promises);\n resolve({records, amount});\n } catch (error) {\n reject(error);\n }\n })\n .on('error', err => reject(err));\n });\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -5,19 +5,25 @@ var _chai = require("chai");
|
|
|
5
5
|
var _subRecordPicker = require("./subRecordPicker");
|
|
6
6
|
var _fixura = require("@natlibfi/fixura");
|
|
7
7
|
var _fixugenHttpClient = _interopRequireDefault(require("@natlibfi/fixugen-http-client"));
|
|
8
|
+
var _debug = _interopRequireDefault(require("debug"));
|
|
9
|
+
const debug = (0, _debug.default)('@natlibfi/melinda-commons:subRecordPicker:test');
|
|
8
10
|
describe('subRecordPicker', () => {
|
|
9
11
|
const sruUrl = 'https://sru';
|
|
10
12
|
const retrieveAll = false;
|
|
13
|
+
//const monoHostComponentsOnly = false;
|
|
14
|
+
|
|
11
15
|
describe('createSubrecordPicker', () => {
|
|
12
16
|
it('Client should have methods', () => {
|
|
13
17
|
const client = (0, _subRecordPicker.createSubrecordPicker)(sruUrl, retrieveAll);
|
|
14
18
|
(0, _chai.expect)(client).to.respondTo('readAllSubrecords');
|
|
15
19
|
(0, _chai.expect)(client).to.respondTo('readSomeSubrecords');
|
|
20
|
+
(0, _chai.expect)(client).to.respondTo('readSubrecordAmount');
|
|
16
21
|
});
|
|
17
22
|
it('Create client should work with just one parametter', () => {
|
|
18
23
|
const client = (0, _subRecordPicker.createSubrecordPicker)(sruUrl);
|
|
19
24
|
(0, _chai.expect)(client).to.respondTo('readAllSubrecords');
|
|
20
25
|
(0, _chai.expect)(client).to.respondTo('readSomeSubrecords');
|
|
26
|
+
(0, _chai.expect)(client).to.respondTo('readSubrecordAmount');
|
|
21
27
|
});
|
|
22
28
|
it('Create client should have at least one parametter', () => {
|
|
23
29
|
(0, _chai.expect)(_subRecordPicker.createSubrecordPicker).to.throw();
|
|
@@ -32,17 +38,31 @@ describe('subRecordPicker', () => {
|
|
|
32
38
|
method,
|
|
33
39
|
sruUrl,
|
|
34
40
|
retrieveAll,
|
|
35
|
-
recordId
|
|
41
|
+
recordId,
|
|
42
|
+
expectedAmount = undefined
|
|
36
43
|
}) {
|
|
37
44
|
const client = (0, _subRecordPicker.createSubrecordPicker)(sruUrl, retrieveAll);
|
|
38
45
|
const expectedRecords = getFixture({
|
|
39
46
|
components: ['expected-records.json'],
|
|
40
47
|
reader: _fixura.READERS.JSON
|
|
41
48
|
});
|
|
49
|
+
debug(`Testing: ${method}`);
|
|
50
|
+
const result = await client[method](recordId);
|
|
51
|
+
debug(`${JSON.stringify(result)}`);
|
|
42
52
|
const {
|
|
43
|
-
records
|
|
44
|
-
|
|
45
|
-
|
|
53
|
+
records,
|
|
54
|
+
amount
|
|
55
|
+
} = result;
|
|
56
|
+
|
|
57
|
+
// eslint-disable-next-line functional/no-conditional-statements
|
|
58
|
+
if (expectedRecords) {
|
|
59
|
+
(0, _chai.expect)(format()).to.eql(expectedRecords);
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
// eslint-disable-next-line functional/no-conditional-statements
|
|
63
|
+
if (expectedAmount) {
|
|
64
|
+
(0, _chai.expect)(amount).to.eql(expectedAmount);
|
|
65
|
+
}
|
|
46
66
|
function format() {
|
|
47
67
|
return records.map(r => r.toObject());
|
|
48
68
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"subRecordPicker.spec.js","names":["_chai","require","_subRecordPicker","_fixura","_fixugenHttpClient","_interopRequireDefault","describe","sruUrl","retrieveAll","it","client","createSubrecordPicker","expect","to","respondTo","throw","generateTests","callback","path","__dirname","getFixture","method","recordId","expectedRecords","components","reader","READERS","JSON","records","format","eql","map","r","toObject"],"sources":["../src/subRecordPicker.spec.js"],"sourcesContent":["import {expect} from 'chai';\nimport {createSubrecordPicker} from './subRecordPicker';\nimport {READERS} from '@natlibfi/fixura';\nimport generateTests from '@natlibfi/fixugen-http-client';\n\ndescribe('subRecordPicker', () => {\n const sruUrl = 'https://sru';\n const retrieveAll = false;\n\n describe('createSubrecordPicker', () => {\n it('Client should have methods', () => {\n const client = createSubrecordPicker(sruUrl, retrieveAll);\n expect(client).to.respondTo('readAllSubrecords');\n expect(client).to.respondTo('readSomeSubrecords');\n });\n\n it('Create client should work with just one parametter', () => {\n const client = createSubrecordPicker(sruUrl);\n expect(client).to.respondTo('readAllSubrecords');\n expect(client).to.respondTo('readSomeSubrecords');\n });\n\n it('Create client should have at least one parametter', () => {\n expect(createSubrecordPicker).to.throw();\n });\n });\n\n generateTests({\n callback,\n path: [__dirname, '..', 'test-fixtures', 'subRecordPicker']\n });\n\n async function callback({getFixture, method, sruUrl, retrieveAll, recordId}) {\n const client = createSubrecordPicker(sruUrl, retrieveAll);\n const expectedRecords = getFixture({components: ['expected-records.json'], reader: READERS.JSON});\n
|
|
1
|
+
{"version":3,"file":"subRecordPicker.spec.js","names":["_chai","require","_subRecordPicker","_fixura","_fixugenHttpClient","_interopRequireDefault","_debug","debug","createDebugLogger","describe","sruUrl","retrieveAll","it","client","createSubrecordPicker","expect","to","respondTo","throw","generateTests","callback","path","__dirname","getFixture","method","recordId","expectedAmount","undefined","expectedRecords","components","reader","READERS","JSON","result","stringify","records","amount","format","eql","map","r","toObject"],"sources":["../src/subRecordPicker.spec.js"],"sourcesContent":["import {expect} from 'chai';\nimport {createSubrecordPicker} from './subRecordPicker';\nimport {READERS} from '@natlibfi/fixura';\nimport generateTests from '@natlibfi/fixugen-http-client';\nimport createDebugLogger from 'debug';\n\nconst debug = createDebugLogger('@natlibfi/melinda-commons:subRecordPicker:test');\n\n\ndescribe('subRecordPicker', () => {\n const sruUrl = 'https://sru';\n const retrieveAll = false;\n //const monoHostComponentsOnly = false;\n\n describe('createSubrecordPicker', () => {\n it('Client should have methods', () => {\n const client = createSubrecordPicker(sruUrl, retrieveAll);\n expect(client).to.respondTo('readAllSubrecords');\n expect(client).to.respondTo('readSomeSubrecords');\n expect(client).to.respondTo('readSubrecordAmount');\n });\n\n it('Create client should work with just one parametter', () => {\n const client = createSubrecordPicker(sruUrl);\n expect(client).to.respondTo('readAllSubrecords');\n expect(client).to.respondTo('readSomeSubrecords');\n expect(client).to.respondTo('readSubrecordAmount');\n });\n\n it('Create client should have at least one parametter', () => {\n expect(createSubrecordPicker).to.throw();\n });\n });\n\n generateTests({\n callback,\n path: [__dirname, '..', 'test-fixtures', 'subRecordPicker']\n });\n\n async function callback({getFixture, method, sruUrl, retrieveAll, recordId, expectedAmount = undefined}) {\n const client = createSubrecordPicker(sruUrl, retrieveAll);\n const expectedRecords = getFixture({components: ['expected-records.json'], reader: READERS.JSON});\n debug(`Testing: ${method}`);\n const result = await client[method](recordId);\n debug(`${JSON.stringify(result)}`);\n const {records, amount} = result;\n\n // eslint-disable-next-line functional/no-conditional-statements\n if (expectedRecords) {\n expect(format()).to.eql(expectedRecords);\n }\n\n // eslint-disable-next-line functional/no-conditional-statements\n if (expectedAmount) {\n expect(amount).to.eql(expectedAmount);\n }\n\n function format() {\n return records.map(r => r.toObject());\n }\n }\n});\n"],"mappings":"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","ignoreList":[]}
|
package/package.json
CHANGED
package/src/subRecordPicker.js
CHANGED
|
@@ -3,29 +3,56 @@ import {MARCXML} from '@natlibfi/marc-record-serializers';
|
|
|
3
3
|
import createDebugLogger from 'debug';
|
|
4
4
|
import {Error as ApiError} from './error';
|
|
5
5
|
|
|
6
|
-
|
|
6
|
+
const componentIndex = 'melinda.partsofhost';
|
|
7
|
+
const monoHostComponentIndex = 'melinda.partsofmonohost';
|
|
8
|
+
|
|
9
|
+
export function createSubrecordPicker(sruUrl, retrieveAll = false, monoHostComponentsOnly = false) {
|
|
10
|
+
|
|
11
|
+
const debug = createDebugLogger('@natlibfi/melinda-commons:subRecordPicker');
|
|
12
|
+
|
|
13
|
+
debug(`SRU client url: ${sruUrl}`);
|
|
7
14
|
if (sruUrl === undefined) { // eslint-disable-line functional/no-conditional-statements
|
|
8
15
|
throw new ApiError(400, 'Invalid sru url');
|
|
9
16
|
}
|
|
10
17
|
|
|
11
|
-
const debug = createDebugLogger('@natlibfi/melinda-commons:subRecordPicker');
|
|
12
|
-
debug(`SRU client url: ${sruUrl}`);
|
|
13
18
|
const sruClient = createSruClient({url: sruUrl, recordSchema: 'marcxml', retrieveAll});
|
|
19
|
+
// SRU client with maxRecordsPerRequest does not retrieve any records
|
|
20
|
+
const sruClientForAmount = createSruClient({url: sruUrl, recordSchema: 'marcxml', retrieveAll, maxRecordsPerRequest: 0});
|
|
21
|
+
|
|
22
|
+
const index = monoHostComponentsOnly ? monoHostComponentIndex : componentIndex;
|
|
23
|
+
debug(`Using index ${index}, (monoHostComponentsOnly: ${monoHostComponentsOnly})`);
|
|
14
24
|
|
|
15
|
-
return {readSomeSubrecords, readAllSubrecords};
|
|
25
|
+
return {readSubrecordAmount, readSomeSubrecords, readAllSubrecords};
|
|
26
|
+
|
|
27
|
+
function readSubrecordAmount(recordId) {
|
|
28
|
+
debug(`Getting subrecord amount for ${recordId}`);
|
|
29
|
+
return new Promise((resolve, reject) => {
|
|
30
|
+
sruClientForAmount.searchRetrieve(`${index}=${recordId}`)
|
|
31
|
+
.on('total', totalNumberOfRecords => {
|
|
32
|
+
resolve({amount: totalNumberOfRecords});
|
|
33
|
+
})
|
|
34
|
+
.on('error', err => reject(err));
|
|
35
|
+
});
|
|
36
|
+
}
|
|
16
37
|
|
|
17
38
|
function readSomeSubrecords(recordId, offset = 1) {
|
|
18
39
|
debug(`Picking subrecords for ${recordId}`);
|
|
19
40
|
return new Promise((resolve, reject) => {
|
|
20
41
|
const promises = [];
|
|
21
|
-
|
|
42
|
+
// eslint-disable-next-line functional/no-let
|
|
43
|
+
let amount;
|
|
44
|
+
sruClient.searchRetrieve(`${index}=${recordId}`, {startRecord: offset})
|
|
45
|
+
.on('total', totalNumberOfRecords => {
|
|
46
|
+
// eslint-disable-next-line no-const-assign
|
|
47
|
+
amount = totalNumberOfRecords;
|
|
48
|
+
})
|
|
22
49
|
.on('record', xmlString => {
|
|
23
50
|
promises.push(MARCXML.from(xmlString, {subfieldValues: false})); // eslint-disable-line functional/immutable-data
|
|
24
51
|
})
|
|
25
52
|
.on('end', async nextRecordOffset => {
|
|
26
53
|
try {
|
|
27
54
|
const records = await Promise.all(promises);
|
|
28
|
-
resolve({nextRecordOffset, records});
|
|
55
|
+
resolve({nextRecordOffset, records, amount});
|
|
29
56
|
} catch (error) {
|
|
30
57
|
reject(error);
|
|
31
58
|
}
|
|
@@ -38,14 +65,20 @@ export function createSubrecordPicker(sruUrl, retrieveAll = false) {
|
|
|
38
65
|
debug(`Picking subrecords for ${recordId}`);
|
|
39
66
|
return new Promise((resolve, reject) => {
|
|
40
67
|
const promises = [];
|
|
41
|
-
|
|
68
|
+
// eslint-disable-next-line functional/no-let
|
|
69
|
+
let amount;
|
|
70
|
+
sruClient.searchRetrieve(`${index}=${recordId}`)
|
|
71
|
+
.on('total', totalNumberOfRecords => {
|
|
72
|
+
// eslint-disable-next-line no-const-assign
|
|
73
|
+
amount = totalNumberOfRecords;
|
|
74
|
+
})
|
|
42
75
|
.on('record', xmlString => {
|
|
43
76
|
promises.push(MARCXML.from(xmlString, {subfieldValues: false})); // eslint-disable-line functional/immutable-data
|
|
44
77
|
})
|
|
45
78
|
.on('end', async () => {
|
|
46
79
|
try {
|
|
47
80
|
const records = await Promise.all(promises);
|
|
48
|
-
resolve({records});
|
|
81
|
+
resolve({records, amount});
|
|
49
82
|
} catch (error) {
|
|
50
83
|
reject(error);
|
|
51
84
|
}
|
|
@@ -2,22 +2,29 @@ import {expect} from 'chai';
|
|
|
2
2
|
import {createSubrecordPicker} from './subRecordPicker';
|
|
3
3
|
import {READERS} from '@natlibfi/fixura';
|
|
4
4
|
import generateTests from '@natlibfi/fixugen-http-client';
|
|
5
|
+
import createDebugLogger from 'debug';
|
|
6
|
+
|
|
7
|
+
const debug = createDebugLogger('@natlibfi/melinda-commons:subRecordPicker:test');
|
|
8
|
+
|
|
5
9
|
|
|
6
10
|
describe('subRecordPicker', () => {
|
|
7
11
|
const sruUrl = 'https://sru';
|
|
8
12
|
const retrieveAll = false;
|
|
13
|
+
//const monoHostComponentsOnly = false;
|
|
9
14
|
|
|
10
15
|
describe('createSubrecordPicker', () => {
|
|
11
16
|
it('Client should have methods', () => {
|
|
12
17
|
const client = createSubrecordPicker(sruUrl, retrieveAll);
|
|
13
18
|
expect(client).to.respondTo('readAllSubrecords');
|
|
14
19
|
expect(client).to.respondTo('readSomeSubrecords');
|
|
20
|
+
expect(client).to.respondTo('readSubrecordAmount');
|
|
15
21
|
});
|
|
16
22
|
|
|
17
23
|
it('Create client should work with just one parametter', () => {
|
|
18
24
|
const client = createSubrecordPicker(sruUrl);
|
|
19
25
|
expect(client).to.respondTo('readAllSubrecords');
|
|
20
26
|
expect(client).to.respondTo('readSomeSubrecords');
|
|
27
|
+
expect(client).to.respondTo('readSubrecordAmount');
|
|
21
28
|
});
|
|
22
29
|
|
|
23
30
|
it('Create client should have at least one parametter', () => {
|
|
@@ -30,12 +37,23 @@ describe('subRecordPicker', () => {
|
|
|
30
37
|
path: [__dirname, '..', 'test-fixtures', 'subRecordPicker']
|
|
31
38
|
});
|
|
32
39
|
|
|
33
|
-
async function callback({getFixture, method, sruUrl, retrieveAll, recordId}) {
|
|
40
|
+
async function callback({getFixture, method, sruUrl, retrieveAll, recordId, expectedAmount = undefined}) {
|
|
34
41
|
const client = createSubrecordPicker(sruUrl, retrieveAll);
|
|
35
42
|
const expectedRecords = getFixture({components: ['expected-records.json'], reader: READERS.JSON});
|
|
36
|
-
|
|
43
|
+
debug(`Testing: ${method}`);
|
|
44
|
+
const result = await client[method](recordId);
|
|
45
|
+
debug(`${JSON.stringify(result)}`);
|
|
46
|
+
const {records, amount} = result;
|
|
47
|
+
|
|
48
|
+
// eslint-disable-next-line functional/no-conditional-statements
|
|
49
|
+
if (expectedRecords) {
|
|
50
|
+
expect(format()).to.eql(expectedRecords);
|
|
51
|
+
}
|
|
37
52
|
|
|
38
|
-
|
|
53
|
+
// eslint-disable-next-line functional/no-conditional-statements
|
|
54
|
+
if (expectedAmount) {
|
|
55
|
+
expect(amount).to.eql(expectedAmount);
|
|
56
|
+
}
|
|
39
57
|
|
|
40
58
|
function format() {
|
|
41
59
|
return records.map(r => r.toObject());
|
|
@@ -0,0 +1,632 @@
|
|
|
1
|
+
[
|
|
2
|
+
{
|
|
3
|
+
"fields": [
|
|
4
|
+
{
|
|
5
|
+
"tag": "001",
|
|
6
|
+
"value": "000059308"
|
|
7
|
+
},
|
|
8
|
+
{
|
|
9
|
+
"tag": "003",
|
|
10
|
+
"value": "FI-MELINDA"
|
|
11
|
+
},
|
|
12
|
+
{
|
|
13
|
+
"tag": "005",
|
|
14
|
+
"value": "20100115121808.0"
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
"tag": "008",
|
|
18
|
+
"value": "920131s1992 xxk|||||||||||||||||eng||"
|
|
19
|
+
},
|
|
20
|
+
{
|
|
21
|
+
"ind1": " ",
|
|
22
|
+
"ind2": " ",
|
|
23
|
+
"subfields": [
|
|
24
|
+
{
|
|
25
|
+
"code": "a",
|
|
26
|
+
"value": "DELETED"
|
|
27
|
+
}
|
|
28
|
+
],
|
|
29
|
+
"tag": "STA"
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
"ind1": " ",
|
|
33
|
+
"ind2": " ",
|
|
34
|
+
"subfields": [
|
|
35
|
+
{
|
|
36
|
+
"code": "a",
|
|
37
|
+
"value": "0-333-52414-4 (inb.)"
|
|
38
|
+
}
|
|
39
|
+
],
|
|
40
|
+
"tag": "020"
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
"ind1": " ",
|
|
44
|
+
"ind2": " ",
|
|
45
|
+
"subfields": [
|
|
46
|
+
{
|
|
47
|
+
"code": "a",
|
|
48
|
+
"value": "(FI-MELINDA)000059308"
|
|
49
|
+
}
|
|
50
|
+
],
|
|
51
|
+
"tag": "035"
|
|
52
|
+
},
|
|
53
|
+
{
|
|
54
|
+
"ind1": "0",
|
|
55
|
+
"ind2": " ",
|
|
56
|
+
"subfields": [
|
|
57
|
+
{
|
|
58
|
+
"code": "a",
|
|
59
|
+
"value": "eng"
|
|
60
|
+
}
|
|
61
|
+
],
|
|
62
|
+
"tag": "041"
|
|
63
|
+
},
|
|
64
|
+
{
|
|
65
|
+
"ind1": " ",
|
|
66
|
+
"ind2": " ",
|
|
67
|
+
"subfields": [
|
|
68
|
+
{
|
|
69
|
+
"code": "a",
|
|
70
|
+
"value": "1"
|
|
71
|
+
},
|
|
72
|
+
{
|
|
73
|
+
"code": "x",
|
|
74
|
+
"value": "(091)"
|
|
75
|
+
}
|
|
76
|
+
],
|
|
77
|
+
"tag": "080"
|
|
78
|
+
},
|
|
79
|
+
{
|
|
80
|
+
"ind1": " ",
|
|
81
|
+
"ind2": " ",
|
|
82
|
+
"subfields": [
|
|
83
|
+
{
|
|
84
|
+
"code": "a",
|
|
85
|
+
"value": "17"
|
|
86
|
+
}
|
|
87
|
+
],
|
|
88
|
+
"tag": "080"
|
|
89
|
+
},
|
|
90
|
+
{
|
|
91
|
+
"ind1": "1",
|
|
92
|
+
"ind2": " ",
|
|
93
|
+
"subfields": [
|
|
94
|
+
{
|
|
95
|
+
"code": "a",
|
|
96
|
+
"value": "Phillips, D. Z."
|
|
97
|
+
}
|
|
98
|
+
],
|
|
99
|
+
"tag": "100"
|
|
100
|
+
},
|
|
101
|
+
{
|
|
102
|
+
"ind1": "1",
|
|
103
|
+
"ind2": "0",
|
|
104
|
+
"subfields": [
|
|
105
|
+
{
|
|
106
|
+
"code": "a",
|
|
107
|
+
"value": "Interventions in ethics /"
|
|
108
|
+
},
|
|
109
|
+
{
|
|
110
|
+
"code": "c",
|
|
111
|
+
"value": "D. Z. Phillips."
|
|
112
|
+
}
|
|
113
|
+
],
|
|
114
|
+
"tag": "245"
|
|
115
|
+
},
|
|
116
|
+
{
|
|
117
|
+
"ind1": " ",
|
|
118
|
+
"ind2": " ",
|
|
119
|
+
"subfields": [
|
|
120
|
+
{
|
|
121
|
+
"code": "a",
|
|
122
|
+
"value": "London :"
|
|
123
|
+
},
|
|
124
|
+
{
|
|
125
|
+
"code": "b",
|
|
126
|
+
"value": "Macmillan,"
|
|
127
|
+
},
|
|
128
|
+
{
|
|
129
|
+
"code": "c",
|
|
130
|
+
"value": "1992."
|
|
131
|
+
}
|
|
132
|
+
],
|
|
133
|
+
"tag": "260"
|
|
134
|
+
},
|
|
135
|
+
{
|
|
136
|
+
"ind1": " ",
|
|
137
|
+
"ind2": " ",
|
|
138
|
+
"subfields": [
|
|
139
|
+
{
|
|
140
|
+
"code": "a",
|
|
141
|
+
"value": "xv, 300 s."
|
|
142
|
+
}
|
|
143
|
+
],
|
|
144
|
+
"tag": "300"
|
|
145
|
+
},
|
|
146
|
+
{
|
|
147
|
+
"ind1": "0",
|
|
148
|
+
"ind2": " ",
|
|
149
|
+
"subfields": [
|
|
150
|
+
{
|
|
151
|
+
"code": "a",
|
|
152
|
+
"value": "Swansea studies in philosophy"
|
|
153
|
+
}
|
|
154
|
+
],
|
|
155
|
+
"tag": "490"
|
|
156
|
+
},
|
|
157
|
+
{
|
|
158
|
+
"ind1": " ",
|
|
159
|
+
"ind2": " ",
|
|
160
|
+
"subfields": [
|
|
161
|
+
{
|
|
162
|
+
"code": "c",
|
|
163
|
+
"value": "134997"
|
|
164
|
+
},
|
|
165
|
+
{
|
|
166
|
+
"code": "b",
|
|
167
|
+
"value": "alma"
|
|
168
|
+
}
|
|
169
|
+
],
|
|
170
|
+
"tag": "SID"
|
|
171
|
+
},
|
|
172
|
+
{
|
|
173
|
+
"ind1": " ",
|
|
174
|
+
"ind2": " ",
|
|
175
|
+
"subfields": [
|
|
176
|
+
{
|
|
177
|
+
"code": "a",
|
|
178
|
+
"value": "KVP4001"
|
|
179
|
+
},
|
|
180
|
+
{
|
|
181
|
+
"code": "b"
|
|
182
|
+
},
|
|
183
|
+
{
|
|
184
|
+
"code": "c",
|
|
185
|
+
"value": "20100115"
|
|
186
|
+
},
|
|
187
|
+
{
|
|
188
|
+
"code": "l",
|
|
189
|
+
"value": "FIN01"
|
|
190
|
+
},
|
|
191
|
+
{
|
|
192
|
+
"code": "h",
|
|
193
|
+
"value": "1218"
|
|
194
|
+
}
|
|
195
|
+
],
|
|
196
|
+
"tag": "CAT"
|
|
197
|
+
},
|
|
198
|
+
{
|
|
199
|
+
"ind1": " ",
|
|
200
|
+
"ind2": " ",
|
|
201
|
+
"subfields": [
|
|
202
|
+
{
|
|
203
|
+
"code": "a",
|
|
204
|
+
"value": "ALMA"
|
|
205
|
+
}
|
|
206
|
+
],
|
|
207
|
+
"tag": "LOW"
|
|
208
|
+
}
|
|
209
|
+
],
|
|
210
|
+
"leader": "00623dam a22002417a 4500"
|
|
211
|
+
},
|
|
212
|
+
{
|
|
213
|
+
"fields": [
|
|
214
|
+
{
|
|
215
|
+
"tag": "001",
|
|
216
|
+
"value": "000059308"
|
|
217
|
+
},
|
|
218
|
+
{
|
|
219
|
+
"tag": "003",
|
|
220
|
+
"value": "FI-MELINDA"
|
|
221
|
+
},
|
|
222
|
+
{
|
|
223
|
+
"tag": "005",
|
|
224
|
+
"value": "20100115121808.0"
|
|
225
|
+
},
|
|
226
|
+
{
|
|
227
|
+
"tag": "008",
|
|
228
|
+
"value": "920131s1992 xxk|||||||||||||||||eng||"
|
|
229
|
+
},
|
|
230
|
+
{
|
|
231
|
+
"ind1": " ",
|
|
232
|
+
"ind2": " ",
|
|
233
|
+
"subfields": [
|
|
234
|
+
{
|
|
235
|
+
"code": "a",
|
|
236
|
+
"value": "DELETED"
|
|
237
|
+
}
|
|
238
|
+
],
|
|
239
|
+
"tag": "STA"
|
|
240
|
+
},
|
|
241
|
+
{
|
|
242
|
+
"ind1": " ",
|
|
243
|
+
"ind2": " ",
|
|
244
|
+
"subfields": [
|
|
245
|
+
{
|
|
246
|
+
"code": "a",
|
|
247
|
+
"value": "0-333-52414-4 (inb.)"
|
|
248
|
+
}
|
|
249
|
+
],
|
|
250
|
+
"tag": "020"
|
|
251
|
+
},
|
|
252
|
+
{
|
|
253
|
+
"ind1": " ",
|
|
254
|
+
"ind2": " ",
|
|
255
|
+
"subfields": [
|
|
256
|
+
{
|
|
257
|
+
"code": "a",
|
|
258
|
+
"value": "(FI-MELINDA)000059308"
|
|
259
|
+
}
|
|
260
|
+
],
|
|
261
|
+
"tag": "035"
|
|
262
|
+
},
|
|
263
|
+
{
|
|
264
|
+
"ind1": "0",
|
|
265
|
+
"ind2": " ",
|
|
266
|
+
"subfields": [
|
|
267
|
+
{
|
|
268
|
+
"code": "a",
|
|
269
|
+
"value": "eng"
|
|
270
|
+
}
|
|
271
|
+
],
|
|
272
|
+
"tag": "041"
|
|
273
|
+
},
|
|
274
|
+
{
|
|
275
|
+
"ind1": " ",
|
|
276
|
+
"ind2": " ",
|
|
277
|
+
"subfields": [
|
|
278
|
+
{
|
|
279
|
+
"code": "a",
|
|
280
|
+
"value": "1"
|
|
281
|
+
},
|
|
282
|
+
{
|
|
283
|
+
"code": "x",
|
|
284
|
+
"value": "(091)"
|
|
285
|
+
}
|
|
286
|
+
],
|
|
287
|
+
"tag": "080"
|
|
288
|
+
},
|
|
289
|
+
{
|
|
290
|
+
"ind1": " ",
|
|
291
|
+
"ind2": " ",
|
|
292
|
+
"subfields": [
|
|
293
|
+
{
|
|
294
|
+
"code": "a",
|
|
295
|
+
"value": "17"
|
|
296
|
+
}
|
|
297
|
+
],
|
|
298
|
+
"tag": "080"
|
|
299
|
+
},
|
|
300
|
+
{
|
|
301
|
+
"ind1": "1",
|
|
302
|
+
"ind2": " ",
|
|
303
|
+
"subfields": [
|
|
304
|
+
{
|
|
305
|
+
"code": "a",
|
|
306
|
+
"value": "Phillips, D. Z."
|
|
307
|
+
}
|
|
308
|
+
],
|
|
309
|
+
"tag": "100"
|
|
310
|
+
},
|
|
311
|
+
{
|
|
312
|
+
"ind1": "1",
|
|
313
|
+
"ind2": "0",
|
|
314
|
+
"subfields": [
|
|
315
|
+
{
|
|
316
|
+
"code": "a",
|
|
317
|
+
"value": "Interventions in ethics /"
|
|
318
|
+
},
|
|
319
|
+
{
|
|
320
|
+
"code": "c",
|
|
321
|
+
"value": "D. Z. Phillips."
|
|
322
|
+
}
|
|
323
|
+
],
|
|
324
|
+
"tag": "245"
|
|
325
|
+
},
|
|
326
|
+
{
|
|
327
|
+
"ind1": " ",
|
|
328
|
+
"ind2": " ",
|
|
329
|
+
"subfields": [
|
|
330
|
+
{
|
|
331
|
+
"code": "a",
|
|
332
|
+
"value": "London :"
|
|
333
|
+
},
|
|
334
|
+
{
|
|
335
|
+
"code": "b",
|
|
336
|
+
"value": "Macmillan,"
|
|
337
|
+
},
|
|
338
|
+
{
|
|
339
|
+
"code": "c",
|
|
340
|
+
"value": "1992."
|
|
341
|
+
}
|
|
342
|
+
],
|
|
343
|
+
"tag": "260"
|
|
344
|
+
},
|
|
345
|
+
{
|
|
346
|
+
"ind1": " ",
|
|
347
|
+
"ind2": " ",
|
|
348
|
+
"subfields": [
|
|
349
|
+
{
|
|
350
|
+
"code": "a",
|
|
351
|
+
"value": "xv, 300 s."
|
|
352
|
+
}
|
|
353
|
+
],
|
|
354
|
+
"tag": "300"
|
|
355
|
+
},
|
|
356
|
+
{
|
|
357
|
+
"ind1": "0",
|
|
358
|
+
"ind2": " ",
|
|
359
|
+
"subfields": [
|
|
360
|
+
{
|
|
361
|
+
"code": "a",
|
|
362
|
+
"value": "Swansea studies in philosophy"
|
|
363
|
+
}
|
|
364
|
+
],
|
|
365
|
+
"tag": "490"
|
|
366
|
+
},
|
|
367
|
+
{
|
|
368
|
+
"ind1": " ",
|
|
369
|
+
"ind2": " ",
|
|
370
|
+
"subfields": [
|
|
371
|
+
{
|
|
372
|
+
"code": "c",
|
|
373
|
+
"value": "134997"
|
|
374
|
+
},
|
|
375
|
+
{
|
|
376
|
+
"code": "b",
|
|
377
|
+
"value": "alma"
|
|
378
|
+
}
|
|
379
|
+
],
|
|
380
|
+
"tag": "SID"
|
|
381
|
+
},
|
|
382
|
+
{
|
|
383
|
+
"ind1": " ",
|
|
384
|
+
"ind2": " ",
|
|
385
|
+
"subfields": [
|
|
386
|
+
{
|
|
387
|
+
"code": "a",
|
|
388
|
+
"value": "KVP4001"
|
|
389
|
+
},
|
|
390
|
+
{
|
|
391
|
+
"code": "b"
|
|
392
|
+
},
|
|
393
|
+
{
|
|
394
|
+
"code": "c",
|
|
395
|
+
"value": "20100115"
|
|
396
|
+
},
|
|
397
|
+
{
|
|
398
|
+
"code": "l",
|
|
399
|
+
"value": "FIN01"
|
|
400
|
+
},
|
|
401
|
+
{
|
|
402
|
+
"code": "h",
|
|
403
|
+
"value": "1218"
|
|
404
|
+
}
|
|
405
|
+
],
|
|
406
|
+
"tag": "CAT"
|
|
407
|
+
},
|
|
408
|
+
{
|
|
409
|
+
"ind1": " ",
|
|
410
|
+
"ind2": " ",
|
|
411
|
+
"subfields": [
|
|
412
|
+
{
|
|
413
|
+
"code": "a",
|
|
414
|
+
"value": "ALMA"
|
|
415
|
+
}
|
|
416
|
+
],
|
|
417
|
+
"tag": "LOW"
|
|
418
|
+
}
|
|
419
|
+
],
|
|
420
|
+
"leader": "00623dam a22002417a 4500"
|
|
421
|
+
},
|
|
422
|
+
{
|
|
423
|
+
"fields": [
|
|
424
|
+
{
|
|
425
|
+
"tag": "001",
|
|
426
|
+
"value": "000059308"
|
|
427
|
+
},
|
|
428
|
+
{
|
|
429
|
+
"tag": "003",
|
|
430
|
+
"value": "FI-MELINDA"
|
|
431
|
+
},
|
|
432
|
+
{
|
|
433
|
+
"tag": "005",
|
|
434
|
+
"value": "20100115121808.0"
|
|
435
|
+
},
|
|
436
|
+
{
|
|
437
|
+
"tag": "008",
|
|
438
|
+
"value": "920131s1992 xxk|||||||||||||||||eng||"
|
|
439
|
+
},
|
|
440
|
+
{
|
|
441
|
+
"ind1": " ",
|
|
442
|
+
"ind2": " ",
|
|
443
|
+
"subfields": [
|
|
444
|
+
{
|
|
445
|
+
"code": "a",
|
|
446
|
+
"value": "DELETED"
|
|
447
|
+
}
|
|
448
|
+
],
|
|
449
|
+
"tag": "STA"
|
|
450
|
+
},
|
|
451
|
+
{
|
|
452
|
+
"ind1": " ",
|
|
453
|
+
"ind2": " ",
|
|
454
|
+
"subfields": [
|
|
455
|
+
{
|
|
456
|
+
"code": "a",
|
|
457
|
+
"value": "0-333-52414-4 (inb.)"
|
|
458
|
+
}
|
|
459
|
+
],
|
|
460
|
+
"tag": "020"
|
|
461
|
+
},
|
|
462
|
+
{
|
|
463
|
+
"ind1": " ",
|
|
464
|
+
"ind2": " ",
|
|
465
|
+
"subfields": [
|
|
466
|
+
{
|
|
467
|
+
"code": "a",
|
|
468
|
+
"value": "(FI-MELINDA)000059308"
|
|
469
|
+
}
|
|
470
|
+
],
|
|
471
|
+
"tag": "035"
|
|
472
|
+
},
|
|
473
|
+
{
|
|
474
|
+
"ind1": "0",
|
|
475
|
+
"ind2": " ",
|
|
476
|
+
"subfields": [
|
|
477
|
+
{
|
|
478
|
+
"code": "a",
|
|
479
|
+
"value": "eng"
|
|
480
|
+
}
|
|
481
|
+
],
|
|
482
|
+
"tag": "041"
|
|
483
|
+
},
|
|
484
|
+
{
|
|
485
|
+
"ind1": " ",
|
|
486
|
+
"ind2": " ",
|
|
487
|
+
"subfields": [
|
|
488
|
+
{
|
|
489
|
+
"code": "a",
|
|
490
|
+
"value": "1"
|
|
491
|
+
},
|
|
492
|
+
{
|
|
493
|
+
"code": "x",
|
|
494
|
+
"value": "(091)"
|
|
495
|
+
}
|
|
496
|
+
],
|
|
497
|
+
"tag": "080"
|
|
498
|
+
},
|
|
499
|
+
{
|
|
500
|
+
"ind1": " ",
|
|
501
|
+
"ind2": " ",
|
|
502
|
+
"subfields": [
|
|
503
|
+
{
|
|
504
|
+
"code": "a",
|
|
505
|
+
"value": "17"
|
|
506
|
+
}
|
|
507
|
+
],
|
|
508
|
+
"tag": "080"
|
|
509
|
+
},
|
|
510
|
+
{
|
|
511
|
+
"ind1": "1",
|
|
512
|
+
"ind2": " ",
|
|
513
|
+
"subfields": [
|
|
514
|
+
{
|
|
515
|
+
"code": "a",
|
|
516
|
+
"value": "Phillips, D. Z."
|
|
517
|
+
}
|
|
518
|
+
],
|
|
519
|
+
"tag": "100"
|
|
520
|
+
},
|
|
521
|
+
{
|
|
522
|
+
"ind1": "1",
|
|
523
|
+
"ind2": "0",
|
|
524
|
+
"subfields": [
|
|
525
|
+
{
|
|
526
|
+
"code": "a",
|
|
527
|
+
"value": "Interventions in ethics /"
|
|
528
|
+
},
|
|
529
|
+
{
|
|
530
|
+
"code": "c",
|
|
531
|
+
"value": "D. Z. Phillips."
|
|
532
|
+
}
|
|
533
|
+
],
|
|
534
|
+
"tag": "245"
|
|
535
|
+
},
|
|
536
|
+
{
|
|
537
|
+
"ind1": " ",
|
|
538
|
+
"ind2": " ",
|
|
539
|
+
"subfields": [
|
|
540
|
+
{
|
|
541
|
+
"code": "a",
|
|
542
|
+
"value": "London :"
|
|
543
|
+
},
|
|
544
|
+
{
|
|
545
|
+
"code": "b",
|
|
546
|
+
"value": "Macmillan,"
|
|
547
|
+
},
|
|
548
|
+
{
|
|
549
|
+
"code": "c",
|
|
550
|
+
"value": "1992."
|
|
551
|
+
}
|
|
552
|
+
],
|
|
553
|
+
"tag": "260"
|
|
554
|
+
},
|
|
555
|
+
{
|
|
556
|
+
"ind1": " ",
|
|
557
|
+
"ind2": " ",
|
|
558
|
+
"subfields": [
|
|
559
|
+
{
|
|
560
|
+
"code": "a",
|
|
561
|
+
"value": "xv, 300 s."
|
|
562
|
+
}
|
|
563
|
+
],
|
|
564
|
+
"tag": "300"
|
|
565
|
+
},
|
|
566
|
+
{
|
|
567
|
+
"ind1": "0",
|
|
568
|
+
"ind2": " ",
|
|
569
|
+
"subfields": [
|
|
570
|
+
{
|
|
571
|
+
"code": "a",
|
|
572
|
+
"value": "Swansea studies in philosophy"
|
|
573
|
+
}
|
|
574
|
+
],
|
|
575
|
+
"tag": "490"
|
|
576
|
+
},
|
|
577
|
+
{
|
|
578
|
+
"ind1": " ",
|
|
579
|
+
"ind2": " ",
|
|
580
|
+
"subfields": [
|
|
581
|
+
{
|
|
582
|
+
"code": "c",
|
|
583
|
+
"value": "134997"
|
|
584
|
+
},
|
|
585
|
+
{
|
|
586
|
+
"code": "b",
|
|
587
|
+
"value": "alma"
|
|
588
|
+
}
|
|
589
|
+
],
|
|
590
|
+
"tag": "SID"
|
|
591
|
+
},
|
|
592
|
+
{
|
|
593
|
+
"ind1": " ",
|
|
594
|
+
"ind2": " ",
|
|
595
|
+
"subfields": [
|
|
596
|
+
{
|
|
597
|
+
"code": "a",
|
|
598
|
+
"value": "KVP4001"
|
|
599
|
+
},
|
|
600
|
+
{
|
|
601
|
+
"code": "b"
|
|
602
|
+
},
|
|
603
|
+
{
|
|
604
|
+
"code": "c",
|
|
605
|
+
"value": "20100115"
|
|
606
|
+
},
|
|
607
|
+
{
|
|
608
|
+
"code": "l",
|
|
609
|
+
"value": "FIN01"
|
|
610
|
+
},
|
|
611
|
+
{
|
|
612
|
+
"code": "h",
|
|
613
|
+
"value": "1218"
|
|
614
|
+
}
|
|
615
|
+
],
|
|
616
|
+
"tag": "CAT"
|
|
617
|
+
},
|
|
618
|
+
{
|
|
619
|
+
"ind1": " ",
|
|
620
|
+
"ind2": " ",
|
|
621
|
+
"subfields": [
|
|
622
|
+
{
|
|
623
|
+
"code": "a",
|
|
624
|
+
"value": "ALMA"
|
|
625
|
+
}
|
|
626
|
+
],
|
|
627
|
+
"tag": "LOW"
|
|
628
|
+
}
|
|
629
|
+
],
|
|
630
|
+
"leader": "00623dam a22002417a 4500"
|
|
631
|
+
}
|
|
632
|
+
]
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
{
|
|
2
|
+
"description": "Should retrieve all records (with several requests)",
|
|
3
|
+
"sruUrl": "http://foo.bar",
|
|
4
|
+
"retrieveAll": true,
|
|
5
|
+
"recordId": "000000123",
|
|
6
|
+
"method": "readAllSubrecords",
|
|
7
|
+
"expectedAmount": 3,
|
|
8
|
+
"requests": [
|
|
9
|
+
{
|
|
10
|
+
"method": "get",
|
|
11
|
+
"url": "/?operation=searchRetrieve&query=melinda.partsofhost%3D000000123&startRecord=1&recordSchema=marcxml&version=2.0&maximumRecords=1000",
|
|
12
|
+
"status": 200
|
|
13
|
+
},
|
|
14
|
+
{
|
|
15
|
+
"method": "get",
|
|
16
|
+
"url": "/?operation=searchRetrieve&query=melinda.partsofhost%3D000000123&startRecord=3&recordSchema=marcxml&version=2.0&maximumRecords=1000",
|
|
17
|
+
"status": 200
|
|
18
|
+
}
|
|
19
|
+
],
|
|
20
|
+
"only": false,
|
|
21
|
+
"skip": false
|
|
22
|
+
}
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
<?xml version="1.0"?>
|
|
2
|
+
<zs:searchRetrieveResponse xmlns:zs="http://docs.oasis-open.org/ns/search-ws/sruResponse">
|
|
3
|
+
<zs:numberOfRecords>3</zs:numberOfRecords>
|
|
4
|
+
<zs:records>
|
|
5
|
+
<zs:record>
|
|
6
|
+
<zs:recordSchema>info:srw/schema/1/marcxml-v1.1</zs:recordSchema>
|
|
7
|
+
<zs:recordXMLEscaping>xml</zs:recordXMLEscaping>
|
|
8
|
+
<zs:recordData>
|
|
9
|
+
<record xmlns="http://www.loc.gov/MARC21/slim">
|
|
10
|
+
<leader>00623dam a22002417a 4500</leader>
|
|
11
|
+
<controlfield tag="001">000059308</controlfield>
|
|
12
|
+
<controlfield tag="003">FI-MELINDA</controlfield>
|
|
13
|
+
<controlfield tag="005">20100115121808.0</controlfield>
|
|
14
|
+
<controlfield tag="008">920131s1992 xxk|||||||||||||||||eng||</controlfield>
|
|
15
|
+
<datafield tag="STA" ind1=" " ind2=" ">
|
|
16
|
+
<subfield code="a">DELETED</subfield>
|
|
17
|
+
</datafield>
|
|
18
|
+
<datafield tag="020" ind1=" " ind2=" ">
|
|
19
|
+
<subfield code="a">0-333-52414-4 (inb.)</subfield>
|
|
20
|
+
</datafield>
|
|
21
|
+
<datafield tag="035" ind1=" " ind2=" ">
|
|
22
|
+
<subfield code="a">(FI-MELINDA)000059308</subfield>
|
|
23
|
+
</datafield>
|
|
24
|
+
<datafield tag="041" ind1="0" ind2=" ">
|
|
25
|
+
<subfield code="a">eng</subfield>
|
|
26
|
+
</datafield>
|
|
27
|
+
<datafield tag="080" ind1=" " ind2=" ">
|
|
28
|
+
<subfield code="a">1</subfield>
|
|
29
|
+
<subfield code="x">(091)</subfield>
|
|
30
|
+
</datafield>
|
|
31
|
+
<datafield tag="080" ind1=" " ind2=" ">
|
|
32
|
+
<subfield code="a">17</subfield>
|
|
33
|
+
</datafield>
|
|
34
|
+
<datafield tag="100" ind1="1" ind2=" ">
|
|
35
|
+
<subfield code="a">Phillips, D. Z.</subfield>
|
|
36
|
+
</datafield>
|
|
37
|
+
<datafield tag="245" ind1="1" ind2="0">
|
|
38
|
+
<subfield code="a">Interventions in ethics /</subfield>
|
|
39
|
+
<subfield code="c">D. Z. Phillips.</subfield>
|
|
40
|
+
</datafield>
|
|
41
|
+
<datafield tag="260" ind1=" " ind2=" ">
|
|
42
|
+
<subfield code="a">London :</subfield>
|
|
43
|
+
<subfield code="b">Macmillan,</subfield>
|
|
44
|
+
<subfield code="c">1992.</subfield>
|
|
45
|
+
</datafield>
|
|
46
|
+
<datafield tag="300" ind1=" " ind2=" ">
|
|
47
|
+
<subfield code="a">xv, 300 s.</subfield>
|
|
48
|
+
</datafield>
|
|
49
|
+
<datafield tag="490" ind1="0" ind2=" ">
|
|
50
|
+
<subfield code="a">Swansea studies in philosophy</subfield>
|
|
51
|
+
</datafield>
|
|
52
|
+
<datafield tag="SID" ind1=" " ind2=" ">
|
|
53
|
+
<subfield code="c">134997</subfield>
|
|
54
|
+
<subfield code="b">alma</subfield>
|
|
55
|
+
</datafield>
|
|
56
|
+
<datafield tag="CAT" ind1=" " ind2=" ">
|
|
57
|
+
<subfield code="a">KVP4001</subfield>
|
|
58
|
+
<subfield code="b" />
|
|
59
|
+
<subfield code="c">20100115</subfield>
|
|
60
|
+
<subfield code="l">FIN01</subfield>
|
|
61
|
+
<subfield code="h">1218</subfield>
|
|
62
|
+
</datafield>
|
|
63
|
+
<datafield tag="LOW" ind1=" " ind2=" ">
|
|
64
|
+
<subfield code="a">ALMA</subfield>
|
|
65
|
+
</datafield>
|
|
66
|
+
</record>
|
|
67
|
+
</zs:recordData>
|
|
68
|
+
<zs:recordPosition>1</zs:recordPosition>
|
|
69
|
+
</zs:record>
|
|
70
|
+
<zs:record>
|
|
71
|
+
<zs:recordSchema>info:srw/schema/1/marcxml-v1.1</zs:recordSchema>
|
|
72
|
+
<zs:recordXMLEscaping>xml</zs:recordXMLEscaping>
|
|
73
|
+
<zs:recordData>
|
|
74
|
+
<record xmlns="http://www.loc.gov/MARC21/slim">
|
|
75
|
+
<leader>00623dam a22002417a 4500</leader>
|
|
76
|
+
<controlfield tag="001">000059308</controlfield>
|
|
77
|
+
<controlfield tag="003">FI-MELINDA</controlfield>
|
|
78
|
+
<controlfield tag="005">20100115121808.0</controlfield>
|
|
79
|
+
<controlfield tag="008">920131s1992 xxk|||||||||||||||||eng||</controlfield>
|
|
80
|
+
<datafield tag="STA" ind1=" " ind2=" ">
|
|
81
|
+
<subfield code="a">DELETED</subfield>
|
|
82
|
+
</datafield>
|
|
83
|
+
<datafield tag="020" ind1=" " ind2=" ">
|
|
84
|
+
<subfield code="a">0-333-52414-4 (inb.)</subfield>
|
|
85
|
+
</datafield>
|
|
86
|
+
<datafield tag="035" ind1=" " ind2=" ">
|
|
87
|
+
<subfield code="a">(FI-MELINDA)000059308</subfield>
|
|
88
|
+
</datafield>
|
|
89
|
+
<datafield tag="041" ind1="0" ind2=" ">
|
|
90
|
+
<subfield code="a">eng</subfield>
|
|
91
|
+
</datafield>
|
|
92
|
+
<datafield tag="080" ind1=" " ind2=" ">
|
|
93
|
+
<subfield code="a">1</subfield>
|
|
94
|
+
<subfield code="x">(091)</subfield>
|
|
95
|
+
</datafield>
|
|
96
|
+
<datafield tag="080" ind1=" " ind2=" ">
|
|
97
|
+
<subfield code="a">17</subfield>
|
|
98
|
+
</datafield>
|
|
99
|
+
<datafield tag="100" ind1="1" ind2=" ">
|
|
100
|
+
<subfield code="a">Phillips, D. Z.</subfield>
|
|
101
|
+
</datafield>
|
|
102
|
+
<datafield tag="245" ind1="1" ind2="0">
|
|
103
|
+
<subfield code="a">Interventions in ethics /</subfield>
|
|
104
|
+
<subfield code="c">D. Z. Phillips.</subfield>
|
|
105
|
+
</datafield>
|
|
106
|
+
<datafield tag="260" ind1=" " ind2=" ">
|
|
107
|
+
<subfield code="a">London :</subfield>
|
|
108
|
+
<subfield code="b">Macmillan,</subfield>
|
|
109
|
+
<subfield code="c">1992.</subfield>
|
|
110
|
+
</datafield>
|
|
111
|
+
<datafield tag="300" ind1=" " ind2=" ">
|
|
112
|
+
<subfield code="a">xv, 300 s.</subfield>
|
|
113
|
+
</datafield>
|
|
114
|
+
<datafield tag="490" ind1="0" ind2=" ">
|
|
115
|
+
<subfield code="a">Swansea studies in philosophy</subfield>
|
|
116
|
+
</datafield>
|
|
117
|
+
<datafield tag="SID" ind1=" " ind2=" ">
|
|
118
|
+
<subfield code="c">134997</subfield>
|
|
119
|
+
<subfield code="b">alma</subfield>
|
|
120
|
+
</datafield>
|
|
121
|
+
<datafield tag="CAT" ind1=" " ind2=" ">
|
|
122
|
+
<subfield code="a">KVP4001</subfield>
|
|
123
|
+
<subfield code="b" />
|
|
124
|
+
<subfield code="c">20100115</subfield>
|
|
125
|
+
<subfield code="l">FIN01</subfield>
|
|
126
|
+
<subfield code="h">1218</subfield>
|
|
127
|
+
</datafield>
|
|
128
|
+
<datafield tag="LOW" ind1=" " ind2=" ">
|
|
129
|
+
<subfield code="a">ALMA</subfield>
|
|
130
|
+
</datafield>
|
|
131
|
+
</record>
|
|
132
|
+
</zs:recordData>
|
|
133
|
+
<zs:recordPosition>2</zs:recordPosition>
|
|
134
|
+
</zs:record>
|
|
135
|
+
</zs:records>
|
|
136
|
+
</zs:searchRetrieveResponse>
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
<?xml version="1.0"?>
|
|
2
|
+
<zs:searchRetrieveResponse xmlns:zs="http://docs.oasis-open.org/ns/search-ws/sruResponse">
|
|
3
|
+
<zs:numberOfRecords>3</zs:numberOfRecords>
|
|
4
|
+
<zs:records>
|
|
5
|
+
<zs:record>
|
|
6
|
+
<zs:recordSchema>info:srw/schema/1/marcxml-v1.1</zs:recordSchema>
|
|
7
|
+
<zs:recordXMLEscaping>xml</zs:recordXMLEscaping>
|
|
8
|
+
<zs:recordData>
|
|
9
|
+
<record xmlns="http://www.loc.gov/MARC21/slim">
|
|
10
|
+
<leader>00623dam a22002417a 4500</leader>
|
|
11
|
+
<controlfield tag="001">000059308</controlfield>
|
|
12
|
+
<controlfield tag="003">FI-MELINDA</controlfield>
|
|
13
|
+
<controlfield tag="005">20100115121808.0</controlfield>
|
|
14
|
+
<controlfield tag="008">920131s1992 xxk|||||||||||||||||eng||</controlfield>
|
|
15
|
+
<datafield tag="STA" ind1=" " ind2=" ">
|
|
16
|
+
<subfield code="a">DELETED</subfield>
|
|
17
|
+
</datafield>
|
|
18
|
+
<datafield tag="020" ind1=" " ind2=" ">
|
|
19
|
+
<subfield code="a">0-333-52414-4 (inb.)</subfield>
|
|
20
|
+
</datafield>
|
|
21
|
+
<datafield tag="035" ind1=" " ind2=" ">
|
|
22
|
+
<subfield code="a">(FI-MELINDA)000059308</subfield>
|
|
23
|
+
</datafield>
|
|
24
|
+
<datafield tag="041" ind1="0" ind2=" ">
|
|
25
|
+
<subfield code="a">eng</subfield>
|
|
26
|
+
</datafield>
|
|
27
|
+
<datafield tag="080" ind1=" " ind2=" ">
|
|
28
|
+
<subfield code="a">1</subfield>
|
|
29
|
+
<subfield code="x">(091)</subfield>
|
|
30
|
+
</datafield>
|
|
31
|
+
<datafield tag="080" ind1=" " ind2=" ">
|
|
32
|
+
<subfield code="a">17</subfield>
|
|
33
|
+
</datafield>
|
|
34
|
+
<datafield tag="100" ind1="1" ind2=" ">
|
|
35
|
+
<subfield code="a">Phillips, D. Z.</subfield>
|
|
36
|
+
</datafield>
|
|
37
|
+
<datafield tag="245" ind1="1" ind2="0">
|
|
38
|
+
<subfield code="a">Interventions in ethics /</subfield>
|
|
39
|
+
<subfield code="c">D. Z. Phillips.</subfield>
|
|
40
|
+
</datafield>
|
|
41
|
+
<datafield tag="260" ind1=" " ind2=" ">
|
|
42
|
+
<subfield code="a">London :</subfield>
|
|
43
|
+
<subfield code="b">Macmillan,</subfield>
|
|
44
|
+
<subfield code="c">1992.</subfield>
|
|
45
|
+
</datafield>
|
|
46
|
+
<datafield tag="300" ind1=" " ind2=" ">
|
|
47
|
+
<subfield code="a">xv, 300 s.</subfield>
|
|
48
|
+
</datafield>
|
|
49
|
+
<datafield tag="490" ind1="0" ind2=" ">
|
|
50
|
+
<subfield code="a">Swansea studies in philosophy</subfield>
|
|
51
|
+
</datafield>
|
|
52
|
+
<datafield tag="SID" ind1=" " ind2=" ">
|
|
53
|
+
<subfield code="c">134997</subfield>
|
|
54
|
+
<subfield code="b">alma</subfield>
|
|
55
|
+
</datafield>
|
|
56
|
+
<datafield tag="CAT" ind1=" " ind2=" ">
|
|
57
|
+
<subfield code="a">KVP4001</subfield>
|
|
58
|
+
<subfield code="b" />
|
|
59
|
+
<subfield code="c">20100115</subfield>
|
|
60
|
+
<subfield code="l">FIN01</subfield>
|
|
61
|
+
<subfield code="h">1218</subfield>
|
|
62
|
+
</datafield>
|
|
63
|
+
<datafield tag="LOW" ind1=" " ind2=" ">
|
|
64
|
+
<subfield code="a">ALMA</subfield>
|
|
65
|
+
</datafield>
|
|
66
|
+
</record>
|
|
67
|
+
</zs:recordData>
|
|
68
|
+
<zs:recordPosition>3</zs:recordPosition>
|
|
69
|
+
</zs:record>
|
|
70
|
+
</zs:records>
|
|
71
|
+
</zs:searchRetrieveResponse>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
[]
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
{
|
|
2
|
+
"description": "Should not fail if there are no records to retrieve",
|
|
3
|
+
"sruUrl": "http://foo.bar",
|
|
4
|
+
"retrieveAll": true,
|
|
5
|
+
"recordId": "000000123",
|
|
6
|
+
"method": "readAllSubrecords",
|
|
7
|
+
"expectedAmount": 0,
|
|
8
|
+
"requests": [
|
|
9
|
+
{
|
|
10
|
+
"method": "get",
|
|
11
|
+
"url": "/?operation=searchRetrieve&query=melinda.partsofhost%3D000000123&startRecord=1&recordSchema=marcxml&version=2.0&maximumRecords=1000",
|
|
12
|
+
"status": 200
|
|
13
|
+
}
|
|
14
|
+
],
|
|
15
|
+
"only": false,
|
|
16
|
+
"skip": false
|
|
17
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
{
|
|
2
|
+
"description": "Should retrieve subrecord amount",
|
|
3
|
+
"sruUrl": "http://foo.bar",
|
|
4
|
+
"retrieveAll": false,
|
|
5
|
+
"recordId": "000000567",
|
|
6
|
+
"method": "readSubrecordAmount",
|
|
7
|
+
"requests": [
|
|
8
|
+
{
|
|
9
|
+
"method": "get",
|
|
10
|
+
"url": "/?operation=searchRetrieve&query=melinda.partsofhost%3D000000567&startRecord=1&recordSchema=marcxml&version=2.0",
|
|
11
|
+
"status": 200
|
|
12
|
+
}
|
|
13
|
+
],
|
|
14
|
+
"only": false,
|
|
15
|
+
"skip": false
|
|
16
|
+
}
|