@natlibfi/marc-record-merge 6.0.0-beta.1 → 6.0.0-beta.5

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.
Files changed (193) hide show
  1. package/.github/CODEOWNERS +9 -0
  2. package/.github/dependabot.yml +41 -0
  3. package/.github/workflows/melinda-node-tests.yml +60 -0
  4. package/LICENSE +21 -0
  5. package/README.md +92 -2
  6. package/dist/index.js +10 -41
  7. package/dist/index.js.map +1 -1
  8. package/dist/reducers/copy.js +280 -73
  9. package/dist/reducers/copy.js.map +1 -1
  10. package/dist/reducers/copy.spec.js +51 -62
  11. package/dist/reducers/copy.spec.js.map +1 -1
  12. package/dist/reducers/index.js +15 -20
  13. package/dist/reducers/index.js.map +1 -1
  14. package/dist/reducers/select.js +28 -34
  15. package/dist/reducers/select.js.map +1 -1
  16. package/dist/reducers/select.spec.js +49 -83
  17. package/dist/reducers/select.spec.js.map +1 -1
  18. package/package.json +33 -32
  19. package/src/index.js +2 -34
  20. package/src/reducers/copy.js +274 -79
  21. package/src/reducers/copy.spec.js +43 -47
  22. package/src/reducers/index.js +3 -30
  23. package/src/reducers/select.js +22 -32
  24. package/src/reducers/select.spec.js +37 -56
  25. package/test-fixtures/reducers/copy/{01/base.json → basic copy/01/base.json } +1 -1
  26. package/test-fixtures/reducers/copy/{01 → basic copy/01}/merged.json +0 -0
  27. package/test-fixtures/reducers/copy/basic copy/01/metadata.json +4 -0
  28. package/test-fixtures/reducers/copy/{01 → basic copy/01}/source.json +0 -0
  29. package/test-fixtures/reducers/copy/{02/source.json → basic copy/02/base.json} +0 -0
  30. package/test-fixtures/reducers/copy/{02 → basic copy/02}/merged.json +0 -0
  31. package/test-fixtures/reducers/copy/basic copy/02/metadata.json +4 -0
  32. package/test-fixtures/reducers/copy/{02/base.json → basic copy/02/source.json } +1 -1
  33. package/test-fixtures/reducers/copy/{03/base.json → basic copy/03/base.json } +1 -1
  34. package/test-fixtures/reducers/copy/{03 → basic copy/03}/merged.json +0 -0
  35. package/test-fixtures/reducers/copy/basic copy/03/metadata.json +4 -0
  36. package/test-fixtures/reducers/copy/{03 → basic copy/03}/source.json +0 -0
  37. package/test-fixtures/reducers/copy/{05/base.json → basic copy/04/base.json } +1 -1
  38. package/test-fixtures/reducers/copy/{04/merged.json → basic copy/04/merged.json } +1 -1
  39. package/test-fixtures/reducers/copy/basic copy/04/metadata.json +4 -0
  40. package/test-fixtures/reducers/copy/{04/source.json → basic copy/04/source.json } +1 -1
  41. package/test-fixtures/reducers/copy/{04/base.json → basic copy/05/base.json } +1 -1
  42. package/test-fixtures/reducers/copy/basic copy/05/merged.json +77 -0
  43. package/test-fixtures/reducers/copy/basic copy/05/metadata.json +4 -0
  44. package/test-fixtures/reducers/copy/basic copy/05/source.json +62 -0
  45. package/test-fixtures/reducers/copy/basic copy/06/base.json +24 -0
  46. package/test-fixtures/reducers/copy/basic copy/06/merged.json +39 -0
  47. package/test-fixtures/reducers/copy/basic copy/06/metadata.json +4 -0
  48. package/test-fixtures/reducers/copy/basic copy/06/source.json +24 -0
  49. package/test-fixtures/reducers/copy/basic copy/07/base.json +39 -0
  50. package/test-fixtures/reducers/copy/basic copy/07/merged.json +39 -0
  51. package/test-fixtures/reducers/copy/basic copy/07/metadata.json +5 -0
  52. package/test-fixtures/reducers/copy/basic copy/07/source.json +24 -0
  53. package/test-fixtures/reducers/copy/basic copy/08/base.json +28 -0
  54. package/test-fixtures/reducers/copy/basic copy/08/merged.json +28 -0
  55. package/test-fixtures/reducers/copy/basic copy/08/metadata.json +4 -0
  56. package/test-fixtures/reducers/copy/basic copy/08/source.json +24 -0
  57. package/test-fixtures/reducers/copy/compareTagsOnly/01/base.json +24 -0
  58. package/test-fixtures/reducers/copy/compareTagsOnly/01/merged.json +24 -0
  59. package/test-fixtures/reducers/copy/compareTagsOnly/01/metadata.json +5 -0
  60. package/test-fixtures/reducers/copy/compareTagsOnly/01/source.json +24 -0
  61. package/test-fixtures/reducers/copy/compareTagsOnly/02/base.json +24 -0
  62. package/test-fixtures/reducers/copy/compareTagsOnly/02/merged.json +100 -0
  63. package/test-fixtures/reducers/copy/compareTagsOnly/02/metadata.json +5 -0
  64. package/test-fixtures/reducers/copy/compareTagsOnly/02/source.json +100 -0
  65. package/test-fixtures/reducers/copy/compareWithoutIndicators/01/base.json +24 -0
  66. package/test-fixtures/reducers/copy/compareWithoutIndicators/01/merged.json +24 -0
  67. package/test-fixtures/reducers/copy/compareWithoutIndicators/01/metadata.json +5 -0
  68. package/test-fixtures/reducers/copy/compareWithoutIndicators/01/source.json +24 -0
  69. package/test-fixtures/reducers/copy/compareWithoutIndicators/02/base.json +24 -0
  70. package/test-fixtures/reducers/copy/compareWithoutIndicators/02/merged.json +39 -0
  71. package/test-fixtures/reducers/copy/compareWithoutIndicators/02/metadata.json +5 -0
  72. package/test-fixtures/reducers/copy/compareWithoutIndicators/02/source.json +24 -0
  73. package/test-fixtures/reducers/copy/copyUnless/01/base.json +9 -0
  74. package/test-fixtures/reducers/copy/copyUnless/01/merged.json +24 -0
  75. package/test-fixtures/reducers/copy/copyUnless/01/metadata.json +5 -0
  76. package/test-fixtures/reducers/copy/copyUnless/01/source.json +47 -0
  77. package/test-fixtures/reducers/copy/dropSubfields/01/base.json +35 -0
  78. package/test-fixtures/reducers/copy/dropSubfields/01/merged.json +54 -0
  79. package/test-fixtures/reducers/copy/dropSubfields/01/metadata.json +5 -0
  80. package/test-fixtures/reducers/copy/dropSubfields/01/source.json +43 -0
  81. package/test-fixtures/reducers/copy/dropSubfields/02/base.json +43 -0
  82. package/test-fixtures/reducers/copy/dropSubfields/02/merged.json +58 -0
  83. package/test-fixtures/reducers/copy/dropSubfields/02/metadata.json +5 -0
  84. package/test-fixtures/reducers/copy/dropSubfields/02/source.json +32 -0
  85. package/test-fixtures/reducers/copy/dropSubfields/03/base.json +43 -0
  86. package/test-fixtures/reducers/copy/dropSubfields/03/merged.json +58 -0
  87. package/test-fixtures/reducers/copy/dropSubfields/03/metadata.json +5 -0
  88. package/test-fixtures/reducers/copy/dropSubfields/03/source.json +32 -0
  89. package/test-fixtures/reducers/copy/dropSubfields/04/base.json +43 -0
  90. package/test-fixtures/reducers/copy/dropSubfields/04/merged.json +43 -0
  91. package/test-fixtures/reducers/copy/dropSubfields/04/metadata.json +5 -0
  92. package/test-fixtures/reducers/copy/dropSubfields/04/source.json +32 -0
  93. package/test-fixtures/reducers/copy/excludeSubfields/01/base.json +39 -0
  94. package/test-fixtures/reducers/copy/excludeSubfields/01/merged.json +39 -0
  95. package/test-fixtures/reducers/copy/excludeSubfields/01/metadata.json +8 -0
  96. package/test-fixtures/reducers/copy/{05 → excludeSubfields/01}/source.json +1 -1
  97. package/test-fixtures/reducers/copy/excludeSubfields/02/base.json +39 -0
  98. package/test-fixtures/reducers/copy/{05 → excludeSubfields/02}/merged.json +5 -5
  99. package/test-fixtures/reducers/copy/excludeSubfields/02/metadata.json +5 -0
  100. package/test-fixtures/reducers/copy/excludeSubfields/02/source.json +43 -0
  101. package/test-fixtures/reducers/copy/subfieldsMustBeIdentical/01/base.json +24 -0
  102. package/test-fixtures/reducers/copy/subfieldsMustBeIdentical/01/merged.json +39 -0
  103. package/test-fixtures/reducers/copy/subfieldsMustBeIdentical/01/metadata.json +5 -0
  104. package/test-fixtures/reducers/copy/subfieldsMustBeIdentical/01/source.json +24 -0
  105. package/test-fixtures/reducers/copy/subfieldsMustBeIdentical/02/base.json +24 -0
  106. package/test-fixtures/reducers/copy/subfieldsMustBeIdentical/02/merged.json +24 -0
  107. package/test-fixtures/reducers/copy/subfieldsMustBeIdentical/02/metadata.json +5 -0
  108. package/test-fixtures/reducers/copy/subfieldsMustBeIdentical/02/source.json +24 -0
  109. package/test-fixtures/reducers/copy/subfieldsMustBeIdentical/03/base.json +28 -0
  110. package/test-fixtures/reducers/copy/subfieldsMustBeIdentical/03/merged.json +43 -0
  111. package/test-fixtures/reducers/copy/subfieldsMustBeIdentical/03/metadata.json +5 -0
  112. package/test-fixtures/reducers/copy/subfieldsMustBeIdentical/03/source.json +24 -0
  113. package/test-fixtures/reducers/copy/subfieldsMustBeIdentical/04/base.json +28 -0
  114. package/test-fixtures/reducers/copy/subfieldsMustBeIdentical/04/merged.json +28 -0
  115. package/test-fixtures/reducers/copy/subfieldsMustBeIdentical/04/metadata.json +5 -0
  116. package/test-fixtures/reducers/copy/subfieldsMustBeIdentical/04/source.json +24 -0
  117. package/test-fixtures/reducers/copy/subfieldsMustBeIdentical/05/base.json +20 -0
  118. package/test-fixtures/reducers/copy/subfieldsMustBeIdentical/05/merged.json +35 -0
  119. package/test-fixtures/reducers/copy/subfieldsMustBeIdentical/05/metadata.json +5 -0
  120. package/test-fixtures/reducers/copy/subfieldsMustBeIdentical/05/source.json +24 -0
  121. package/test-fixtures/reducers/copy/subfieldsMustBeIdentical/06/base.json +20 -0
  122. package/test-fixtures/reducers/copy/subfieldsMustBeIdentical/06/merged.json +35 -0
  123. package/test-fixtures/reducers/copy/subfieldsMustBeIdentical/06/metadata.json +5 -0
  124. package/test-fixtures/reducers/copy/subfieldsMustBeIdentical/06/source.json +24 -0
  125. package/test-fixtures/reducers/metadata.json +4 -0
  126. package/test-fixtures/reducers/select/01/metadata.json +5 -0
  127. package/test-fixtures/reducers/select/02/metadata.json +4 -0
  128. package/test-fixtures/reducers/select/03/metadata.json +4 -0
  129. package/test-fixtures/reducers/select/04/metadata.json +5 -0
  130. package/test-fixtures/reducers/select/05/metadata.json +4 -0
  131. package/test-fixtures/reducers/select/06/base.json +4 -0
  132. package/test-fixtures/reducers/select/06/merged.json +4 -0
  133. package/test-fixtures/reducers/select/06/metadata.json +4 -0
  134. package/test-fixtures/reducers/select/06/source.json +4 -0
  135. package/test-fixtures/reducers/select/07/metadata.json +5 -0
  136. package/test-fixtures/reducers/select/08/metadata.json +4 -0
  137. package/test-fixtures/reducers/select/09/metadata.json +4 -0
  138. package/test-fixtures/reducers/select/10/metadata.json +5 -0
  139. package/test-fixtures/reducers/select/11/metadata.json +4 -0
  140. package/test-fixtures/reducers/select/12/metadata.json +5 -0
  141. package/test-fixtures/reducers/select/13/metadata.json +4 -0
  142. package/test-fixtures/reducers/select/14/base.json +24 -0
  143. package/test-fixtures/reducers/select/14/merged.json +24 -0
  144. package/test-fixtures/reducers/select/14/metadata.json +4 -0
  145. package/test-fixtures/reducers/select/14/source.json +24 -0
  146. package/.drone.yml +0 -92
  147. package/.nyc_output/7ecda3cd-9f84-4416-a466-fa1e5889c6a3.json +0 -1
  148. package/.nyc_output/processinfo/7ecda3cd-9f84-4416-a466-fa1e5889c6a3.json +0 -1
  149. package/.nyc_output/processinfo/index.json +0 -1
  150. package/LICENSE.txt +0 -165
  151. package/coverage/base.css +0 -224
  152. package/coverage/block-navigation.js +0 -79
  153. package/coverage/copy.js.html +0 -344
  154. package/coverage/favicon.png +0 -0
  155. package/coverage/index.html +0 -126
  156. package/coverage/lcov-report/base.css +0 -224
  157. package/coverage/lcov-report/block-navigation.js +0 -79
  158. package/coverage/lcov-report/copy.js.html +0 -344
  159. package/coverage/lcov-report/favicon.png +0 -0
  160. package/coverage/lcov-report/index.html +0 -126
  161. package/coverage/lcov-report/prettify.css +0 -1
  162. package/coverage/lcov-report/prettify.js +0 -2
  163. package/coverage/lcov-report/select.js.html +0 -431
  164. package/coverage/lcov-report/sort-arrow-sprite.png +0 -0
  165. package/coverage/lcov-report/sorter.js +0 -170
  166. package/coverage/lcov.info +0 -195
  167. package/coverage/prettify.css +0 -1
  168. package/coverage/prettify.js +0 -2
  169. package/coverage/select.js.html +0 -431
  170. package/coverage/sort-arrow-sprite.png +0 -0
  171. package/coverage/sorter.js +0 -170
  172. package/test-fixtures/reducers/copy/01/pattern.txt +0 -1
  173. package/test-fixtures/reducers/copy/02/pattern.txt +0 -1
  174. package/test-fixtures/reducers/copy/03/pattern.txt +0 -1
  175. package/test-fixtures/reducers/copy/04/pattern.txt +0 -1
  176. package/test-fixtures/reducers/copy/05/pattern.txt +0 -1
  177. package/test-fixtures/reducers/select/01/expected-error.txt +0 -1
  178. package/test-fixtures/reducers/select/01/pattern.txt +0 -1
  179. package/test-fixtures/reducers/select/02/pattern.txt +0 -1
  180. package/test-fixtures/reducers/select/03/pattern.txt +0 -1
  181. package/test-fixtures/reducers/select/04/pattern.txt +0 -1
  182. package/test-fixtures/reducers/select/05/pattern.txt +0 -1
  183. package/test-fixtures/reducers/select/06/pattern.txt +0 -1
  184. package/test-fixtures/reducers/select/07/equalityFunction.txt +0 -1
  185. package/test-fixtures/reducers/select/07/pattern.txt +0 -1
  186. package/test-fixtures/reducers/select/08/pattern.txt +0 -1
  187. package/test-fixtures/reducers/select/09/pattern.txt +0 -1
  188. package/test-fixtures/reducers/select/10/equalityFunction.txt +0 -1
  189. package/test-fixtures/reducers/select/10/pattern.txt +0 -1
  190. package/test-fixtures/reducers/select/11/pattern.txt +0 -1
  191. package/test-fixtures/reducers/select/12/equalityFunction.txt +0 -1
  192. package/test-fixtures/reducers/select/12/pattern.txt +0 -1
  193. package/test-fixtures/reducers/select/13/pattern.txt +0 -1
@@ -1,64 +1,45 @@
1
- /**
2
- *
3
- * @licstart The following is the entire license notice for the JavaScript code in this file.
4
- *
5
- * Merge MARC records
6
- *
7
- * Copyright (C) 2015-2019 University Of Helsinki (The National Library Of Finland)
8
- *
9
- * This file is part of marc-record-merge-js
10
-
11
- * marc-record-merge-js program is free software: you can redistribute it and/or modify
12
- * it under the terms of the GNU Lesser General Public License as
13
- * published by the Free Software Foundation, either version 3 of the
14
- * License, or (at your option) any later version.
15
- *
16
- * marc-record-merge-js is distributed in the hope that it will be useful,
17
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
18
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19
- * GNU Lesser General Public License for more details.
20
- *
21
- * You should have received a copy of the GNU Lesser General Public License
22
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
23
- *
24
- * @licend The above is the entire license notice
25
- * for the JavaScript code in this file.
26
- *
27
- */
28
- import chai from 'chai';
29
- import fs from 'fs';
30
- import path from 'path';
1
+ import {expect} from 'chai';
31
2
  import {MarcRecord} from '@natlibfi/marc-record';
32
3
  import createReducer, {subsetEquality} from './select';
33
- import fixturesFactory, {READERS} from '@natlibfi/fixura';
4
+ import {READERS} from '@natlibfi/fixura';
5
+ import generateTests from '@natlibfi/fixugen';
34
6
 
35
7
  MarcRecord.setValidationOptions({subfieldValues: false});
36
8
 
37
- describe('reducers/select', () => {
38
- const {expect} = chai;
39
- const fixturesPath = path.join(__dirname, '..', '..', 'test-fixtures', 'reducers', 'select');
9
+ generateTests({
10
+ callback,
11
+ path: [__dirname, '..', '..', 'test-fixtures', 'reducers', 'select'],
12
+ useMetadataFile: true,
13
+ recurse: false,
14
+ fixura: {
15
+ reader: READERS.JSON,
16
+ failWhenNotFound: false
17
+ }
18
+ });
40
19
 
41
- fs.readdirSync(fixturesPath).forEach(subDir => {
42
- const {getFixture} = fixturesFactory({root: [fixturesPath, subDir], reader: READERS.JSON, failWhenNotFound: false});
43
- it(subDir, () => {
44
- const baseTest = new MarcRecord(getFixture('base.json'));
45
- const sourceTest = new MarcRecord(getFixture('source.json'));
46
- const patternTest = new RegExp(getFixture({components: ['pattern.txt'], reader: READERS.TEXT}), 'u');
47
- const expectedRecord = getFixture('merged.json');
48
- const expectedError = getFixture({components: ['expected-error.txt'], reader: READERS.TEXT});
49
- const equalityFunction = getEqualityFunction();
20
+ function callback({
21
+ getFixture,
22
+ disabled = false,
23
+ tagPatternRegExp = false,
24
+ expectedError = false,
25
+ useSubsetEquality = false
26
+ }) {
27
+ if (disabled) {
28
+ console.log('TEST DISABLED!'); // eslint-disable-line no-console
29
+ return;
30
+ }
31
+ const base = new MarcRecord(getFixture('base.json'), {subfieldValues: false});
32
+ const source = new MarcRecord(getFixture('source.json'), {subfieldValues: false});
33
+ const tagPattern = new RegExp(tagPatternRegExp, 'u');
34
+ const expectedRecord = getFixture('merged.json');
35
+ const equalityFunction = useSubsetEquality ? subsetEquality : undefined;
50
36
 
51
- if (expectedError) {
52
- expect(() => createReducer.to.throw(Error, 'control field'));
53
- return;
54
- }
55
- const mergedRecord = createReducer({pattern: patternTest, equalityFunction})(baseTest, sourceTest);
56
- expect(mergedRecord.toObject()).to.eql(expectedRecord);
37
+ // Bypass expected error in testing
38
+ if (expectedError) {
39
+ expect(() => createReducer.to.throw(Error, 'control field'));
40
+ return;
41
+ }
57
42
 
58
- function getEqualityFunction() {
59
- const functionName = getFixture({components: ['equalityFunction.txt'], reader: READERS.TEXT});
60
- return functionName === 'subsetEquality' ? subsetEquality : undefined;
61
- }
62
- });
63
- });
64
- });
43
+ const mergedRecord = createReducer({tagPattern, equalityFunction})(base, source);
44
+ expect(mergedRecord.toObject()).to.eql(expectedRecord);
45
+ }
@@ -4,6 +4,6 @@
4
4
  {
5
5
  "tag": "001",
6
6
  "value": "007346734"
7
- }
7
+ }
8
8
  ]
9
9
  }
@@ -0,0 +1,4 @@
1
+ {
2
+ "description": "If base does not contain the field at all, it is copied from source to base",
3
+ "tagPatternRegExp": "^010$"
4
+ }
@@ -0,0 +1,4 @@
1
+ {
2
+ "description": "Identical control fields are not copied",
3
+ "tagPatternRegExp": "^001$"
4
+ }
@@ -15,6 +15,6 @@
15
15
  "value": "##2002021346"
16
16
  }
17
17
  ]
18
- }
18
+ }
19
19
  ]
20
20
  }
@@ -15,6 +15,6 @@
15
15
  "value": "##2002021346"
16
16
  }
17
17
  ]
18
- }
18
+ }
19
19
  ]
20
20
  }
@@ -0,0 +1,4 @@
1
+ {
2
+ "description": "Add missing control field to base",
3
+ "tagPatternRegExp": "^001$"
4
+ }
@@ -34,6 +34,6 @@
34
34
  "value": "##2002021357"
35
35
  }
36
36
  ]
37
- }
37
+ }
38
38
  ]
39
39
  }
@@ -34,6 +34,6 @@
34
34
  "value": "##2002021357"
35
35
  }
36
36
  ]
37
- }
37
+ }
38
38
  ]
39
39
  }
@@ -0,0 +1,4 @@
1
+ {
2
+ "description": "Identical data fields in base and source, not copied",
3
+ "tagPatternRegExp": "^010$"
4
+ }
@@ -34,6 +34,6 @@
34
34
  "value": "##2002021357"
35
35
  }
36
36
  ]
37
- }
37
+ }
38
38
  ]
39
39
  }
@@ -34,6 +34,6 @@
34
34
  "value": "##2002021357"
35
35
  }
36
36
  ]
37
- }
37
+ }
38
38
  ]
39
39
  }
@@ -0,0 +1,77 @@
1
+ {
2
+ "leader": "01331cam a22003494i 4500",
3
+ "fields": [
4
+ {
5
+ "tag": "001",
6
+ "value": "007346734"
7
+ },
8
+ {
9
+ "tag": "010",
10
+ "ind1": " ",
11
+ "ind2": " ",
12
+ "subfields": [
13
+ {
14
+ "code": "a",
15
+ "value": "##2002021346"
16
+ },
17
+ {
18
+ "code": "b",
19
+ "value": "##2002021356"
20
+ }
21
+ ]
22
+ },
23
+ {
24
+ "tag": "010",
25
+ "ind1": " ",
26
+ "ind2": " ",
27
+ "subfields": [
28
+ {
29
+ "code": "c",
30
+ "value": "##2002021347"
31
+ },
32
+ {
33
+ "code": "d",
34
+ "value": "##2002021357"
35
+ }
36
+ ]
37
+ },
38
+ {
39
+ "tag": "010",
40
+ "ind1": " ",
41
+ "ind2": " ",
42
+ "subfields": [
43
+ {
44
+ "code": "c",
45
+ "value": "##2002021348"
46
+ },
47
+ {
48
+ "code": "d",
49
+ "value": "##2002021358"
50
+ },
51
+ {
52
+ "code": "e",
53
+ "value": "##2002021359"
54
+ }
55
+ ]
56
+ },
57
+ {
58
+ "tag": "010",
59
+ "ind1": " ",
60
+ "ind2": " ",
61
+ "subfields": [
62
+ {
63
+ "code": "f",
64
+ "value": "##2002021311"
65
+ },
66
+ {
67
+ "code": "g",
68
+ "value": "##2002021322"
69
+ },
70
+ {
71
+ "code": "h",
72
+ "value": "##2002021333"
73
+ }
74
+ ]
75
+ }
76
+ ]
77
+ }
@@ -0,0 +1,4 @@
1
+ {
2
+ "description": "Different data fields are copied from source to base (multiple fields)",
3
+ "tagPatternRegExp": "^010$"
4
+ }
@@ -0,0 +1,62 @@
1
+ {
2
+ "leader": "01331cam a22003494i 4500",
3
+ "fields": [
4
+ {
5
+ "tag": "001",
6
+ "value": "007346734"
7
+ },
8
+ {
9
+ "tag": "010",
10
+ "ind1": " ",
11
+ "ind2": " ",
12
+ "subfields": [
13
+ {
14
+ "code": "a",
15
+ "value": "##2002021346"
16
+ },
17
+ {
18
+ "code": "b",
19
+ "value": "##2002021356"
20
+ }
21
+ ]
22
+ },
23
+ {
24
+ "tag": "010",
25
+ "ind1": " ",
26
+ "ind2": " ",
27
+ "subfields": [
28
+ {
29
+ "code": "c",
30
+ "value": "##2002021348"
31
+ },
32
+ {
33
+ "code": "d",
34
+ "value": "##2002021358"
35
+ },
36
+ {
37
+ "code": "e",
38
+ "value": "##2002021359"
39
+ }
40
+ ]
41
+ },
42
+ {
43
+ "tag": "010",
44
+ "ind1": " ",
45
+ "ind2": " ",
46
+ "subfields": [
47
+ {
48
+ "code": "f",
49
+ "value": "##2002021311"
50
+ },
51
+ {
52
+ "code": "g",
53
+ "value": "##2002021322"
54
+ },
55
+ {
56
+ "code": "h",
57
+ "value": "##2002021333"
58
+ }
59
+ ]
60
+ }
61
+ ]
62
+ }
@@ -0,0 +1,24 @@
1
+ {
2
+ "leader": "01331cam a22003494i 4500",
3
+ "fields": [
4
+ {
5
+ "tag": "001",
6
+ "value": "007346734"
7
+ },
8
+ {
9
+ "tag": "010",
10
+ "ind1": " ",
11
+ "ind2": " ",
12
+ "subfields": [
13
+ {
14
+ "code": "a",
15
+ "value": "##2002021346"
16
+ },
17
+ {
18
+ "code": "b",
19
+ "value": "##2002021356"
20
+ }
21
+ ]
22
+ }
23
+ ]
24
+ }
@@ -0,0 +1,39 @@
1
+ {
2
+ "leader": "01331cam a22003494i 4500",
3
+ "fields": [
4
+ {
5
+ "tag": "001",
6
+ "value": "007346734"
7
+ },
8
+ {
9
+ "tag": "010",
10
+ "ind1": " ",
11
+ "ind2": " ",
12
+ "subfields": [
13
+ {
14
+ "code": "a",
15
+ "value": "##2002021346"
16
+ },
17
+ {
18
+ "code": "b",
19
+ "value": "##2002021356"
20
+ }
21
+ ]
22
+ },
23
+ {
24
+ "tag": "010",
25
+ "ind1": " ",
26
+ "ind2": "1",
27
+ "subfields": [
28
+ {
29
+ "code": "a",
30
+ "value": "##2002021346"
31
+ },
32
+ {
33
+ "code": "b",
34
+ "value": "##2002021356"
35
+ }
36
+ ]
37
+ }
38
+ ]
39
+ }
@@ -0,0 +1,4 @@
1
+ {
2
+ "description": "Different data fields are copied from source to base (Ind2 diff)",
3
+ "tagPatternRegExp": "^010$"
4
+ }
@@ -0,0 +1,24 @@
1
+ {
2
+ "leader": "01331cam a22003494i 4500",
3
+ "fields": [
4
+ {
5
+ "tag": "001",
6
+ "value": "007346734"
7
+ },
8
+ {
9
+ "tag": "010",
10
+ "ind1": " ",
11
+ "ind2": "1",
12
+ "subfields": [
13
+ {
14
+ "code": "a",
15
+ "value": "##2002021346"
16
+ },
17
+ {
18
+ "code": "b",
19
+ "value": "##2002021356"
20
+ }
21
+ ]
22
+ }
23
+ ]
24
+ }
@@ -0,0 +1,39 @@
1
+ {
2
+ "leader": "01331cam a22003494i 4500",
3
+ "fields": [
4
+ {
5
+ "tag": "001",
6
+ "value": "007346734"
7
+ },
8
+ {
9
+ "tag": "010",
10
+ "ind1": " ",
11
+ "ind2": " ",
12
+ "subfields": [
13
+ {
14
+ "code": "a",
15
+ "value": "##2002021346"
16
+ },
17
+ {
18
+ "code": "b",
19
+ "value": "##2002021356"
20
+ }
21
+ ]
22
+ },
23
+ {
24
+ "tag": "010",
25
+ "ind1": " ",
26
+ "ind2": "1",
27
+ "subfields": [
28
+ {
29
+ "code": "a",
30
+ "value": "##2002021346"
31
+ },
32
+ {
33
+ "code": "b",
34
+ "value": "##2002021356"
35
+ }
36
+ ]
37
+ }
38
+ ]
39
+ }
@@ -0,0 +1,39 @@
1
+ {
2
+ "leader": "01331cam a22003494i 4500",
3
+ "fields": [
4
+ {
5
+ "tag": "001",
6
+ "value": "007346734"
7
+ },
8
+ {
9
+ "tag": "010",
10
+ "ind1": " ",
11
+ "ind2": " ",
12
+ "subfields": [
13
+ {
14
+ "code": "a",
15
+ "value": "##2002021346"
16
+ },
17
+ {
18
+ "code": "b",
19
+ "value": "##2002021356"
20
+ }
21
+ ]
22
+ },
23
+ {
24
+ "tag": "010",
25
+ "ind1": " ",
26
+ "ind2": "1",
27
+ "subfields": [
28
+ {
29
+ "code": "a",
30
+ "value": "##2002021346"
31
+ },
32
+ {
33
+ "code": "b",
34
+ "value": "##2002021356"
35
+ }
36
+ ]
37
+ }
38
+ ]
39
+ }
@@ -0,0 +1,5 @@
1
+ {
2
+ "description": "Different data fields are copied from source to base (Ind2 diff, multiple fields in base)",
3
+ "tagPatternRegExp": "^010$",
4
+ "only": false
5
+ }
@@ -0,0 +1,24 @@
1
+ {
2
+ "leader": "01331cam a22003494i 4500",
3
+ "fields": [
4
+ {
5
+ "tag": "001",
6
+ "value": "007346734"
7
+ },
8
+ {
9
+ "tag": "010",
10
+ "ind1": " ",
11
+ "ind2": "1",
12
+ "subfields": [
13
+ {
14
+ "code": "a",
15
+ "value": "##2002021346"
16
+ },
17
+ {
18
+ "code": "b",
19
+ "value": "##2002021356"
20
+ }
21
+ ]
22
+ }
23
+ ]
24
+ }
@@ -0,0 +1,28 @@
1
+ {
2
+ "leader": "01331cam a22003494i 4500",
3
+ "fields": [
4
+ {
5
+ "tag": "001",
6
+ "value": "007346734"
7
+ },
8
+ {
9
+ "tag": "007",
10
+ "value": "ou"
11
+ },
12
+ {
13
+ "tag": "007",
14
+ "value": "vf^cbaho|"
15
+ },
16
+ {
17
+ "tag": "010",
18
+ "ind1": " ",
19
+ "ind2": " ",
20
+ "subfields": [
21
+ {
22
+ "code": "a",
23
+ "value": "##2002021346"
24
+ }
25
+ ]
26
+ }
27
+ ]
28
+ }
@@ -0,0 +1,28 @@
1
+ {
2
+ "leader": "01331cam a22003494i 4500",
3
+ "fields": [
4
+ {
5
+ "tag": "001",
6
+ "value": "007346734"
7
+ },
8
+ {
9
+ "tag": "007",
10
+ "value": "ou"
11
+ },
12
+ {
13
+ "tag": "007",
14
+ "value": "vf^cbaho|"
15
+ },
16
+ {
17
+ "tag": "010",
18
+ "ind1": " ",
19
+ "ind2": " ",
20
+ "subfields": [
21
+ {
22
+ "code": "a",
23
+ "value": "##2002021346"
24
+ }
25
+ ]
26
+ }
27
+ ]
28
+ }
@@ -0,0 +1,4 @@
1
+ {
2
+ "description": "Identical control fields are not copied (multiple fields)",
3
+ "tagPatternRegExp": "^007$"
4
+ }
@@ -0,0 +1,24 @@
1
+ {
2
+ "leader": "01331cam a22003494i 4500",
3
+ "fields": [
4
+ {
5
+ "tag": "001",
6
+ "value": "007346734"
7
+ },
8
+ {
9
+ "tag": "007",
10
+ "value": "vf^cbaho|"
11
+ },
12
+ {
13
+ "tag": "010",
14
+ "ind1": " ",
15
+ "ind2": " ",
16
+ "subfields": [
17
+ {
18
+ "code": "a",
19
+ "value": "##2002021346"
20
+ }
21
+ ]
22
+ }
23
+ ]
24
+ }