@natlibfi/marc-record-validators-melinda 12.0.0-alpha.8 → 12.0.0

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 (82) hide show
  1. package/dist/access-rights.test.js +1 -1
  2. package/dist/access-rights.test.js.map +1 -1
  3. package/dist/addMissingField337.test.js +1 -1
  4. package/dist/addMissingField337.test.js.map +1 -1
  5. package/dist/addMissingField338.test.js +1 -1
  6. package/dist/addMissingField338.test.js.map +1 -1
  7. package/dist/cyrillux-usemarcon-replacement.test.js +4 -7
  8. package/dist/cyrillux-usemarcon-replacement.test.js.map +2 -2
  9. package/dist/cyrillux.test.js +1 -1
  10. package/dist/cyrillux.test.js.map +1 -1
  11. package/dist/double-commas.test.js +1 -1
  12. package/dist/double-commas.test.js.map +1 -1
  13. package/dist/empty-fields.test.js +1 -1
  14. package/dist/empty-fields.test.js.map +1 -1
  15. package/dist/ending-punctuation.test.js +39 -19
  16. package/dist/ending-punctuation.test.js.map +2 -2
  17. package/dist/field-008-18-34-character-groups.test.js +1 -1
  18. package/dist/field-008-18-34-character-groups.test.js.map +1 -1
  19. package/dist/field-exclusion.test.js +11 -8
  20. package/dist/field-exclusion.test.js.map +2 -2
  21. package/dist/field-structure.test.js +1 -1
  22. package/dist/field-structure.test.js.map +1 -1
  23. package/dist/fields-present.test.js +1 -1
  24. package/dist/fields-present.test.js.map +1 -1
  25. package/dist/fixRelatorTerms.test.js +1 -1
  26. package/dist/fixRelatorTerms.test.js.map +1 -1
  27. package/dist/fixed-fields.test.js +29 -18
  28. package/dist/fixed-fields.test.js.map +2 -2
  29. package/dist/identical-fields.test.js +1 -1
  30. package/dist/identical-fields.test.js.map +1 -1
  31. package/dist/isbn-issn.js +8 -5
  32. package/dist/isbn-issn.js.map +2 -2
  33. package/dist/isbn-issn.test.js +9 -6
  34. package/dist/isbn-issn.test.js.map +2 -2
  35. package/dist/item-language.test.js +1 -1
  36. package/dist/item-language.test.js.map +2 -2
  37. package/dist/normalizeFieldForComparison.js +24 -0
  38. package/dist/normalizeFieldForComparison.js.map +2 -2
  39. package/dist/punctuation2.test.js +1 -1
  40. package/dist/punctuation2.test.js.map +1 -1
  41. package/dist/removeDuplicateDataFields.test.js +1 -1
  42. package/dist/removeDuplicateDataFields.test.js.map +1 -1
  43. package/dist/resolvable-ext-references-melinda.test.js +1 -1
  44. package/dist/resolvable-ext-references-melinda.test.js.map +2 -2
  45. package/dist/sort-tags.test.js +1 -1
  46. package/dist/sort-tags.test.js.map +1 -1
  47. package/dist/subfield-exclusion.test.js +1 -1
  48. package/dist/subfield-exclusion.test.js.map +1 -1
  49. package/dist/unicode-decomposition.test.js +1 -1
  50. package/dist/unicode-decomposition.test.js.map +1 -1
  51. package/dist/update-field-540.test.js +1 -1
  52. package/dist/update-field-540.test.js.map +1 -1
  53. package/dist/urn.test.js +1 -1
  54. package/dist/urn.test.js.map +1 -1
  55. package/package.json +15 -15
  56. package/src/access-rights.test.js +1 -1
  57. package/src/addMissingField337.test.js +1 -1
  58. package/src/addMissingField338.test.js +1 -1
  59. package/src/cyrillux-usemarcon-replacement.test.js +4 -9
  60. package/src/cyrillux.test.js +1 -1
  61. package/src/double-commas.test.js +1 -1
  62. package/src/empty-fields.test.js +1 -1
  63. package/src/ending-punctuation.test.js +28 -20
  64. package/src/field-008-18-34-character-groups.test.js +1 -1
  65. package/src/field-exclusion.test.js +10 -8
  66. package/src/field-structure.test.js +1 -1
  67. package/src/fields-present.test.js +1 -1
  68. package/src/fixRelatorTerms.test.js +1 -1
  69. package/src/fixed-fields.test.js +24 -18
  70. package/src/identical-fields.test.js +1 -1
  71. package/src/isbn-issn.js +11 -6
  72. package/src/isbn-issn.test.js +8 -6
  73. package/src/item-language.test.js +2 -2
  74. package/src/normalizeFieldForComparison.js +26 -0
  75. package/src/punctuation2.test.js +1 -1
  76. package/src/removeDuplicateDataFields.test.js +1 -1
  77. package/src/resolvable-ext-references-melinda.test.js +5 -5
  78. package/src/sort-tags.test.js +1 -1
  79. package/src/subfield-exclusion.test.js +1 -1
  80. package/src/unicode-decomposition.test.js +1 -1
  81. package/src/update-field-540.test.js +1 -1
  82. package/src/urn.test.js +1 -1
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../src/ending-punctuation.test.js"],
4
- "sourcesContent": ["import assert from 'node:assert';\nimport {MarcRecord} from '@natlibfi/marc-record';\nimport validatorFactory from '../src/ending-punctuation.js';\nimport {describe, it} from 'node:test';\n\n\n\n// Factory validation\ndescribe('ending-punctuation', () => {\n // Indicators and subfields validation\n describe('#validate: Indicators and subfields', () => {\n const recordValid = new MarcRecord({\n leader: '',\n fields: [\n {\n tag: '245',\n ind1: ' ',\n ind2: ' ',\n subfields: [\n {code: 'a', value: 'El\u00E4m\u00E4ni ja tutkimusretkeni /'},\n {code: 'c', value: 'Roald Amundsen ; suomentanut Sulo Veikko Pekkola.'},\n {code: '6', value: 'FOO'}\n ]\n }, { // Hackily putting 2nd 245 here\n tag: '245',\n ind1: '0',\n ind2: '4',\n subfields: [\n {code: 'a', value: 'The Disaster /'},\n {code: 'c', value: '(J.L.).'}\n ]\n }, {\n tag: '337', // Range 336-338\n ind1: ' ',\n ind2: ' ',\n subfields: [\n {code: 'a', value: 'k\u00E4ytett\u00E4viss\u00E4 ilman laitetta'},\n {code: 'b', value: 'n'},\n {code: '2', value: 'rdamedia'}\n ]\n }, {\n tag: '500', // Range 500-509\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: 'FOO (Bar).'}]\n }, {\n tag: '500', // Range 500-509\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: '\"Lorum ipsum.\"'}]\n },\n {\n tag: '500', // Range 500-509\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: 'Foo \"Bar\".'}]\n }\n ]\n });\n\n const recordInvalid = new MarcRecord({\n leader: '',\n fields: [\n {\n tag: '245',\n ind1: ' ',\n ind2: ' ',\n subfields: [\n {code: 'a', value: 'El\u00E4m\u00E4ni ja tutkimusretkeni /'},\n {code: 'c', value: 'Roald Amundsen ; suomentanut Sulo Veikko Pekkola'},\n {code: '6', value: 'FOO'} // NV: not changing this now, but this is wrong: $6 is *always* the first subfield. Also , the value is not valid for $6...\n ]\n }, { // Hackily putting 2nd 245 here\n tag: '245',\n ind1: '0',\n ind2: '4',\n subfields: [\n {code: 'a', value: 'The Disaster /'},\n {code: 'c', value: '(J.L.)'}\n ]\n }, {\n tag: '337',\n ind1: ' ',\n ind2: ' ',\n subfields: [\n {code: 'a', value: 'k\u00E4ytett\u00E4viss\u00E4 ilman laitetta'},\n {code: 'b', value: 'n.'}, // This can be abbreviation -> does not generate error (NV: huh?!?)\n {code: '2', value: 'rdamedia'}\n ]\n }, {\n tag: '500',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: 'FOO (Bar)'}]\n }, {\n tag: '500', // Range 500-509\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: '\"Lorum ipsum.\".'}]\n },\n {\n tag: '500', // Range 500-509\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: 'Foo \"Bar\"'}]\n }\n ]\n });\n const recordBroken = new MarcRecord({\n leader: '',\n fields: [\n {\n tag: '245',\n ind1: ' ',\n ind2: ' ',\n subfields: [\n {code: 'a', value: 'El\u00E4m\u00E4ni ja tutkimusretkeni /'},\n {code: 'c', value: 'Roald Amundsen ; suomentanut Sulo Veikko Pekkola'},\n {code: '6', value: 'FOO'}\n ]\n }, { // Hackily putting 2nd 245 here\n tag: '245',\n ind1: '0',\n ind2: '4',\n subfields: [\n {code: 'a', value: 'The Disaster /'},\n {code: 'c', value: '(J.L.)'}\n ]\n }, {\n tag: '337',\n ind1: ' ',\n ind2: ' ',\n subfields: [\n {code: 'a', value: 'k\u00E4ytett\u00E4viss\u00E4 ilman laitetta'},\n {code: 'b', value: 'n'}, // Dot removed from possible abbreviation as it cannot be removed in fixing (NV: huh?)\n {code: '2', value: 'rdamedia'}\n ]\n }, {\n tag: '500',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: 'FOO (Bar)'}]\n }, {\n tag: '500', // Range 500-509\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: '\"Lorum ipsum.\".'}]\n },\n {\n tag: '500', // Range 500-509\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: 'Foo \"Bar\"'}]\n }\n ]\n });\n\n it('Finds the record valid', async () => {\n const validator = await validatorFactory();\n const result = await validator.validate(recordValid);\n //console.info(JSON.stringify(result));\n assert.equal(result.valid, true);\n });\n\n it('Finds the record invalid', async () => {\n const validator = await validatorFactory();\n const result = await validator.validate(recordInvalid);\n assert.deepEqual(result, {\n message: ['Field 245 requires ending punctuation, ends in \\'a\\'', 'Field 245 requires ending punctuation, ends in \\')\\'', 'Field 500 requires ending punctuation, ends in \\')\\'', 'Field 500 has an extra dot in \\'.\".\\'', 'Field 500 requires ending punctuation, ends in \\'\"\\''],\n valid: false\n });\n });\n\n it('Repairs the invalid record', async () => {\n const validator = await validatorFactory();\n const result = await validator.fix(recordBroken);\n\n assert.deepEqual(result, {\n message: ['Field 245 requires ending punctuation, ends in \\'a\\'', 'Field 245 requires ending punctuation, ends in \\')\\'', 'Field 500 requires ending punctuation, ends in \\')\\'', 'Field 500 has an extra dot in \\'.\".\\'', 'Field 500 requires ending punctuation, ends in \\'\"\\''],\n fix: ['Field 245 - Added punctuation to $c', 'Field 245 - Added punctuation to $c', 'Field 500 - Added punctuation to $a', 'Field 500 - Removed \\'.\\' after \\'.\"\\'', 'Field 500 - Added punctuation to $a'],\n valid: false\n });\n assert.equal(recordBroken.equalsTo(recordValid), true);\n });\n });\n\n describe('#specials', () => {\n // \"036 KYLL\u00C4 vain osakent\u00E4n $b j\u00E4lkeen\"\n // Can have subfields a and b, dot only after b\n describe('#036 TRUE - only after subfield $b', () => {\n // Valid tests\n const recordValid = new MarcRecord({\n leader: '',\n fields: [\n {\n tag: '036',\n ind1: ' ',\n ind2: ' ',\n subfields: [\n {code: 'a', value: 'CNRS 84115'},\n {code: 'b', value: 'Centre national de la recherche scientifique.'}\n ]\n }\n ]\n });\n\n const recordValidOnlyA = new MarcRecord({\n leader: '',\n fields: [\n {\n tag: '036',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: 'CNRS 84115'}]\n }\n ]\n });\n\n it('Finds record valid - Punc $b', async () => {\n const validator = await validatorFactory();\n const result = await validator.validate(recordValid);\n assert.equal(result.valid, true);\n });\n\n it('Finds record valid - Only $a without punc', async () => {\n const validator = await validatorFactory();\n const result = await validator.validate(recordValidOnlyA);\n assert.equal(result.valid, true);\n });\n\n // Invalid tests\n const recordInvalid = new MarcRecord({\n leader: '',\n fields: [\n {\n tag: '036',\n ind1: ' ',\n ind2: ' ',\n subfields: [\n {code: 'a', value: 'CNRS 84115'},\n {code: 'b', value: 'Centre national de la recherche scientifique'}\n ]\n }\n ]\n });\n\n const recordInvalidOnlyA = new MarcRecord({\n leader: '',\n fields: [\n {\n tag: '036',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: 'CNRS 84115.'}] // $a is register number, no change for abbreviation\n }\n ]\n });\n\n it('Finds record invalid - No punc $b', async () => {\n const validator = await validatorFactory();\n const result = await validator.validate(recordInvalid);\n assert.deepEqual(result, {\n message: ['Field 036 requires ending punctuation, ends in \\'e\\''],\n valid: false\n });\n });\n\n it('Finds record invalid - Only $a with punc', async () => {\n const validator = await validatorFactory();\n const result = await validator.validate(recordInvalidOnlyA);\n assert.deepEqual(result, {\n message: ['Field 036 has unwanted ending punctuation \\'.\\''],\n valid: false\n });\n });\n\n // Fix tests; invalid->valid\n it('Repairs the invalid record - Add punc $b', async () => {\n const validator = await validatorFactory();\n const result = await validator.fix(recordInvalid);\n assert.equal(recordInvalid.equalsTo(recordValid), true);\n assert.deepEqual(result, {\n message: ['Field 036 requires ending punctuation, ends in \\'e\\''],\n fix: ['Field 036 - Added punctuation to $b'],\n valid: false\n });\n });\n\n it('Repairs the invalid record - Removes punc $a (register)', async () => {\n const validator = await validatorFactory();\n const result = await validator.fix(recordInvalidOnlyA);\n assert.equal(recordInvalidOnlyA.equalsTo(recordValidOnlyA), true);\n assert.deepEqual(result, {\n message: ['Field 036 has unwanted ending punctuation \\'.\\''],\n fix: ['Field 036 - Removed punctuation from $a'],\n valid: false\n });\n });\n });\n\n // \"242 KYLL\u00C4 Jos viimeinen osakentt\u00E4 on $y, piste on ennen sit\u00E4\" - Eli siis ei kent\u00E4ss\u00E4 y (ennen sit\u00E4)\n describe('#242 TRUE - if last subfield $y, punc before it', () => {\n // Valid tests\n const recordValidOnlyA = new MarcRecord({\n leader: '',\n fields: [\n {\n tag: '242',\n ind1: ' ',\n ind2: ' ',\n subfields: [\n {code: 'a', value: 'World of art.'},\n {code: 'y', value: 'eng'}\n ]\n }\n ]\n });\n\n const recordValidMultiple = new MarcRecord({\n leader: '',\n fields: [\n {\n tag: '242',\n ind1: ' ',\n ind2: ' ',\n subfields: [\n {code: 'a', value: 'Annals of chemistry.'},\n {code: 'n', value: 'Series C,'},\n {code: 'p', value: 'Organic chemistry and biochemistry.'},\n {code: 'y', value: 'eng'}\n ]\n }\n ]\n });\n\n // \"Suositellaan k\u00E4ytett\u00E4v\u00E4ksi my\u00F6s osakentt\u00E4\u00E4 \u2021y (k\u00E4\u00E4nn\u00F6ksen kielikoodi).\" https://www.kiwi.fi/pages/viewpage.action?pageId=51282044\n const recordValidWithoutY = new MarcRecord({\n leader: '',\n fields: [\n {\n tag: '242',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: 'World of art.'}]\n }\n ]\n });\n\n it('Finds record valid - Punc $a', async () => {\n const validator = await validatorFactory();\n const result = await validator.validate(recordValidOnlyA);\n assert.equal(result.valid, true);\n });\n\n it('Finds record valid - Punc $p', async () => {\n const validator = await validatorFactory();\n const result = await validator.validate(recordValidMultiple);\n assert.equal(result.valid, true);\n });\n\n it('Finds record valid - Punc $a without $y', async () => {\n const validator = await validatorFactory();\n const result = await validator.validate(recordValidWithoutY);\n assert.equal(result.valid, true);\n });\n\n // Invalid tests\n const recordInvalidOnlyAMissingA = new MarcRecord({\n leader: '',\n fields: [\n {\n tag: '242',\n ind1: ' ',\n ind2: ' ',\n subfields: [\n {code: 'a', value: 'World of art'},\n {code: 'y', value: 'eng'}\n ]\n }\n ]\n });\n\n const recordInvalidOnlyAPuncY = new MarcRecord({\n leader: '',\n fields: [\n {\n tag: '242',\n ind1: ' ',\n ind2: ' ',\n subfields: [\n {code: 'a', value: 'World of art.'},\n {code: 'y', value: 'eng.'} // $y is also checked as rule is explicit\n ]\n }\n ]\n });\n\n const recordInvalidOnlyAMissingAPuncY = new MarcRecord({\n leader: '',\n fields: [\n {\n tag: '242',\n ind1: ' ',\n ind2: ' ',\n subfields: [\n {code: 'a', value: 'World of art'},\n {code: 'y', value: 'eng.'} // $y is also checked as rule is explicit\n ]\n }\n ]\n });\n\n const recordValidMultipleMissingP = new MarcRecord({\n leader: '',\n fields: [\n {\n tag: '242',\n ind1: ' ',\n ind2: ' ',\n subfields: [\n {code: 'a', value: 'Annals of chemistry.'},\n {code: 'n', value: 'Series C,'},\n {code: 'p', value: 'Organic chemistry and biochemistry'},\n {code: 'y', value: 'eng'}\n ]\n }\n ]\n });\n\n // \"Suositellaan k\u00E4ytett\u00E4v\u00E4ksi my\u00F6s osakentt\u00E4\u00E4 \u2021y (k\u00E4\u00E4nn\u00F6ksen kielikoodi).\" https://www.kiwi.fi/pages/viewpage.action?pageId=51282044\n const recordValidWithoutYMissingA = new MarcRecord({\n leader: '',\n fields: [\n {\n tag: '242',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: 'World of art'}]\n }\n ]\n });\n\n it('Finds record invalid - No punc at $a (only before $y)', async () => {\n const validator = await validatorFactory();\n const result = await validator.validate(recordInvalidOnlyAMissingA);\n assert.deepEqual(result, {\n message: ['Field 242 requires ending punctuation, ends in \\'t\\''],\n valid: false\n });\n });\n\n it('Finds record invalid - Punc at $y (Language field)', async () => { // $y is also checked as rule is explicit\n const validator = await validatorFactory();\n const result = await validator.validate(recordInvalidOnlyAPuncY);\n assert.deepEqual(result, {\n message: ['Field 242 has unwanted ending punctuation \\'.\\''],\n valid: false\n });\n });\n\n it('Finds record invalid - No punc at $a & punc $y', async () => { // $y is also checked as rule is explicit\n const validator = await validatorFactory();\n const result = await validator.validate(recordInvalidOnlyAMissingAPuncY);\n assert.deepEqual(result, {\n message: ['Field 242 has unwanted ending punctuation \\'.\\'', 'Field 242 requires ending punctuation, ends in \\'t\\''],\n valid: false\n });\n });\n\n it('Finds record invalid - No punc $p (last before $y)', async () => {\n const validator = await validatorFactory();\n const result = await validator.validate(recordValidMultipleMissingP);\n assert.deepEqual(result, {\n message: ['Field 242 requires ending punctuation, ends in \\'y\\''],\n valid: false\n });\n });\n\n it('Finds record invalid - No punc $a (only)', async () => {\n const validator = await validatorFactory();\n const result = await validator.validate(recordValidWithoutYMissingA);\n assert.deepEqual(result, {\n message: ['Field 242 requires ending punctuation, ends in \\'t\\''],\n valid: false\n });\n });\n\n // Fix tests; invalid->valid\n it('Repairs the invalid record - Add punc $a', async () => {\n const validator = await validatorFactory();\n const result = await validator.fix(recordInvalidOnlyAMissingA);\n assert.equal(recordInvalidOnlyAMissingA.equalsTo(recordValidOnlyA), true);\n assert.deepEqual(result, {\n message: ['Field 242 requires ending punctuation, ends in \\'t\\''],\n fix: ['Field 242 - Added punctuation to $a'],\n valid: false\n });\n });\n\n it('Repairs the invalid record - Remove punc $y (Language field)', async () => {\n const validator = await validatorFactory();\n const result = await validator.fix(recordInvalidOnlyAPuncY);\n assert.equal(recordInvalidOnlyAPuncY.equalsTo(recordValidOnlyA), true);\n assert.deepEqual(result, {\n message: ['Field 242 has unwanted ending punctuation \\'.\\''],\n fix: ['Field 242 - Removed punctuation from $y'],\n valid: false\n });\n });\n\n it('Repairs the invalid record - Add punc $a & remove punc $y (Language field)', async () => {\n const validator = await validatorFactory();\n const result = await validator.fix(recordInvalidOnlyAMissingAPuncY);\n assert.equal(recordInvalidOnlyAMissingAPuncY.equalsTo(recordValidOnlyA), true);\n assert.deepEqual(result, {\n message: ['Field 242 has unwanted ending punctuation \\'.\\'', 'Field 242 requires ending punctuation, ends in \\'t\\''],\n fix: ['Field 242 - Removed punctuation from $y', 'Field 242 - Added punctuation to $a'],\n valid: false\n });\n });\n\n it('Repairs the invalid record - Add punc $p', async () => {\n const validator = await validatorFactory();\n const result = await validator.fix(recordValidMultipleMissingP);\n assert.equal(recordValidMultipleMissingP.equalsTo(recordValidMultiple), true);\n assert.deepEqual(result, {\n message: ['Field 242 requires ending punctuation, ends in \\'y\\''],\n fix: ['Field 242 - Added punctuation to $p'],\n valid: false\n });\n });\n\n it('Repairs the invalid record - Add punc $a', async () => {\n const validator = await validatorFactory();\n const result = await validator.fix(recordValidWithoutYMissingA);\n assert.equal(recordValidWithoutYMissingA.equalsTo(recordValidWithoutY), true);\n assert.deepEqual(result, {\n message: ['Field 242 requires ending punctuation, ends in \\'t\\''],\n fix: ['Field 242 - Added punctuation to $a'],\n valid: false\n });\n });\n });\n\n // \"260 KYLL\u00C4 P\u00E4\u00E4s\u00E4\u00E4nt\u00F6: $a : $b, $c. Tarkista eri poikkeukset ja v\u00E4limerkitys MARC 21 Full -versiosta\"\n // Punc only if last subfield c\n describe('#260 TRUE - Punc only if last subfield c', () => {\n // Valid tests\n const recordValidEndC = new MarcRecord({\n leader: '',\n fields: [\n {\n tag: '260',\n ind1: ' ',\n ind2: ' ',\n subfields: [\n {code: 'a', value: 'Helsinki'},\n {code: 'b', value: 'Suomen atk-kustannus,'},\n {code: 'c', value: '1982.'}\n ]\n }\n ]\n });\n\n const recordValidEndG = new MarcRecord({\n leader: '',\n fields: [\n {\n tag: '260',\n ind1: ' ',\n ind2: ' ',\n subfields: [\n {code: 'a', value: 'London'},\n {code: 'b', value: 'Macmillan,'},\n {code: 'c', value: '1971'},\n {code: 'g', value: '(1973 printing)'}\n ]\n }\n ]\n });\n\n const recordValidEndB = new MarcRecord({\n leader: '',\n fields: [\n {\n tag: '260',\n ind1: ' ',\n ind2: ' ',\n subfields: [\n {code: '3', value: 'June 1993-'},\n {code: 'a', value: 'London'},\n {code: 'b', value: 'Elle'}\n ]\n }\n ]\n });\n\n it('Finds record valid - Punc $c', async () => {\n const validator = await validatorFactory();\n const result = await validator.validate(recordValidEndC);\n assert.equal(result.valid, true);\n });\n\n it('Finds record valid - Punc char $g (after $c)', async () => {\n const validator = await validatorFactory();\n const result = await validator.validate(recordValidEndG);\n assert.equal(result.valid, true);\n });\n\n it('Finds record valid - No punc $b', async () => {\n const validator = await validatorFactory();\n const result = await validator.validate(recordValidEndB);\n assert.equal(result.valid, true);\n });\n\n // Invalid tests\n const recordInvalidEndC = new MarcRecord({\n leader: '',\n fields: [\n {\n tag: '260',\n ind1: ' ',\n ind2: ' ',\n subfields: [\n {code: 'a', value: 'Helsinki'},\n {code: 'b', value: 'Suomen atk-kustannus,'},\n {code: 'c', value: '1982'}\n ]\n }\n ]\n });\n\n const recordInvalidEndGDouble = new MarcRecord({\n leader: '',\n fields: [\n {\n tag: '260',\n ind1: ' ',\n ind2: ' ',\n subfields: [\n {code: 'a', value: 'London'},\n {code: 'b', value: 'Macmillan,'},\n {code: 'c', value: '1971'},\n {code: 'g', value: '(1973 printing).'}\n ]\n }\n ]\n });\n\n it('Finds record invalid', async () => {\n const validator = await validatorFactory();\n const result = await validator.validate(recordInvalidEndC);\n assert.deepEqual(result, {\n message: ['Field 260 requires ending punctuation, ends in \\'2\\''],\n valid: false\n });\n });\n\n it('Finds record invalid', async () => {\n const validator = await validatorFactory();\n const result = await validator.validate(recordInvalidEndGDouble);\n assert.deepEqual(result, {\n message: ['Field 260 has an extra dot after \\')\\''],\n valid: false\n });\n });\n\n // Fix tests; invalid->valid\n it('Repairs the invalid record - Add punc $c', async () => {\n const validator = await validatorFactory();\n const result = await validator.fix(recordInvalidEndC);\n assert.equal(recordInvalidEndC.equalsTo(recordValidEndC), true);\n assert.deepEqual(result, {\n message: ['Field 260 requires ending punctuation, ends in \\'2\\''],\n fix: ['Field 260 - Added punctuation to $c'],\n valid: false\n });\n });\n\n it('Repairs the invalid record - Remove double punc $g', async () => {\n const validator = await validatorFactory();\n const result = await validator.fix(recordInvalidEndGDouble);\n assert.equal(recordInvalidEndGDouble.equalsTo(recordValidEndG), true);\n assert.deepEqual(result, {\n message: ['Field 260 has an extra dot after \\')\\''],\n fix: ['Field 260 - Removed dot after punctuation from $g'],\n valid: false\n });\n });\n });\n\n // 264-kentt\u00E4\u00E4n tulee loppupiste, JOS on k\u00E4ytetty osakentt\u00E4\u00E4 \u2021c tuotantoajan, julkaisuajan,\n // jakeluajan tai valmistusajan ilmaisemiseen (2. indikaattori = 0, 1, 2 tai 3) JA osakentt\u00E4 \u2021c\n // ei p\u00E4\u00E4ty hakasulkuun ']' tai tavuviivaan '-' tai kaarisulkuun ')' tai kysymysmerkkiin '?'\n\n // Copyright-vuoden kanssa ei k\u00E4ytet\u00E4 loppupistett\u00E4 (2. indikaattori = 4).\n\n // Esimerkit\n // 264 #0 \u2021a [Vantaa?] : \u2021b [Olli Kela], \u2021c [2011?]\n // 264 #1 \u2021a Helsinki : \u2021b Helsingin yliopisto, \u2021c 1992-\n // 264 #1 \u2021a Helsinki : \u2021b Helsingin yliopisto, \u2021c 1995-2006. \u2190 loppupiste\n // 264 #2 \u2021a Kouvola : \u2021b Nuorisovirasto\n // 264 #3 \u2021a Lahti : \u2021b Valtion monistuskeskus, \u2021c 1965. \u2190 loppupiste\n describe('#264 TRUE - If ind2 === 0, 1, 2 or 3, punc at the end', () => {\n // Valid tests\n const recordValidInd2v1 = new MarcRecord({\n leader: '',\n fields: [\n {\n tag: '264',\n ind1: '#',\n ind2: '1',\n subfields: [\n {code: 'a', value: 'Helsinki'},\n {code: 'b', value: 'Helsingin yliopisto'},\n {code: 'c', value: '1995-2006.'}\n ]\n }\n ]\n });\n\n const recordValidInd2v1Short = new MarcRecord({\n leader: '',\n fields: [\n {\n tag: '264',\n ind1: '#',\n ind2: '1',\n subfields: [\n {code: 'a', value: 'Helsinki'},\n {code: 'b', value: 'Helsingin yliopisto'},\n {code: 'c', value: '1995-'}\n ]\n }\n ]\n });\n\n const recordValidInd2v2WithoutC = new MarcRecord({\n leader: '',\n fields: [\n {\n tag: '264',\n ind1: '#',\n ind2: '2',\n subfields: [\n {code: 'a', value: 'Kouvola'},\n {code: 'b', value: 'Nuorisovirasto'}\n ]\n }\n ]\n });\n\n const recordValidCopyright = new MarcRecord({\n leader: '',\n fields: [\n {\n tag: '264',\n ind1: ' ',\n ind2: '4',\n subfields: [\n {code: 'a', value: 'Helsinki : '},\n {code: 'b', value: 'Suomen poliisikoirayhdistys.'},\n {code: 'c', value: '\u00A9 1974'}\n ]\n }\n ]\n });\n\n it('Finds record valid - Ind2 = 1, $c 1995-2006.', async () => {\n const validator = await validatorFactory();\n const result = await validator.validate(recordValidInd2v1);\n assert.equal(result.valid, true);\n });\n\n it('Finds record valid - Ind2 = 1, $c 1995-', async () => {\n const validator = await validatorFactory();\n const result = await validator.validate(recordValidInd2v1Short);\n assert.equal(result.valid, true);\n });\n\n it('Finds record valid - Ind2 = 2, no $c', async () => {\n const validator = await validatorFactory();\n const result = await validator.validate(recordValidInd2v2WithoutC);\n assert.equal(result.valid, true);\n });\n\n it('Finds record valid - Ind2 = 4, copyright', async () => {\n const validator = await validatorFactory();\n const result = await validator.validate(recordValidCopyright);\n assert.equal(result.valid, true);\n });\n\n const recordInvalidInd2v1 = new MarcRecord({\n leader: '',\n fields: [\n {\n tag: '264',\n ind1: '#',\n ind2: '1',\n subfields: [\n {code: 'a', value: 'Helsinki'},\n {code: 'b', value: 'Helsingin yliopisto'},\n {code: 'c', value: '1995-2006'}\n ]\n }\n ]\n });\n\n const recordInvalidCopyrightCExtra = new MarcRecord({\n leader: '',\n fields: [\n {\n tag: '264',\n ind1: ' ',\n ind2: '4',\n subfields: [\n {code: 'a', value: 'Helsinki : '},\n {code: 'b', value: 'Suomen poliisikoirayhdistys.'},\n {code: 'c', value: '\u00A9 1974.'}\n ]\n }\n ]\n });\n\n it('Finds record invalid - No punc $c', async () => {\n const validator = await validatorFactory();\n const result = await validator.validate(recordInvalidInd2v1);\n assert.deepEqual(result, {\n message: ['Field 264 requires ending punctuation, ends in \\'6\\''],\n valid: false\n });\n });\n\n it('Finds record invalid - Ind2 = 4, copyright, extra punc $c', async () => {\n const validator = await validatorFactory();\n const result = await validator.validate(recordInvalidCopyrightCExtra);\n assert.deepEqual(result, {\n message: ['Field 264 has unwanted ending punctuation \\'.\\''],\n valid: false\n });\n });\n\n // Fix tests; invalid->valid\n it('Repairs the invalid record - Add punc $c', async () => {\n const validator = await validatorFactory();\n const result = await validator.fix(recordInvalidInd2v1);\n assert.equal(recordInvalidInd2v1.equalsTo(recordValidInd2v1), true);\n assert.deepEqual(result, {\n message: ['Field 264 requires ending punctuation, ends in \\'6\\''],\n fix: ['Field 264 - Added punctuation to $c'],\n valid: false\n });\n });\n\n it('Repairs the invalid record - Remove punc $c ($c has \u00A9, should not have punc)', async () => {\n const validator = await validatorFactory();\n const result = await validator.fix(recordInvalidCopyrightCExtra);\n assert.equal(recordInvalidCopyrightCExtra.equalsTo(recordValidCopyright), true);\n assert.deepEqual(result, {\n message: ['Field 264 has unwanted ending punctuation \\'.\\''],\n fix: ['Field 264 - Removed punctuation from $c'],\n valid: false\n });\n });\n });\n\n // \"340 KYLL\u00C4 Vain joidenkin osakenttien j\u00E4lkeen. Tarkista osakent\u00E4t MARC 21 Full -versiosta\n // -b: Piste aina osakent\u00E4n loppuun\n // - a, d, e, f, h, i: Piste n\u00E4ist\u00E4 viimeisen osakent\u00E4n loppuun\"\n // This doesn't match spec at all, but these rules were provided (https://www.kansalliskirjasto.fi/extra/marc21/bib/3XX.htm#340)\n describe('#340 TRUE - Punc at $b always and to last of [$a, $d, $e, $f, $h, $i]', () => {\n // Valid tests\n const recordValidA = new MarcRecord({\n leader: '',\n fields: [\n {\n tag: '340',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: 'marble.'}]\n }\n ]\n });\n\n const recordValidAB = new MarcRecord({\n leader: '',\n fields: [\n {\n tag: '340',\n ind1: ' ',\n ind2: ' ',\n subfields: [\n {code: 'a', value: 'parchment.'}, // This punc doesn't match example: https://www.kansalliskirjasto.fi/extra/marc21/bib/3XX.htm#340\n {code: 'b', value: '20 cm. folded to 10 x 12 cm.'}\n ]\n }\n ]\n });\n\n const recordValidDD = new MarcRecord({\n leader: '',\n fields: [\n {\n tag: '340',\n ind1: ' ',\n ind2: ' ',\n subfields: [\n {code: 'd', value: 'handwritten'},\n {code: 'd', value: 'typed.'}\n ]\n }\n ]\n });\n\n const recordValidComplex = new MarcRecord({\n leader: '',\n fields: [\n {\n tag: '340',\n ind1: ' ',\n ind2: ' ',\n subfields: [\n {code: 'a', value: 'wove paper'},\n {code: 'c', value: 'ink'},\n {code: 'c', value: 'gouache'},\n {code: 'd', value: 'lithography'},\n {code: 'd', value: 'collage.'}, // This punc doesn't match example: https://www.kansalliskirjasto.fi/extra/marc21/bib/3XX.htm#340\n {code: 'g', value: 'polychrome'}\n ]\n }\n ]\n });\n\n const recordValidJ2 = new MarcRecord({\n leader: '',\n fields: [\n {\n tag: '340',\n ind1: ' ',\n ind2: ' ',\n subfields: [\n {code: 'j', value: 'original'},\n {code: '2', value: 'rda'}\n ]\n }\n ]\n });\n\n it('Finds record valid - Punc $a (only)', async () => {\n const validator = await validatorFactory();\n const result = await validator.validate(recordValidA);\n assert.equal(result.valid, true);\n });\n\n it('Finds record valid - Punc $a (last) & punc $b (mandatory)', async () => {\n const validator = await validatorFactory();\n const result = await validator.validate(recordValidAB);\n assert.equal(result.valid, true);\n });\n\n it('Finds record valid - Punc $d (last of two)', async () => {\n const validator = await validatorFactory();\n const result = await validator.validate(recordValidDD);\n assert.equal(result.valid, true);\n });\n\n it('Finds record valid - Punc $d (last of two) followed by $g', async () => {\n const validator = await validatorFactory();\n const result = await validator.validate(recordValidComplex);\n assert.equal(result.valid, true);\n });\n\n it('Finds record valid - No punc (not $b, nor from list)', async () => {\n const validator = await validatorFactory();\n const result = await validator.validate(recordValidJ2);\n assert.equal(result.valid, true);\n });\n\n // Invalid tests\n const recordInvalidA = new MarcRecord({\n leader: '',\n fields: [\n {\n tag: '340',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: 'marble'}]\n }\n ]\n });\n\n const recordInvalidAMissingB = new MarcRecord({\n leader: '',\n fields: [\n {\n tag: '340',\n ind1: ' ',\n ind2: ' ',\n subfields: [\n {code: 'a', value: 'parchment'}, // This punc doesn't match example: https://www.kansalliskirjasto.fi/extra/marc21/bib/3XX.htm#340\n {code: 'b', value: '20 cm. folded to 10 x 12 cm.'}\n ]\n }\n ]\n });\n\n const recordInvalidABMissing = new MarcRecord({\n leader: '',\n fields: [\n {\n tag: '340',\n ind1: ' ',\n ind2: ' ',\n subfields: [\n {code: 'a', value: 'parchment.'}, // This punc doesn't match example: https://www.kansalliskirjasto.fi/extra/marc21/bib/3XX.htm#340\n {code: 'b', value: '20 cm. folded to 10 x 12 cm'}\n ]\n }\n ]\n });\n\n const recordInvalidDDMissing = new MarcRecord({\n leader: '',\n fields: [\n {\n tag: '340',\n ind1: ' ',\n ind2: ' ',\n subfields: [\n {code: 'd', value: 'handwritten'},\n {code: 'd', value: 'typed'}\n ]\n }\n ]\n });\n\n const recordInvalidComplexDMissing = new MarcRecord({\n leader: '',\n fields: [\n {\n tag: '340',\n ind1: ' ',\n ind2: ' ',\n subfields: [\n {code: 'a', value: 'wove paper'},\n {code: 'c', value: 'ink'},\n {code: 'c', value: 'gouache'},\n {code: 'd', value: 'lithography'},\n {code: 'd', value: 'collage'}, // This punc doesn't match example: https://www.kansalliskirjasto.fi/extra/marc21/bib/3XX.htm#340\n {code: 'g', value: 'polychrome'}\n ]\n }\n ]\n });\n\n it('Finds record invalid - No punc $a (only)', async () => {\n const validator = await validatorFactory();\n const result = await validator.validate(recordInvalidA);\n assert.deepEqual(result, {\n message: ['Field 340 requires ending punctuation, ends in \\'e\\''],\n valid: false\n });\n });\n\n it('Finds record invalid - No punc $a (last)', async () => {\n const validator = await validatorFactory();\n const result = await validator.validate(recordInvalidAMissingB);\n assert.deepEqual(result, {\n message: ['Field 340 requires ending punctuation, ends in \\'t\\''],\n valid: false\n });\n });\n\n it('Finds record invalid - No punc $b (mandatory)', async () => {\n const validator = await validatorFactory();\n const result = await validator.validate(recordInvalidABMissing);\n assert.deepEqual(result, {\n message: ['Field 340 requires ending punctuation, ends in \\'m\\''],\n valid: false\n });\n });\n\n it('Finds record invalid - No punc $d (last of two)', async () => {\n const validator = await validatorFactory();\n const result = await validator.validate(recordInvalidDDMissing);\n assert.deepEqual(result, {\n message: ['Field 340 requires ending punctuation, ends in \\'d\\''],\n valid: false\n });\n });\n\n it('Finds record invalid - No punc $d (last of two) followed by $g', async () => {\n const validator = await validatorFactory();\n const result = await validator.validate(recordInvalidComplexDMissing);\n assert.deepEqual(result, {\n message: ['Field 340 requires ending punctuation, ends in \\'e\\''],\n valid: false\n });\n });\n\n // Fix tests; invalid->valid\n it('Repairs the invalid record - Add punc $a (only)', async () => {\n const validator = await validatorFactory();\n const result = await validator.fix(recordInvalidA);\n assert.equal(recordInvalidA.equalsTo(recordInvalidA), true);\n assert.deepEqual(result, {\n message: ['Field 340 requires ending punctuation, ends in \\'e\\''],\n fix: ['Field 340 - Added punctuation to $a'],\n valid: false\n });\n });\n\n it('Repairs the invalid record - Add punc $a (last)', async () => {\n const validator = await validatorFactory();\n const result = await validator.fix(recordInvalidAMissingB);\n assert.equal(recordInvalidAMissingB.equalsTo(recordValidAB), true);\n assert.deepEqual(result, {\n message: ['Field 340 requires ending punctuation, ends in \\'t\\''],\n fix: ['Field 340 - Added punctuation to $a'],\n valid: false\n });\n });\n\n it('Repairs the invalid record - Add punc $b (mandatory)', async () => {\n const validator = await validatorFactory();\n const result = await validator.fix(recordInvalidABMissing);\n assert.equal(recordInvalidABMissing.equalsTo(recordValidAB), true);\n assert.deepEqual(result, {\n message: ['Field 340 requires ending punctuation, ends in \\'m\\''],\n fix: ['Field 340 - Added punctuation to $b'],\n valid: false\n });\n });\n\n it('Repairs the invalid record - Add punc $d (last of two)', async () => {\n const validator = await validatorFactory();\n const result = await validator.fix(recordInvalidDDMissing);\n assert.equal(recordInvalidDDMissing.equalsTo(recordValidDD), true);\n assert.deepEqual(result, {\n message: ['Field 340 requires ending punctuation, ends in \\'d\\''],\n fix: ['Field 340 - Added punctuation to $d'],\n valid: false\n });\n });\n\n it('Repairs the invalid record - Add punc $d (last of list)', async () => {\n const validator = await validatorFactory();\n const result = await validator.fix(recordInvalidComplexDMissing);\n assert.equal(recordInvalidComplexDMissing.equalsTo(recordInvalidComplexDMissing), true);\n assert.deepEqual(result, {\n message: ['Field 340 requires ending punctuation, ends in \\'e\\''],\n fix: ['Field 340 - Added punctuation to $d'],\n valid: false\n });\n });\n });\n\n // \"520 KYLL\u00C4 Jos viimeinen osakentt\u00E4 on $u, piste on ennen sit\u00E4\" (Sama kuin 242, $y)\n describe('#520 TRUE - If last subfield $u, punc before it', () => {\n // Valid tests\n const recordValid = new MarcRecord({\n leader: '',\n fields: [\n {\n tag: '520',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: 'Mediav\u00E4kivalta ja sen yleis\u00F6.'}]\n }\n ]\n });\n\n const recordValidWithU = new MarcRecord({\n leader: '',\n fields: [\n {\n tag: '520',\n ind1: ' ',\n ind2: ' ',\n subfields: [\n {code: 'a', value: 'Abstrakti.'}, // This does not match example: https://www.kansalliskirjasto.fi/extra/marc21/bib/50X-53X.htm#520\n {code: 'u', value: 'http://www.ojp.usdoj.gov/bjs/abstract/cchrie98.htm'}\n ]\n }\n ]\n });\n\n const recordValidU = new MarcRecord({\n leader: '',\n fields: [\n {\n tag: '520',\n ind1: ' ',\n ind2: ' ',\n subfields: [\n {code: 'a', value: 'Abstrakti.'}, // This does not match example: https://www.kansalliskirjasto.fi/extra/marc21/bib/50X-53X.htm#520\n {code: 'u', value: 'http://www.ojp.usdoj.gov/bjs/abstract/cchrie98.htm.'}\n ]\n }\n ]\n });\n\n it('Finds record valid - Punc $a (without $u)', async () => {\n const validator = await validatorFactory();\n const result = await validator.validate(recordValid);\n assert.equal(result.valid, true);\n });\n\n it('Finds record valid - Punc $a (with $u) ', async () => {\n const validator = await validatorFactory();\n const result = await validator.validate(recordValidWithU);\n assert.equal(result.valid, true);\n });\n\n it('Finds record valid - Punc $a & $u (punc at $u should be ignored) ', async () => {\n const validator = await validatorFactory();\n const result = await validator.validate(recordValidU);\n assert.equal(result.valid, true);\n });\n\n // Invalid tests\n const recordInvalid = new MarcRecord({\n leader: '',\n fields: [\n {\n tag: '520',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: 'Mediav\u00E4kivalta ja sen yleis\u00F6'}]\n }\n ]\n });\n\n const recordInvalidWithU = new MarcRecord({\n leader: '',\n fields: [\n {\n tag: '520',\n ind1: ' ',\n ind2: ' ',\n subfields: [\n {code: 'a', value: 'Abstrakti'},\n {code: 'u', value: 'http://www.ojp.usdoj.gov/bjs/abstract/cchrie98.htm'}\n ]\n }\n ]\n });\n\n it('Finds record invalid - No punc $a (without $u)', async () => {\n const validator = await validatorFactory();\n const result = await validator.validate(recordInvalid);\n assert.deepEqual(result, {\n message: ['Field 520 requires ending punctuation, ends in \\'\u00F6\\''],\n valid: false\n });\n });\n\n it('Finds record invalid - No punc $a (with $u)', async () => {\n const validator = await validatorFactory();\n const result = await validator.validate(recordInvalidWithU);\n assert.deepEqual(result, {\n message: ['Field 520 requires ending punctuation, ends in \\'i\\''],\n valid: false\n });\n });\n\n // Fix tests; invalid->valid\n it('Repairs the invalid record - Add punc $a (only)', async () => {\n const validator = await validatorFactory();\n const result = await validator.fix(recordInvalid);\n assert.equal(recordInvalid.equalsTo(recordValid), true);\n assert.deepEqual(result, {\n message: ['Field 520 requires ending punctuation, ends in \\'\u00F6\\''],\n fix: ['Field 520 - Added punctuation to $a'],\n valid: false\n });\n });\n\n it('Repairs the invalid record - Add punc $a (last before $u)', async () => {\n const validator = await validatorFactory();\n const result = await validator.fix(recordInvalidWithU);\n assert.equal(recordInvalidWithU.equalsTo(recordValidWithU), true);\n assert.deepEqual(result, {\n message: ['Field 520 requires ending punctuation, ends in \\'i\\''],\n fix: ['Field 520 - Added punctuation to $a'],\n valid: false\n });\n });\n });\n\n // \"538 KYLL\u00C4 Jos viimeinen osakentt\u00E4 on $u, piste on ennen sit\u00E4\" (Sama kuin 520)\n // Eli piste merkit\u00E4\u00E4n vikaan osakentt\u00E4\u00E4n as usual, mutta ennen *y*-osakentt\u00E4\u00E4\n // (speksin mukaan y->u) https://www.kansalliskirjasto.fi/extra/marc21/bib/53X-58X.htm#538\n describe('#538 TRUE - If last subfield $u, punc before it', () => {\n // Valid tests\n const recordValid = new MarcRecord({\n leader: '',\n fields: [\n {\n tag: '538',\n ind1: ' ',\n ind2: ' ',\n subfields: [\n {code: 'a', value: 'Project methodology for digital version'},\n {code: 'i', value: 'Technical details.'}, // This ended to ':' in examples, but it doesn't match statet rules: https://www.kansalliskirjasto.fi/extra/marc21/bib/53X-58X.htm#538\n {code: 'u', value: 'http://www.columbia.edu/dlc/linglung/methodology.html'}\n ]\n }\n ]\n });\n\n const recordValidPuncU = new MarcRecord({\n leader: '',\n fields: [\n {\n tag: '538',\n ind1: ' ',\n ind2: ' ',\n subfields: [\n {code: 'a', value: 'Project methodology for digital version'},\n {code: 'i', value: 'Technical details.'},\n {code: 'u', value: 'http://www.columbia.edu/dlc/linglung/methodology.html.'}\n ]\n }\n ]\n });\n\n const recordValidOnlyA = new MarcRecord({\n leader: '',\n fields: [\n {\n tag: '538',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: 'SECAM-videolaite.'}]\n }\n ]\n });\n\n it('Finds record valid - Punc $i (last before $u)', async () => {\n const validator = await validatorFactory();\n const result = await validator.validate(recordValid);\n assert.equal(result.valid, true);\n });\n\n it('Finds record valid - Punc $i & punc $u ($u is URL, should pass)', async () => {\n const validator = await validatorFactory();\n const result = await validator.validate(recordValidPuncU);\n assert.equal(result.valid, true);\n });\n\n it('Finds record valid - Punc $a (only)', async () => {\n const validator = await validatorFactory();\n const result = await validator.validate(recordValidOnlyA);\n assert.equal(result.valid, true);\n });\n\n // Invalid tests\n const recordInvalidMissingI = new MarcRecord({\n leader: '',\n fields: [\n {\n tag: '538',\n ind1: ' ',\n ind2: ' ',\n subfields: [\n {code: 'a', value: 'Project methodology for digital version'},\n {code: 'i', value: 'Technical details'},\n {code: 'u', value: 'http://www.columbia.edu/dlc/linglung/methodology.html'}\n ]\n }\n ]\n });\n\n const recordInvalidI = new MarcRecord({\n leader: '',\n fields: [\n {\n tag: '538',\n ind1: ' ',\n ind2: ' ',\n subfields: [\n {code: 'a', value: 'Project methodology for digital version'},\n {code: 'i', value: 'Technical details:'}, // This is actually like in examples, but it doesn't match statet rules: https://www.kansalliskirjasto.fi/extra/marc21/bib/53X-58X.htm#538\n {code: 'u', value: 'http://www.columbia.edu/dlc/linglung/methodology.html'}\n ]\n }\n ]\n });\n\n const recordInvalidOnlyA = new MarcRecord({\n leader: '',\n fields: [\n {\n tag: '538',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: 'SECAM-videolaite'}]\n }\n ]\n });\n\n it('Finds record invalid - No punc $i (last before $u)', async () => {\n const validator = await validatorFactory();\n const result = await validator.validate(recordInvalidMissingI);\n assert.deepEqual(result, {\n message: ['Field 538 requires ending punctuation, ends in \\'s\\''],\n valid: false\n });\n });\n\n it('Finds record invalid - Invalid punc $i (\":\" not valid punc mark, but this is according example...)', async () => {\n const validator = await validatorFactory();\n const result = await validator.validate(recordInvalidI);\n assert.deepEqual(result, {\n message: ['Field 538 requires ending punctuation, ends in \\':\\''],\n valid: false\n });\n });\n\n it('Finds record invalid - No punc $a (only)', async () => {\n const validator = await validatorFactory();\n const result = await validator.validate(recordInvalidOnlyA);\n assert.deepEqual(result, {\n message: ['Field 538 requires ending punctuation, ends in \\'e\\''],\n valid: false\n });\n });\n\n // Fix tests; invalid->valid\n it('Repairs the invalid record - Add punc $i (last)', async () => {\n const validator = await validatorFactory();\n const result = await validator.fix(recordInvalidMissingI);\n assert.equal(recordInvalidMissingI.equalsTo(recordValid), true);\n assert.deepEqual(result, {\n message: ['Field 538 requires ending punctuation, ends in \\'s\\''],\n fix: ['Field 538 - Added punctuation to $i'],\n valid: false\n });\n });\n\n it('Repairs the invalid record - Add punc $a (only)', async () => {\n const validator = await validatorFactory();\n const result = await validator.fix(recordInvalidOnlyA);\n assert.equal(recordInvalidOnlyA.equalsTo(recordValidOnlyA), true);\n assert.deepEqual(result, {\n message: ['Field 538 requires ending punctuation, ends in \\'e\\''],\n fix: ['Field 538 - Added punctuation to $a'],\n valid: false\n });\n });\n });\n\n // \"567 KYLL\u00C4 osakent\u00E4n $a j\u00E4lkeen, EI muiden osakenttien j\u00E4lkeen\"\n // Only if last subfield $a\n describe('#567 TRUE - After subfield $a, FALSE after others', () => {\n // Valid tests\n const recordValid = new MarcRecord({\n leader: '',\n fields: [\n {\n tag: '567',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: 'Narratiivinen tutkimus.'}]\n }\n ]\n });\n\n const recordValidWithoutA = new MarcRecord({\n leader: '',\n fields: [\n {\n tag: '567',\n ind1: ' ',\n ind2: ' ',\n subfields: [\n {code: 'b', value: 'Narrative inquiry'},\n {code: '2', value: 'lcsh'}\n ]\n }\n ]\n });\n\n it('Finds record valid - Punc $a (only)', async () => {\n const validator = await validatorFactory();\n const result = await validator.validate(recordValid);\n assert.equal(result.valid, true);\n });\n\n it('Finds record valid - No punc $b (only data field)', async () => {\n const validator = await validatorFactory();\n const result = await validator.validate(recordValidWithoutA);\n assert.equal(result.valid, true);\n });\n\n // Invalid tests\n const recordInvalid = new MarcRecord({\n leader: '',\n fields: [\n {\n tag: '567',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: 'Narratiivinen tutkimus'}]\n }\n ]\n });\n\n const recordInvalidWithoutA = new MarcRecord({\n leader: '',\n fields: [\n {\n tag: '567',\n ind1: ' ',\n ind2: ' ',\n subfields: [\n {code: 'b', value: 'Narrative inquiry.'},\n {code: '2', value: 'lcsh'}\n ]\n }\n ]\n });\n\n it('Finds record invalid - No punc $a (only)', async () => {\n const validator = await validatorFactory();\n const result = await validator.validate(recordInvalid);\n assert.deepEqual(result, {\n message: ['Field 567 requires ending punctuation, ends in \\'s\\''],\n valid: false\n });\n });\n\n it('Finds record invalid - Punc $b (only data field)', async () => {\n const validator = await validatorFactory();\n const result = await validator.validate(recordInvalidWithoutA);\n assert.deepEqual(result, {\n message: ['Field 567 has unwanted ending punctuation \\'.\\''],\n valid: false\n });\n });\n\n // Fix tests; invalid->valid\n it('Repairs the invalid record - Add punc $a (only)', async () => {\n const validator = await validatorFactory();\n const result = await validator.fix(recordInvalid);\n assert.equal(recordInvalid.equalsTo(recordValid), true);\n assert.deepEqual(result, {\n message: ['Field 567 requires ending punctuation, ends in \\'s\\''],\n fix: ['Field 567 - Added punctuation to $a'],\n valid: false\n });\n });\n\n it('Repairs the invalid record - Remove punc $b (only data field)', async () => {\n const validator = await validatorFactory();\n const result = await validator.fix(recordInvalidWithoutA);\n assert.equal(recordInvalidWithoutA.equalsTo(recordValidWithoutA), true);\n assert.deepEqual(result, {\n message: ['Field 567 has unwanted ending punctuation \\'.\\''],\n fix: ['Field 567 - Removed punctuation from $b'],\n valid: false\n });\n });\n });\n\n // \"647-651 EI - EI suomalaisten sanastojen termeihin, muihin sanaston k\u00E4yt\u00E4nn\u00F6n mukaan, yleens\u00E4 KYLL\u00C4\"\n // Finnish terms at $2:['ysa', 'yso', 'kassu', 'seko', 'valo', 'kulo', 'puho', 'oiko', 'mero', 'liito', 'fast', 'allars']\n // Default TRUE, until more special cases are added\n describe('#647-651 FALSE - If Finnish, else TRUE', () => {\n // Valid tests\n const recordValid647FastEndPunc = new MarcRecord({\n leader: '',\n fields: [\n {\n tag: '647',\n ind1: ' ',\n ind2: '7',\n subfields: [\n {code: 'a', value: 'Hurricane Katrina'},\n {code: 'd', value: '(2005)'},\n {code: '2', value: 'fast'}\n ]\n }\n ]\n });\n\n const recordValid648FinNo = new MarcRecord({\n leader: '',\n fields: [\n {\n tag: '648',\n ind1: ' ',\n ind2: '7',\n subfields: [\n {code: 'a', value: '1900-luku'},\n {code: '2', value: 'yso/swe'}\n ]\n },\n { // Exception: term ending in dot:\n tag : '648',\n ind1: ' ',\n ind2: '7',\n subfields: [\n {code: 'a', value: '1200-luku eaa.'},\n {code: '2', value: 'yso/fin'},\n {code: '0', value: 'http://www.yso.fi/onto/yso/p1129911200'}\n ]\n }\n ]\n });\n\n const recordValid648FastNo = new MarcRecord({\n leader: '',\n fields: [\n {\n tag: '648',\n ind1: ' ',\n ind2: '7',\n subfields: [\n {code: 'a', value: '1862'},\n {code: '2', value: 'fast'} // https://www.kansalliskirjasto.fi/extra/marc21/bib/6XX.htm#648\n ]\n }\n ]\n });\n\n const recordValid650FinNo = new MarcRecord({\n leader: '',\n fields: [\n {tag: '650', ind1: ' ', ind2: '7', subfields: [\n {code: 'a', value: 'kirjastot'},\n {code: 'x', value: 'atk-j\u00E4rjestelm\u00E4t'},\n {code: '2', value: 'kauno/fin'}\n ]},\n {tag: '650', ind1: ' ', ind2: '7', subfields: [\n {code: 'a', value: 'ajovalot'},\n {code: '2', value: 'juho'}\n ]}\n ]\n });\n\n const recordValid650EngNoControl = new MarcRecord({\n leader: '',\n fields: [\n {\n tag: '650',\n ind1: ' ',\n ind2: ' ',\n subfields: [\n {code: 'a', value: 'Flour industry'},\n {code: 'v', value: 'Periodicals.'}\n ]\n }\n ]\n });\n\n const recordValid650EngControl = new MarcRecord({\n leader: '',\n fields: [\n {\n tag: '650',\n ind1: ' ',\n ind2: '7',\n subfields: [\n {code: 'a', value: 'Career Exploration.'},\n {code: '2', value: 'ericd'}\n ]\n }\n ]\n });\n\n it('Finds record valid - 647 Fast, punc char at end', async () => {\n const validator = await validatorFactory();\n const result = await validator.validate(recordValid647FastEndPunc);\n assert.equal(result.valid, true);\n });\n\n it('Finds record valid - 648 Finnish, without punc', async () => {\n const validator = await validatorFactory();\n const result = await validator.validate(recordValid648FinNo);\n assert.equal(result.valid, true);\n });\n\n it('Finds record valid - 648 Fast, without punc', async () => {\n const validator = await validatorFactory();\n const result = await validator.validate(recordValid648FastNo);\n assert.equal(result.valid, true);\n });\n\n it('Finds record valid - 650 Finnish, without punc', async () => {\n const validator = await validatorFactory();\n const result = await validator.validate(recordValid650FinNo);\n assert.equal(result.valid, true);\n });\n\n it('Finds record valid - 650 English, punc (no control)', async () => {\n const validator = await validatorFactory();\n const result = await validator.validate(recordValid650EngNoControl);\n assert.equal(result.valid, true);\n });\n\n it('Finds record valid - 650 English, with punc', async () => {\n const validator = await validatorFactory();\n const result = await validator.validate(recordValid650EngControl);\n assert.equal(result.valid, true);\n });\n\n // Invalid tests\n const recordInvalid647FastEndPunc = new MarcRecord({\n leader: '',\n fields: [\n {\n tag: '647',\n ind1: ' ',\n ind2: '7',\n subfields: [\n {code: 'a', value: 'Hurricane Katrina'},\n {code: 'd', value: '(2005).'},\n {code: '2', value: 'fast'}\n ]\n }\n ]\n });\n\n const recordInvalid648FinYes = new MarcRecord({\n leader: '',\n fields: [\n {\n tag: '648',\n ind1: ' ',\n ind2: '7',\n subfields: [\n {code: 'a', value: '1900-luku.'},\n {code: '2', value: 'yso/swe'}\n ]\n }, { // Exception:\n tag: '648',\n ind1: ' ',\n ind2: '7',\n subfields: [\n {code: 'a', value: '1200-luku eaa'},\n {code: '2', value: 'yso/fin'},\n {code: '0', value: 'http://www.yso.fi/onto/yso/p1129911200'}\n ]\n }\n ]\n });\n\n const recordInvalid648FastYes = new MarcRecord({\n leader: '',\n fields: [\n {\n tag: '648',\n ind1: ' ',\n ind2: '7',\n subfields: [\n {code: 'a', value: '1862.'},\n {code: '2', value: 'fast'}\n ]\n }\n ]\n });\n\n const recordInvalid650FinYes = new MarcRecord({\n leader: '',\n fields: [\n {tag: '650', ind1: ' ', ind2: '7', subfields: [\n {code: 'a', value: 'kirjastot'},\n {code: 'x', value: 'atk-j\u00E4rjestelm\u00E4t.'},\n {code: '2', value: 'kauno/fin'}\n ]},\n {tag: '650', ind1: ' ', ind2: '7', subfields: [\n {code: 'a', value: 'ajovalot.'},\n {code: '2', value: 'juho'}\n ]}\n ]\n });\n\n const recordInvalid650EngNoControl = new MarcRecord({\n leader: '',\n fields: [\n {\n tag: '650',\n ind1: ' ',\n ind2: ' ',\n subfields: [\n {code: 'a', value: 'Flour industry'},\n {code: 'v', value: 'Periodicals'}\n ]\n }\n ]\n });\n\n const recordInvalid650EngControl = new MarcRecord({\n leader: '',\n fields: [\n {\n tag: '650',\n ind1: ' ',\n ind2: '7',\n subfields: [\n {code: 'a', value: 'Career Exploration'},\n {code: '2', value: 'ericd'}\n ]\n }\n ]\n });\n\n it('Finds record invalid - 647 Fast, dot at end', async () => {\n const validator = await validatorFactory();\n const result = await validator.validate(recordInvalid647FastEndPunc);\n assert.deepEqual(result, {\n message: ['Field 647 has an extra dot after \\')\\''],\n valid: false\n });\n });\n\n it('Finds record invalid - 648 Finnish, with punc', async () => {\n const validator = await validatorFactory();\n const result = await validator.validate(recordInvalid648FinYes);\n assert.deepEqual(result, {\n message: ['Field 648 has unwanted ending punctuation \\'.\\'', \"Field 648 requires ending punctuation, ends in 'a'\"],\n valid: false\n });\n });\n\n it('Finds record invalid - 648 Fast, with punc', async () => {\n const validator = await validatorFactory();\n const result = await validator.validate(recordInvalid648FastYes);\n assert.deepEqual(result, {\n message: ['Field 648 has unwanted ending punctuation \\'.\\''],\n valid: false\n });\n });\n\n const invalidField650Message = 'Field 650 has unwanted ending punctuation \\'.\\'';\n it('Finds record invalid - 650 Finnish, with punc', async () => {\n const validator = await validatorFactory();\n const result = await validator.validate(recordInvalid650FinYes);\n assert.deepEqual(result, {\n message: [invalidField650Message, invalidField650Message],\n valid: false\n });\n });\n\n it('Finds record invalid - 650 !Finnish, without punc (no control)', async () => {\n const validator = await validatorFactory();\n const result = await validator.validate(recordInvalid650EngNoControl);\n assert.deepEqual(result, {\n message: ['Field 650 requires ending punctuation, ends in \\'s\\''],\n valid: false\n });\n });\n\n it('Finds record invalid - 650 !Finnish, without punc', async () => {\n const validator = await validatorFactory();\n const result = await validator.validate(recordInvalid650EngControl);\n assert.deepEqual(result, {\n message: ['Field 650 requires ending punctuation, ends in \\'n\\''],\n valid: false\n });\n });\n\n // Fix tests; invalid->valid\n it('Repairs the invalid record - 647 Fast, removes double punc $d', async () => {\n const validator = await validatorFactory();\n const result = await validator.fix(recordInvalid647FastEndPunc);\n assert.equal(recordInvalid647FastEndPunc.equalsTo(recordValid647FastEndPunc), true);\n assert.deepEqual(result, {\n message: ['Field 647 has an extra dot after \\')\\''],\n fix: ['Field 647 - Removed dot after punctuation from $d'],\n valid: false\n });\n });\n\n it('Repairs the invalid record - 648 Finnish, removes punc $a', async () => {\n const validator = await validatorFactory();\n const result = await validator.fix(recordInvalid648FinYes);\n //console.info(\"NV-------\");\n //console.info(JSON.stringify(recordInvalid648FinYes));\n //console.info(JSON.stringify(recordValid648FinNo));\n //assert.equal(recordInvalid648FinYes.equalsTo(recordValid648FinNo), true);\n assert.deepEqual(recordInvalid648FinYes, recordValid648FinNo);\n //console.info(JSON.stringify(result));\n assert.deepEqual(result, {\n message: ['Field 648 has unwanted ending punctuation \\'.\\'', \"Field 648 requires ending punctuation, ends in 'a'\"],\n fix: ['Field 648 - Removed punctuation from $a', 'Field 648 - Added punctuation to $a'],\n valid: false\n });\n });\n\n it('Repairs the invalid record - 648 Fast, removes punc $a', async () => {\n const validator = await validatorFactory();\n const result = await validator.fix(recordInvalid648FastYes);\n assert.equal(recordInvalid648FastYes.equalsTo(recordValid648FastNo), true);\n assert.deepEqual(result, {\n message: ['Field 648 has unwanted ending punctuation \\'.\\''],\n fix: ['Field 648 - Removed punctuation from $a'],\n valid: false\n });\n });\n\n it('Repairs the invalid record - 650 Finnish, removes punc $x', async () => {\n const validator = await validatorFactory();\n const result = await validator.fix(recordInvalid650FinYes);\n assert.equal(recordInvalid650FinYes.equalsTo(recordValid650FinNo), true);\n assert.deepEqual(result, {\n message: [invalidField650Message, invalidField650Message],\n fix: ['Field 650 - Removed punctuation from $x', 'Field 650 - Removed punctuation from $a'],\n valid: false\n });\n });\n\n it('Repairs the invalid record - 650 !Finnish, add punc $v (no control)', async () => {\n const validator = await validatorFactory();\n const result = await validator.fix(recordInvalid650EngNoControl);\n assert.equal(recordInvalid650EngNoControl.equalsTo(recordValid650EngNoControl), true);\n assert.deepEqual(result, {\n message: ['Field 650 requires ending punctuation, ends in \\'s\\''],\n fix: ['Field 650 - Added punctuation to $v'],\n valid: false\n });\n });\n\n it('Repairs the invalid record - 650 !Finnish, add punc $a', async () => {\n const validator = await validatorFactory();\n const result = await validator.fix(recordInvalid650EngControl);\n assert.equal(recordInvalid650EngControl.equalsTo(recordValid650EngControl), true);\n assert.deepEqual(result, {\n message: ['Field 650 requires ending punctuation, ends in \\'n\\''],\n fix: ['Field 650 - Added punctuation to $a'],\n valid: false\n });\n });\n });\n\n // \"654-662 EI - EI suomalaisten sanastojen termeihin, muihin sanaston k\u00E4yt\u00E4nn\u00F6n mukaan, yleens\u00E4 KYLL\u00C4\"\n // Finnish terms at $2:['ysa', 'yso', 'kassu', 'seko', 'valo', 'kulo', 'puho', 'oiko', 'mero', 'liito', 'fast', 'allars']\n // Default TRUE, until more special cases are added\n describe('#654-662 TRUE - If Finnish, else TRUE', () => {\n // Valid tests\n const recordValid655FinNo = new MarcRecord({\n leader: '',\n fields: [\n {\n tag: '655',\n ind1: ' ',\n ind2: '7',\n subfields: [\n {code: 'a', value: 'kausijulkaisut'},\n {code: '2', value: 'yso/eng'}\n ]\n }\n ]\n });\n\n const recordValid655FinNo2 = new MarcRecord({\n leader: '',\n fields: [\n {\n tag: '655',\n ind1: ' ',\n ind2: '7',\n subfields: [\n {code: 'a', value: 'vironkielinen kirjallisuus'},\n {code: '2', value: 'local'}\n ]\n }\n ]\n });\n\n const recordValid655EngYes = new MarcRecord({\n leader: '',\n fields: [\n {\n tag: '655',\n ind1: ' ',\n ind2: '7',\n subfields: [\n {code: 'a', value: 'Bird\\'s-eye views'},\n {code: 'y', value: '1874.'},\n {code: '2', value: 'gmgpc'}\n ]\n }\n ]\n });\n\n const recordValid655EngYesNoControl = new MarcRecord({\n leader: '',\n fields: [\n {\n tag: '655',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: 'Diaries.'}]\n }\n ]\n });\n\n const recordValid656FinNo = new MarcRecord({\n leader: '',\n fields: [\n {\n tag: '656',\n ind1: ' ',\n ind2: '7',\n subfields: [\n {code: 'a', value: 'kuvaamataidonopettajat'},\n {code: '2', value: 'slm/eng'}\n ]\n }\n ]\n });\n\n const recordValid657EngYes = new MarcRecord({\n leader: '',\n fields: [\n {\n tag: '657',\n ind1: ' ',\n ind2: '7',\n subfields: [\n {code: 'a', value: 'Personnel benefits management'},\n {code: 'x', value: 'Vital statistics'},\n {code: 'z', value: 'Love Canal, New York.'},\n {code: '2', value: 'New York State Management Functions Index'}\n ]\n }\n ]\n });\n\n const recordValid658EngYes = new MarcRecord({\n leader: '',\n fields: [\n {\n tag: '658',\n ind1: ' ',\n ind2: ' ',\n subfields: [\n {code: 'a', value: 'Math manipulatives'},\n {code: 'd', value: 'highly correlated.'},\n {code: '2', value: '[source code]'}\n ]\n }\n ]\n });\n\n const recordValid662EngYes = new MarcRecord({\n leader: '',\n fields: [\n {\n tag: '662',\n ind1: ' ',\n ind2: ' ',\n subfields: [\n {code: 'a', value: 'Antarctica.'},\n {code: '2', value: 'lcsh/naf'}\n ]\n }\n ]\n });\n\n it('Finds record valid - 655 Finnish, no punc $a', async () => {\n const validator = await validatorFactory();\n const result = await validator.validate(recordValid655FinNo);\n assert.equal(result.valid, true);\n });\n\n it('Finds record valid - 655 Finnish, without punc', async () => {\n const validator = await validatorFactory();\n const result = await validator.validate(recordValid655FinNo2);\n assert.equal(result.valid, true);\n });\n\n it('Finds record valid - 655 English, with punc $y', async () => {\n const validator = await validatorFactory();\n const result = await validator.validate(recordValid655EngYes);\n assert.equal(result.valid, true);\n });\n\n it('Finds record valid - 655 English, with punc $a (no control)', async () => {\n const validator = await validatorFactory();\n const result = await validator.validate(recordValid655EngYesNoControl);\n assert.equal(result.valid, true);\n });\n\n it('Finds record valid - 656 Finnish, without punc $a', async () => {\n const validator = await validatorFactory();\n const result = await validator.validate(recordValid656FinNo);\n assert.equal(result.valid, true);\n });\n\n it('Finds record valid - 657 English, with punc $z', async () => {\n const validator = await validatorFactory();\n const result = await validator.validate(recordValid657EngYes);\n assert.equal(result.valid, true);\n });\n\n it('Finds record valid - 658 English, with punc $d', async () => {\n const validator = await validatorFactory();\n const result = await validator.validate(recordValid658EngYes);\n assert.equal(result.valid, true);\n });\n\n it('Finds record valid - 662 English, with punc $a', async () => {\n const validator = await validatorFactory();\n const result = await validator.validate(recordValid662EngYes);\n assert.equal(result.valid, true);\n });\n\n // Invalid tests\n const recordInvalid655FinYes = new MarcRecord({\n leader: '',\n fields: [\n {\n tag: '655',\n ind1: ' ',\n ind2: '7',\n subfields: [\n {code: 'a', value: 'kausijulkaisut.'},\n {code: '2', value: 'yso/eng'}\n ]\n }\n ]\n });\n\n const recordInvalid655FinYes2 = new MarcRecord({\n leader: '',\n fields: [\n {\n tag: '655',\n ind1: ' ',\n ind2: '7',\n subfields: [\n {code: 'a', value: 'vironkielinen kirjallisuus.'},\n {code: '2', value: 'local'}\n ]\n }\n ]\n });\n\n const recordInvalid655EngNo = new MarcRecord({\n leader: '',\n fields: [\n {\n tag: '655',\n ind1: ' ',\n ind2: '7',\n subfields: [\n {code: 'a', value: 'Bird\\'s-eye views'},\n {code: 'y', value: '1874'},\n {code: '2', value: 'gmgpc'}\n ]\n }\n ]\n });\n\n const recordInvalid655EngNoNoControl = new MarcRecord({\n leader: '',\n fields: [\n {\n tag: '655',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: 'Diaries'}]\n }\n ]\n });\n\n const recordInvalid656FinYes = new MarcRecord({\n leader: '',\n fields: [\n {\n tag: '656',\n ind1: ' ',\n ind2: '7',\n subfields: [\n {code: 'a', value: 'kuvaamataidonopettajat.'},\n {code: '2', value: 'slm/eng'}\n ]\n }\n ]\n });\n\n const recordInvalid657EngNo = new MarcRecord({\n leader: '',\n fields: [\n {\n tag: '657',\n ind1: ' ',\n ind2: '7',\n subfields: [\n {code: 'a', value: 'Personnel benefits management'},\n {code: 'x', value: 'Vital statistics'},\n {code: 'z', value: 'Love Canal, New York'},\n {code: '2', value: 'New York State Management Functions Index'}\n ]\n }\n ]\n });\n\n const recordInvalid658EngNo = new MarcRecord({\n leader: '',\n fields: [\n {\n tag: '658',\n ind1: ' ',\n ind2: ' ',\n subfields: [\n {code: 'a', value: 'Math manipulatives'},\n {code: 'd', value: 'highly correlated'},\n {code: '2', value: '[source code]'}\n ]\n }\n ]\n });\n\n const recordInvalid662EngNo = new MarcRecord({\n leader: '',\n fields: [\n {\n tag: '662',\n ind1: ' ',\n ind2: ' ',\n subfields: [\n {code: 'a', value: 'Antarctica'},\n {code: '2', value: 'lcsh/naf'}\n ]\n }\n ]\n });\n\n it('Finds record invalid - 655 Finnish, punc $a', async () => {\n const validator = await validatorFactory();\n const result = await validator.validate(recordInvalid655FinYes);\n assert.deepEqual(result, {\n message: ['Field 655 has unwanted ending punctuation \\'.\\''],\n valid: false\n });\n });\n\n it('Finds record invalid - 655 Finnish, with punc', async () => {\n const validator = await validatorFactory();\n const result = await validator.validate(recordInvalid655FinYes2);\n assert.deepEqual(result, {\n message: ['Field 655 has unwanted ending punctuation \\'.\\''],\n valid: false\n });\n });\n\n it('Finds record invalid - 655 !Finnish, without punc $y', async () => {\n const validator = await validatorFactory();\n const result = await validator.validate(recordInvalid655EngNo);\n assert.deepEqual(result, {\n message: ['Field 655 requires ending punctuation, ends in \\'4\\''],\n valid: false\n });\n });\n\n it('Finds record invalid - 655 !Finnish, without punc $a (no control)', async () => {\n const validator = await validatorFactory();\n const result = await validator.validate(recordInvalid655EngNoNoControl);\n assert.deepEqual(result, {\n message: ['Field 655 requires ending punctuation, ends in \\'s\\''],\n valid: false\n });\n });\n\n it('Finds record invalid - 656 Finnish, with punc $a', async () => {\n const validator = await validatorFactory();\n const result = await validator.validate(recordInvalid656FinYes);\n assert.deepEqual(result, {\n message: ['Field 656 has unwanted ending punctuation \\'.\\''],\n valid: false\n });\n });\n\n it('Finds record invalid - 657 !Finnish, without punc $z', async () => {\n const validator = await validatorFactory();\n const result = await validator.validate(recordInvalid657EngNo);\n assert.deepEqual(result, {\n message: ['Field 657 requires ending punctuation, ends in \\'k\\''],\n valid: false\n });\n });\n\n it('Finds record invalid - 658 !Finnish, without punc $d', async () => {\n const validator = await validatorFactory();\n const result = await validator.validate(recordInvalid658EngNo);\n assert.deepEqual(result, {\n message: ['Field 658 requires ending punctuation, ends in \\'d\\''],\n valid: false\n });\n });\n\n it('Finds record invalid - 662 !Finnish, without punc $a', async () => {\n const validator = await validatorFactory();\n const result = await validator.validate(recordInvalid662EngNo);\n assert.deepEqual(result, {\n message: ['Field 662 requires ending punctuation, ends in \\'a\\''],\n valid: false\n });\n });\n\n // Fix tests; invalid->valid\n it('Repairs the invalid record - 655 Finnish, remove punc $a', async () => {\n const validator = await validatorFactory();\n const result = await validator.fix(recordInvalid655FinYes);\n assert.equal(recordInvalid655FinYes.equalsTo(recordValid655FinNo), true);\n assert.deepEqual(result, {\n message: ['Field 655 has unwanted ending punctuation \\'.\\''],\n fix: ['Field 655 - Removed punctuation from $a'],\n valid: false\n });\n });\n\n it('Repairs the invalid record - 655 Finnish, removes punc $a 2', async () => {\n const validator = await validatorFactory();\n const result = await validator.fix(recordInvalid655FinYes2);\n assert.equal(recordInvalid655FinYes2.equalsTo(recordValid655FinNo2), true);\n assert.deepEqual(result, {\n message: ['Field 655 has unwanted ending punctuation \\'.\\''],\n fix: ['Field 655 - Removed punctuation from $a'],\n valid: false\n });\n });\n\n it('Repairs the invalid record - 655 !Finnish, add punc $y', async () => {\n const validator = await validatorFactory();\n const result = await validator.fix(recordInvalid655EngNo);\n assert.equal(recordInvalid655EngNo.equalsTo(recordValid655EngYes), true);\n assert.deepEqual(result, {\n message: ['Field 655 requires ending punctuation, ends in \\'4\\''],\n fix: ['Field 655 - Added punctuation to $y'],\n valid: false\n });\n });\n\n it('Repairs the invalid record - 655 !Finnish, add punc $a (no control)', async () => {\n const validator = await validatorFactory();\n const result = await validator.fix(recordInvalid655EngNoNoControl);\n assert.equal(recordInvalid655EngNoNoControl.equalsTo(recordValid655EngYesNoControl), true);\n assert.deepEqual(result, {\n message: ['Field 655 requires ending punctuation, ends in \\'s\\''],\n fix: ['Field 655 - Added punctuation to $a'],\n valid: false\n });\n });\n\n it('Repairs the invalid record - 656 Finnish, remove punc $a', async () => {\n const validator = await validatorFactory();\n const result = await validator.fix(recordInvalid656FinYes);\n assert.equal(recordInvalid656FinYes.equalsTo(recordValid656FinNo), true);\n assert.deepEqual(result, {\n message: ['Field 656 has unwanted ending punctuation \\'.\\''],\n fix: ['Field 656 - Removed punctuation from $a'],\n valid: false\n });\n });\n\n it('Repairs the invalid record - 657 !Finnish, add punc $z', async () => {\n const validator = await validatorFactory();\n const result = await validator.fix(recordInvalid657EngNo);\n assert.equal(recordInvalid657EngNo.equalsTo(recordValid657EngYes), true);\n assert.deepEqual(result, {\n message: ['Field 657 requires ending punctuation, ends in \\'k\\''],\n fix: ['Field 657 - Added punctuation to $z'],\n valid: false\n });\n });\n\n it('Repairs the invalid record - 658 !Finnish, add punc $d', async () => {\n const validator = await validatorFactory();\n const result = await validator.fix(recordInvalid658EngNo);\n assert.equal(recordInvalid658EngNo.equalsTo(recordValid658EngYes), true);\n assert.deepEqual(result, {\n message: ['Field 658 requires ending punctuation, ends in \\'d\\''],\n fix: ['Field 658 - Added punctuation to $d'],\n valid: false\n });\n });\n\n it('Repairs the invalid record - 662 !Finnish, add punc $a', async () => {\n const validator = await validatorFactory();\n const result = await validator.fix(recordInvalid662EngNo);\n assert.equal(recordInvalid662EngNo.equalsTo(recordValid662EngYes), true);\n assert.deepEqual(result, {\n message: ['Field 662 requires ending punctuation, ends in \\'a\\''],\n fix: ['Field 662 - Added punctuation to $a'],\n valid: false\n });\n });\n });\n\n // \"760-787 KYLL\u00C4 osakent\u00E4n $a j\u00E4lkeen, EI muiden osakenttien j\u00E4lkeen\" (kuten 567)\n // Only if last subfield $a\n describe('#760-787 TRUE - After subfield $a, FALSE after others', () => {\n // Valid tests\n const recordValid = new MarcRecord({\n leader: '',\n fields: [\n {\n tag: '760',\n ind1: ' ',\n ind2: ' ',\n subfields: [\n {code: 'a', value: 'Mellor, Alec.'},\n {code: 't', value: 'Strange masonic stories'},\n {code: 'e', value: 'eng'}\n ]\n }\n ]\n });\n\n const recordValidOnlyA = new MarcRecord({\n leader: '',\n fields: [\n {\n tag: '760',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: 'Mellor, Alec.'}]\n }\n ]\n });\n\n it('Finds record valid - Punc $a, but following fields, $e no punc (last)', async () => {\n const validator = await validatorFactory();\n const result = await validator.validate(recordValid);\n assert.equal(result.valid, true);\n });\n\n it('Finds record valid - Punc $a (only)', async () => {\n const validator = await validatorFactory();\n const result = await validator.validate(recordValidOnlyA);\n assert.equal(result.valid, true);\n });\n\n // Invalid tests\n const recordInvalid = new MarcRecord({\n leader: '',\n fields: [\n {\n tag: '760',\n ind1: ' ',\n ind2: ' ',\n subfields: [\n {code: 'a', value: 'Mellor, Alec.'},\n {code: 't', value: 'Strange masonic stories'},\n {code: 'e', value: 'eng.'}\n ]\n }\n ]\n });\n\n const recordInvalidOnlyA = new MarcRecord({\n leader: '',\n fields: [\n {\n tag: '760',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: 'Mellor, Alec'}]\n }\n ]\n });\n\n it('Finds record invalid - Punc $e (language field, strict)', async () => {\n const validator = await validatorFactory();\n const result = await validator.validate(recordInvalid);\n assert.deepEqual(result, {\n message: ['Field 760 has unwanted ending punctuation \\'.\\''],\n valid: false\n });\n });\n\n it('Finds record invalid - No punc $a (only)', async () => {\n const validator = await validatorFactory();\n const result = await validator.validate(recordInvalidOnlyA);\n assert.deepEqual(result, {\n message: ['Field 760 requires ending punctuation, ends in \\'c\\''],\n valid: false\n });\n });\n\n // Fix tests; invalid->valid\n it('Repairs the invalid record - Remove punc $e (language field, strict)', async () => {\n const validator = await validatorFactory();\n const result = await validator.fix(recordInvalid);\n assert.equal(recordInvalid.equalsTo(recordValid), true);\n assert.deepEqual(result, {\n message: ['Field 760 has unwanted ending punctuation \\'.\\''],\n fix: ['Field 760 - Removed punctuation from $e'],\n valid: false\n });\n });\n\n it('Repairs the invalid record - Add punc $a (only)', async () => {\n const validator = await validatorFactory();\n const result = await validator.fix(recordInvalidOnlyA);\n assert.equal(recordInvalidOnlyA.equalsTo(recordValidOnlyA), true);\n assert.deepEqual(result, {\n message: ['Field 760 requires ending punctuation, ends in \\'c\\''],\n fix: ['Field 760 - Added punctuation to $a'],\n valid: false\n });\n });\n });\n\n // \"`880`-kentt\u00E4: https://www.kansalliskirjasto.fi/extra/marc21/bib/841-88X.htm#880 Eli t\u00E4\u00E4 on se Loppupisteohjeen `Samoin kuin vastaavat kent\u00E4t` -keissi\n // Spex on siin\u00E4, mutta lyhk\u00E4sesti: `880`-kent\u00E4ss\u00E4 on muiden kenttien translitteroidut versiot (Data eri kirjaimistolla). 880-kent\u00E4n osakent\u00E4st\u00E4 `6` selvi\u00E4\u00E4 mihin kentt\u00E4\u00E4 se linkkaa.\"\n // 880 Samoin kuin vastaavat kent\u00E4t - Siis tarkistetaan kontrollikent\u00E4n $6 s\u00E4\u00E4nn\u00F6n\n describe('#880 - Like linked fields', () => {\n // Valid tests\n const recordValidSimple = new MarcRecord({\n leader: '',\n fields: [\n {\n tag: '880',\n ind1: ' ',\n ind2: ' ',\n subfields: [\n {code: 'a', value: '\u5E73\u7530 \u7BE4\u80E4'},\n {code: 'b', value: '1776-1843.'},\n {code: '6', value: '100-01/$1'} // Tag 100 has value TRUE -> last data subfield should have punc\n ]\n }\n ]\n });\n\n const recordValidComplex = new MarcRecord({\n leader: '',\n fields: [\n {\n tag: '880',\n ind1: ' ',\n ind2: ' ',\n subfields: [\n {code: 'b', value: '\u05D9\u05D3\u05D9\u05E2\u05D5\u05EA \u05D0\u05D7\u05E8\u05D5\u05E0\u05D5\u05EA'},\n {code: 'b', value: '\u05E1\u05E4\u05E8\u05D9 \u05D7\u05DE\u05D3'},\n {code: 'c', value: '2006.'},\n {code: '6', value: '260-02/(2/r \u2021a \u05EA\u05DC-\u05D0\u05D1\u05D9\u05D1'} // Tag 260 has value TRUE -> last data subfield should have punc\n ]\n }\n ]\n });\n\n it('Finds record valid - Punc $b', async () => {\n const validator = await validatorFactory();\n const result = await validator.validate(recordValidSimple);\n assert.equal(result.valid, true);\n });\n\n it('Finds record valid - Punc $c', async () => {\n const validator = await validatorFactory();\n const result = await validator.validate(recordValidComplex);\n assert.equal(result.valid, true);\n });\n\n // Invalid tests\n const recordInvalidSimple = new MarcRecord({\n leader: '',\n fields: [\n {\n tag: '880',\n ind1: ' ',\n ind2: ' ',\n subfields: [\n {code: 'a', value: '\u5E73\u7530 \u7BE4\u80E4'},\n {code: 'b', value: '1776-1843'},\n {code: '6', value: '100-01/$1'} // Tag 100 has value TRUE -> last data subfield should have punc\n ]\n }\n ]\n });\n\n const recordInvalidComplex = new MarcRecord({\n leader: '',\n fields: [\n {\n tag: '880',\n ind1: ' ',\n ind2: ' ',\n subfields: [\n {code: 'b', value: '\u05D9\u05D3\u05D9\u05E2\u05D5\u05EA \u05D0\u05D7\u05E8\u05D5\u05E0\u05D5\u05EA'},\n {code: 'b', value: '\u05E1\u05E4\u05E8\u05D9 \u05D7\u05DE\u05D3'},\n {code: 'c', value: '2006'},\n {code: '6', value: '260-02/(2/r \u2021a \u05EA\u05DC-\u05D0\u05D1\u05D9\u05D1'} // Tag 260 has value TRUE -> last data subfield should have punc\n ]\n }\n ]\n });\n\n it('Finds record invalid - No punc $b', async () => {\n const validator = await validatorFactory();\n const result = await validator.validate(recordInvalidSimple);\n assert.deepEqual(result, {\n message: ['Field 880 requires ending punctuation, ends in \\'3\\''],\n valid: false\n });\n });\n\n it('Finds record invalid - No punc $c', async () => {\n const validator = await validatorFactory();\n const result = await validator.validate(recordInvalidComplex);\n assert.deepEqual(result, {\n message: ['Field 880 requires ending punctuation, ends in \\'6\\''],\n valid: false\n });\n });\n\n // Fix tests; invalid->valid\n it('Repairs the invalid record - Add punc $b', async () => {\n const validator = await validatorFactory();\n const result = await validator.fix(recordInvalidSimple);\n assert.equal(recordInvalidSimple.equalsTo(recordValidSimple), true);\n assert.deepEqual(result, {\n message: ['Field 880 requires ending punctuation, ends in \\'3\\''],\n fix: ['Field 880 - Added punctuation to $b'],\n valid: false\n });\n });\n\n it('Repairs the invalid record - Add punc $c', async () => {\n const validator = await validatorFactory();\n const result = await validator.fix(recordInvalidComplex);\n assert.equal(recordInvalidComplex.equalsTo(recordValidComplex), true);\n assert.deepEqual(result, {\n message: ['Field 880 requires ending punctuation, ends in \\'6\\''],\n fix: ['Field 880 - Added punctuation to $c'],\n valid: false\n });\n });\n });\n });\n});\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import assert from 'node:assert';\nimport {MarcRecord} from '@natlibfi/marc-record';\nimport validatorFactory from './ending-punctuation.js';\nimport {describe, it} from 'node:test';\n\n\n\n// Factory validation\ndescribe('ending-punctuation', () => {\n // Indicators and subfields validation\n describe('#validate: Indicators and subfields', () => {\n const recordValid = new MarcRecord({\n leader: '',\n fields: [\n {\n tag: '245',\n ind1: ' ',\n ind2: ' ',\n subfields: [\n {code: 'a', value: 'El\u00E4m\u00E4ni ja tutkimusretkeni /'},\n {code: 'c', value: 'Roald Amundsen ; suomentanut Sulo Veikko Pekkola.'},\n {code: '6', value: 'FOO'}\n ]\n }, { // Hackily putting 2nd 245 here\n tag: '245',\n ind1: '0',\n ind2: '4',\n subfields: [\n {code: 'a', value: 'The Disaster /'},\n {code: 'c', value: '(J.L.).'}\n ]\n }, {\n tag: '337', // Range 336-338\n ind1: ' ',\n ind2: ' ',\n subfields: [\n {code: 'a', value: 'k\u00E4ytett\u00E4viss\u00E4 ilman laitetta'},\n {code: 'b', value: 'n'},\n {code: '2', value: 'rdamedia'}\n ]\n }, {\n tag: '500', // Range 500-509\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: 'FOO (Bar).'}]\n }, {\n tag: '500', // Range 500-509\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: '\"Lorum ipsum.\"'}]\n },\n {\n tag: '500', // Range 500-509\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: 'Foo \"Bar\".'}]\n }\n ]\n });\n\n const recordInvalid = new MarcRecord({\n leader: '',\n fields: [\n {\n tag: '245',\n ind1: ' ',\n ind2: ' ',\n subfields: [\n {code: 'a', value: 'El\u00E4m\u00E4ni ja tutkimusretkeni /'},\n {code: 'c', value: 'Roald Amundsen ; suomentanut Sulo Veikko Pekkola'},\n {code: '6', value: 'FOO'} // NV: not changing this now, but this is wrong: $6 is *always* the first subfield. Also , the value is not valid for $6...\n ]\n }, { // Hackily putting 2nd 245 here\n tag: '245',\n ind1: '0',\n ind2: '4',\n subfields: [\n {code: 'a', value: 'The Disaster /'},\n {code: 'c', value: '(J.L.)'}\n ]\n }, {\n tag: '337',\n ind1: ' ',\n ind2: ' ',\n subfields: [\n {code: 'a', value: 'k\u00E4ytett\u00E4viss\u00E4 ilman laitetta'},\n {code: 'b', value: 'n.'}, // This can be abbreviation -> does not generate error (NV: huh?!?)\n {code: '2', value: 'rdamedia'}\n ]\n }, {\n tag: '500',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: 'FOO (Bar)'}]\n }, {\n tag: '500', // Range 500-509\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: '\"Lorum ipsum.\".'}]\n },\n {\n tag: '500', // Range 500-509\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: 'Foo \"Bar\"'}]\n }\n ]\n });\n const recordBroken = new MarcRecord({\n leader: '',\n fields: [\n {\n tag: '245',\n ind1: ' ',\n ind2: ' ',\n subfields: [\n {code: 'a', value: 'El\u00E4m\u00E4ni ja tutkimusretkeni /'},\n {code: 'c', value: 'Roald Amundsen ; suomentanut Sulo Veikko Pekkola'},\n {code: '6', value: 'FOO'}\n ]\n }, { // Hackily putting 2nd 245 here\n tag: '245',\n ind1: '0',\n ind2: '4',\n subfields: [\n {code: 'a', value: 'The Disaster /'},\n {code: 'c', value: '(J.L.)'}\n ]\n }, {\n tag: '337',\n ind1: ' ',\n ind2: ' ',\n subfields: [\n {code: 'a', value: 'k\u00E4ytett\u00E4viss\u00E4 ilman laitetta'},\n {code: 'b', value: 'n'}, // Dot removed from possible abbreviation as it cannot be removed in fixing (NV: huh?)\n {code: '2', value: 'rdamedia'}\n ]\n }, {\n tag: '500',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: 'FOO (Bar)'}]\n }, {\n tag: '500', // Range 500-509\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: '\"Lorum ipsum.\".'}]\n },\n {\n tag: '500', // Range 500-509\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: 'Foo \"Bar\"'}]\n }\n ]\n });\n\n it('Finds the record valid', async () => {\n const validator = await validatorFactory();\n const result = await validator.validate(recordValid);\n //console.info(JSON.stringify(result));\n assert.equal(result.valid, true);\n });\n\n it('Finds the record invalid', async () => {\n const validator = await validatorFactory();\n const result = await validator.validate(recordInvalid);\n assert.deepEqual(result, {\n message: ['Field 245 requires ending punctuation, ends in \\'a\\'', 'Field 245 requires ending punctuation, ends in \\')\\'', 'Field 500 requires ending punctuation, ends in \\')\\'', 'Field 500 has an extra dot in \\'.\".\\'', 'Field 500 requires ending punctuation, ends in \\'\"\\''],\n valid: false\n });\n });\n\n it('Repairs the invalid record', async () => {\n const validator = await validatorFactory();\n const result = await validator.fix(recordBroken);\n\n assert.deepEqual(result, {\n message: ['Field 245 requires ending punctuation, ends in \\'a\\'', 'Field 245 requires ending punctuation, ends in \\')\\'', 'Field 500 requires ending punctuation, ends in \\')\\'', 'Field 500 has an extra dot in \\'.\".\\'', 'Field 500 requires ending punctuation, ends in \\'\"\\''],\n fix: ['Field 245 - Added punctuation to $c', 'Field 245 - Added punctuation to $c', 'Field 500 - Added punctuation to $a', 'Field 500 - Removed \\'.\\' after \\'.\"\\'', 'Field 500 - Added punctuation to $a'],\n valid: false\n });\n assert.equal(recordBroken.equalsTo(recordValid), true);\n });\n });\n\n describe('#specials', () => {\n // \"036 KYLL\u00C4 vain osakent\u00E4n $b j\u00E4lkeen\"\n // Can have subfields a and b, dot only after b\n describe('#036 TRUE - only after subfield $b', () => {\n // Valid tests\n const recordValid = new MarcRecord({\n leader: '',\n fields: [\n {\n tag: '036',\n ind1: ' ',\n ind2: ' ',\n subfields: [\n {code: 'a', value: 'CNRS 84115'},\n {code: 'b', value: 'Centre national de la recherche scientifique.'}\n ]\n }\n ]\n });\n\n const recordValidOnlyA = new MarcRecord({\n leader: '',\n fields: [\n {\n tag: '036',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: 'CNRS 84115'}]\n }\n ]\n });\n\n it('Finds record valid - Punc $b', async () => {\n const validator = await validatorFactory();\n const result = await validator.validate(recordValid);\n assert.equal(result.valid, true);\n });\n\n it('Finds record valid - Only $a without punc', async () => {\n const validator = await validatorFactory();\n const result = await validator.validate(recordValidOnlyA);\n assert.equal(result.valid, true);\n });\n\n // Invalid tests\n const recordInvalid = new MarcRecord({\n leader: '',\n fields: [\n {\n tag: '036',\n ind1: ' ',\n ind2: ' ',\n subfields: [\n {code: 'a', value: 'CNRS 84115'},\n {code: 'b', value: 'Centre national de la recherche scientifique'}\n ]\n }\n ]\n });\n\n const recordInvalidOnlyA = new MarcRecord({\n leader: '',\n fields: [\n {\n tag: '036',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: 'CNRS 84115.'}] // $a is register number, no change for abbreviation\n }\n ]\n });\n\n it('Finds record invalid - No punc $b', async () => {\n const validator = await validatorFactory();\n const result = await validator.validate(recordInvalid);\n assert.deepEqual(result, {\n message: ['Field 036 requires ending punctuation, ends in \\'e\\''],\n valid: false\n });\n });\n\n it('Finds record invalid - Only $a with punc', async () => {\n const validator = await validatorFactory();\n const result = await validator.validate(recordInvalidOnlyA);\n assert.deepEqual(result, {\n message: ['Field 036 has unwanted ending punctuation \\'.\\''],\n valid: false\n });\n });\n\n // Fix tests; invalid->valid\n it('Repairs the invalid record - Add punc $b', async () => {\n const validator = await validatorFactory();\n const result = await validator.fix(recordInvalid);\n assert.equal(recordInvalid.equalsTo(recordValid), true);\n assert.deepEqual(result, {\n message: ['Field 036 requires ending punctuation, ends in \\'e\\''],\n fix: ['Field 036 - Added punctuation to $b'],\n valid: false\n });\n });\n\n it('Repairs the invalid record - Removes punc $a (register)', async () => {\n const validator = await validatorFactory();\n const result = await validator.fix(recordInvalidOnlyA);\n assert.equal(recordInvalidOnlyA.equalsTo(recordValidOnlyA), true);\n assert.deepEqual(result, {\n message: ['Field 036 has unwanted ending punctuation \\'.\\''],\n fix: ['Field 036 - Removed punctuation from $a'],\n valid: false\n });\n });\n });\n\n // \"242 KYLL\u00C4 Jos viimeinen osakentt\u00E4 on $y, piste on ennen sit\u00E4\" - Eli siis ei kent\u00E4ss\u00E4 y (ennen sit\u00E4)\n describe('#242 TRUE - if last subfield $y, punc before it', () => {\n // Valid tests\n const recordValidOnlyA = new MarcRecord({\n leader: '',\n fields: [\n {\n tag: '242',\n ind1: ' ',\n ind2: ' ',\n subfields: [\n {code: 'a', value: 'World of art.'},\n {code: 'y', value: 'eng'}\n ]\n }\n ]\n });\n\n const recordValidMultiple = new MarcRecord({\n leader: '',\n fields: [\n {\n tag: '242',\n ind1: ' ',\n ind2: ' ',\n subfields: [\n {code: 'a', value: 'Annals of chemistry.'},\n {code: 'n', value: 'Series C,'},\n {code: 'p', value: 'Organic chemistry and biochemistry.'},\n {code: 'y', value: 'eng'}\n ]\n }\n ]\n });\n\n // \"Suositellaan k\u00E4ytett\u00E4v\u00E4ksi my\u00F6s osakentt\u00E4\u00E4 \u2021y (k\u00E4\u00E4nn\u00F6ksen kielikoodi).\" https://www.kiwi.fi/pages/viewpage.action?pageId=51282044\n const recordValidWithoutY = new MarcRecord({\n leader: '',\n fields: [\n {\n tag: '242',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: 'World of art.'}]\n }\n ]\n });\n\n it('Finds record valid - Punc $a', async () => {\n const validator = await validatorFactory();\n const result = await validator.validate(recordValidOnlyA);\n assert.equal(result.valid, true);\n });\n\n it('Finds record valid - Punc $p', async () => {\n const validator = await validatorFactory();\n const result = await validator.validate(recordValidMultiple);\n assert.equal(result.valid, true);\n });\n\n it('Finds record valid - Punc $a without $y', async () => {\n const validator = await validatorFactory();\n const result = await validator.validate(recordValidWithoutY);\n assert.equal(result.valid, true);\n });\n\n // Invalid tests\n const recordInvalidOnlyAMissingA = new MarcRecord({\n leader: '',\n fields: [\n {\n tag: '242',\n ind1: ' ',\n ind2: ' ',\n subfields: [\n {code: 'a', value: 'World of art'},\n {code: 'y', value: 'eng'}\n ]\n }\n ]\n });\n\n const recordInvalidOnlyAPuncY = new MarcRecord({\n leader: '',\n fields: [\n {\n tag: '242',\n ind1: ' ',\n ind2: ' ',\n subfields: [\n {code: 'a', value: 'World of art.'},\n {code: 'y', value: 'eng.'} // $y is also checked as rule is explicit\n ]\n }\n ]\n });\n\n const recordInvalidOnlyAMissingAPuncY = new MarcRecord({\n leader: '',\n fields: [\n {\n tag: '242',\n ind1: ' ',\n ind2: ' ',\n subfields: [\n {code: 'a', value: 'World of art'},\n {code: 'y', value: 'eng.'} // $y is also checked as rule is explicit\n ]\n }\n ]\n });\n\n const recordValidMultipleMissingP = new MarcRecord({\n leader: '',\n fields: [\n {\n tag: '242',\n ind1: ' ',\n ind2: ' ',\n subfields: [\n {code: 'a', value: 'Annals of chemistry.'},\n {code: 'n', value: 'Series C,'},\n {code: 'p', value: 'Organic chemistry and biochemistry'},\n {code: 'y', value: 'eng'}\n ]\n }\n ]\n });\n\n // \"Suositellaan k\u00E4ytett\u00E4v\u00E4ksi my\u00F6s osakentt\u00E4\u00E4 \u2021y (k\u00E4\u00E4nn\u00F6ksen kielikoodi).\" https://www.kiwi.fi/pages/viewpage.action?pageId=51282044\n const recordValidWithoutYMissingA = new MarcRecord({\n leader: '',\n fields: [\n {\n tag: '242',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: 'World of art'}]\n }\n ]\n });\n\n it('Finds record invalid - No punc at $a (only before $y)', async () => {\n const validator = await validatorFactory();\n const result = await validator.validate(recordInvalidOnlyAMissingA);\n assert.deepEqual(result, {\n message: ['Field 242 requires ending punctuation, ends in \\'t\\''],\n valid: false\n });\n });\n\n it('Finds record invalid - Punc at $y (Language field)', async () => { // $y is also checked as rule is explicit\n const validator = await validatorFactory();\n const result = await validator.validate(recordInvalidOnlyAPuncY);\n assert.deepEqual(result, {\n message: ['Field 242 has unwanted ending punctuation \\'.\\''],\n valid: false\n });\n });\n\n it('Finds record invalid - No punc at $a & punc $y', async () => { // $y is also checked as rule is explicit\n const validator = await validatorFactory();\n const result = await validator.validate(recordInvalidOnlyAMissingAPuncY);\n assert.deepEqual(result, {\n message: ['Field 242 has unwanted ending punctuation \\'.\\'', 'Field 242 requires ending punctuation, ends in \\'t\\''],\n valid: false\n });\n });\n\n it('Finds record invalid - No punc $p (last before $y)', async () => {\n const validator = await validatorFactory();\n const result = await validator.validate(recordValidMultipleMissingP);\n assert.deepEqual(result, {\n message: ['Field 242 requires ending punctuation, ends in \\'y\\''],\n valid: false\n });\n });\n\n it('Finds record invalid - No punc $a (only)', async () => {\n const validator = await validatorFactory();\n const result = await validator.validate(recordValidWithoutYMissingA);\n assert.deepEqual(result, {\n message: ['Field 242 requires ending punctuation, ends in \\'t\\''],\n valid: false\n });\n });\n\n // Fix tests; invalid->valid\n it('Repairs the invalid record - Add punc $a', async () => {\n const validator = await validatorFactory();\n const result = await validator.fix(recordInvalidOnlyAMissingA);\n assert.equal(recordInvalidOnlyAMissingA.equalsTo(recordValidOnlyA), true);\n assert.deepEqual(result, {\n message: ['Field 242 requires ending punctuation, ends in \\'t\\''],\n fix: ['Field 242 - Added punctuation to $a'],\n valid: false\n });\n });\n\n it('Repairs the invalid record - Remove punc $y (Language field)', async () => {\n const validator = await validatorFactory();\n const result = await validator.fix(recordInvalidOnlyAPuncY);\n assert.equal(recordInvalidOnlyAPuncY.equalsTo(recordValidOnlyA), true);\n assert.deepEqual(result, {\n message: ['Field 242 has unwanted ending punctuation \\'.\\''],\n fix: ['Field 242 - Removed punctuation from $y'],\n valid: false\n });\n });\n\n it('Repairs the invalid record - Add punc $a & remove punc $y (Language field)', async () => {\n const validator = await validatorFactory();\n const result = await validator.fix(recordInvalidOnlyAMissingAPuncY);\n assert.equal(recordInvalidOnlyAMissingAPuncY.equalsTo(recordValidOnlyA), true);\n assert.deepEqual(result, {\n message: ['Field 242 has unwanted ending punctuation \\'.\\'', 'Field 242 requires ending punctuation, ends in \\'t\\''],\n fix: ['Field 242 - Removed punctuation from $y', 'Field 242 - Added punctuation to $a'],\n valid: false\n });\n });\n\n it('Repairs the invalid record - Add punc $p', async () => {\n const validator = await validatorFactory();\n const result = await validator.fix(recordValidMultipleMissingP);\n assert.equal(recordValidMultipleMissingP.equalsTo(recordValidMultiple), true);\n assert.deepEqual(result, {\n message: ['Field 242 requires ending punctuation, ends in \\'y\\''],\n fix: ['Field 242 - Added punctuation to $p'],\n valid: false\n });\n });\n\n it('Repairs the invalid record - Add punc $a', async () => {\n const validator = await validatorFactory();\n const result = await validator.fix(recordValidWithoutYMissingA);\n assert.equal(recordValidWithoutYMissingA.equalsTo(recordValidWithoutY), true);\n assert.deepEqual(result, {\n message: ['Field 242 requires ending punctuation, ends in \\'t\\''],\n fix: ['Field 242 - Added punctuation to $a'],\n valid: false\n });\n });\n });\n\n // \"260 KYLL\u00C4 P\u00E4\u00E4s\u00E4\u00E4nt\u00F6: $a : $b, $c. Tarkista eri poikkeukset ja v\u00E4limerkitys MARC 21 Full -versiosta\"\n // Punc only if last subfield c\n describe('#260 TRUE - Punc only if last subfield c', () => {\n // Valid tests\n const recordValidEndC = new MarcRecord({\n leader: '',\n fields: [\n {\n tag: '260',\n ind1: ' ',\n ind2: ' ',\n subfields: [\n {code: 'a', value: 'Helsinki'},\n {code: 'b', value: 'Suomen atk-kustannus,'},\n {code: 'c', value: '1982.'}\n ]\n }\n ]\n });\n\n const recordValidEndG = new MarcRecord({\n leader: '',\n fields: [\n {\n tag: '260',\n ind1: ' ',\n ind2: ' ',\n subfields: [\n {code: 'a', value: 'London'},\n {code: 'b', value: 'Macmillan,'},\n {code: 'c', value: '1971'},\n {code: 'g', value: '(1973 printing)'}\n ]\n }\n ]\n });\n\n const recordValidEndB = new MarcRecord({\n leader: '',\n fields: [\n {\n tag: '260',\n ind1: ' ',\n ind2: ' ',\n subfields: [\n {code: '3', value: 'June 1993-'},\n {code: 'a', value: 'London'},\n {code: 'b', value: 'Elle'}\n ]\n }\n ]\n });\n\n it('Finds record valid - Punc $c', async () => {\n const validator = await validatorFactory();\n const result = await validator.validate(recordValidEndC);\n assert.equal(result.valid, true);\n });\n\n it('Finds record valid - Punc char $g (after $c)', async () => {\n const validator = await validatorFactory();\n const result = await validator.validate(recordValidEndG);\n assert.equal(result.valid, true);\n });\n\n it('Finds record valid - No punc $b', async () => {\n const validator = await validatorFactory();\n const result = await validator.validate(recordValidEndB);\n assert.equal(result.valid, true);\n });\n\n // Invalid tests\n const recordInvalidEndC = new MarcRecord({\n leader: '',\n fields: [\n {\n tag: '260',\n ind1: ' ',\n ind2: ' ',\n subfields: [\n {code: 'a', value: 'Helsinki'},\n {code: 'b', value: 'Suomen atk-kustannus,'},\n {code: 'c', value: '1982'}\n ]\n }\n ]\n });\n\n const recordInvalidEndGDouble = new MarcRecord({\n leader: '',\n fields: [\n {\n tag: '260',\n ind1: ' ',\n ind2: ' ',\n subfields: [\n {code: 'a', value: 'London'},\n {code: 'b', value: 'Macmillan,'},\n {code: 'c', value: '1971'},\n {code: 'g', value: '(1973 printing).'}\n ]\n }\n ]\n });\n\n it('Finds record invalid', async () => {\n const validator = await validatorFactory();\n const result = await validator.validate(recordInvalidEndC);\n assert.deepEqual(result, {\n message: ['Field 260 requires ending punctuation, ends in \\'2\\''],\n valid: false\n });\n });\n\n it('Finds record invalid', async () => {\n const validator = await validatorFactory();\n const result = await validator.validate(recordInvalidEndGDouble);\n assert.deepEqual(result, {\n message: ['Field 260 has an extra dot after \\')\\''],\n valid: false\n });\n });\n\n // Fix tests; invalid->valid\n it('Repairs the invalid record - Add punc $c', async () => {\n const validator = await validatorFactory();\n const result = await validator.fix(recordInvalidEndC);\n assert.equal(recordInvalidEndC.equalsTo(recordValidEndC), true);\n assert.deepEqual(result, {\n message: ['Field 260 requires ending punctuation, ends in \\'2\\''],\n fix: ['Field 260 - Added punctuation to $c'],\n valid: false\n });\n });\n\n it('Repairs the invalid record - Remove double punc $g', async () => {\n const validator = await validatorFactory();\n const result = await validator.fix(recordInvalidEndGDouble);\n assert.equal(recordInvalidEndGDouble.equalsTo(recordValidEndG), true);\n assert.deepEqual(result, {\n message: ['Field 260 has an extra dot after \\')\\''],\n fix: ['Field 260 - Removed dot after punctuation from $g'],\n valid: false\n });\n });\n });\n\n // 264-kentt\u00E4\u00E4n tulee loppupiste, JOS on k\u00E4ytetty osakentt\u00E4\u00E4 \u2021c tuotantoajan, julkaisuajan,\n // jakeluajan tai valmistusajan ilmaisemiseen (2. indikaattori = 0, 1, 2 tai 3) JA osakentt\u00E4 \u2021c\n // ei p\u00E4\u00E4ty hakasulkuun ']' tai tavuviivaan '-' tai kaarisulkuun ')' tai kysymysmerkkiin '?'\n\n // Copyright-vuoden kanssa ei k\u00E4ytet\u00E4 loppupistett\u00E4 (2. indikaattori = 4).\n\n // Esimerkit\n // 264 #0 \u2021a [Vantaa?] : \u2021b [Olli Kela], \u2021c [2011?]\n // 264 #1 \u2021a Helsinki : \u2021b Helsingin yliopisto, \u2021c 1992-\n // 264 #1 \u2021a Helsinki : \u2021b Helsingin yliopisto, \u2021c 1995-2006. \u2190 loppupiste\n // 264 #2 \u2021a Kouvola : \u2021b Nuorisovirasto\n // 264 #3 \u2021a Lahti : \u2021b Valtion monistuskeskus, \u2021c 1965. \u2190 loppupiste\n describe('#264 TRUE - If ind2 === 0, 1, 2 or 3, punc at the end', () => {\n // Valid tests\n const recordValidInd2v1 = new MarcRecord({\n leader: '',\n fields: [\n {\n tag: '264',\n ind1: '#',\n ind2: '1',\n subfields: [\n {code: 'a', value: 'Helsinki'},\n {code: 'b', value: 'Helsingin yliopisto'},\n {code: 'c', value: '1995-2006.'}\n ]\n }\n ]\n });\n\n const recordValidInd2v1Short = new MarcRecord({\n leader: '',\n fields: [\n {\n tag: '264',\n ind1: '#',\n ind2: '1',\n subfields: [\n {code: 'a', value: 'Helsinki'},\n {code: 'b', value: 'Helsingin yliopisto'},\n {code: 'c', value: '1995-'}\n ]\n }\n ]\n });\n\n const recordValidInd2v2WithoutC = new MarcRecord({\n leader: '',\n fields: [\n {\n tag: '264',\n ind1: '#',\n ind2: '2',\n subfields: [\n {code: 'a', value: 'Kouvola'},\n {code: 'b', value: 'Nuorisovirasto'}\n ]\n }\n ]\n });\n\n const recordValidCopyright = new MarcRecord({\n leader: '',\n fields: [\n {\n tag: '264',\n ind1: ' ',\n ind2: '4',\n subfields: [\n {code: 'a', value: 'Helsinki : '},\n {code: 'b', value: 'Suomen poliisikoirayhdistys.'},\n {code: 'c', value: '\u00A9 1974'}\n ]\n }\n ]\n });\n\n it('Finds record valid - Ind2 = 1, $c 1995-2006.', async () => {\n const validator = await validatorFactory();\n const result = await validator.validate(recordValidInd2v1);\n assert.equal(result.valid, true);\n });\n\n it('Finds record valid - Ind2 = 1, $c 1995-', async () => {\n const validator = await validatorFactory();\n const result = await validator.validate(recordValidInd2v1Short);\n assert.equal(result.valid, true);\n });\n\n it('Finds record valid - Ind2 = 2, no $c', async () => {\n const validator = await validatorFactory();\n const result = await validator.validate(recordValidInd2v2WithoutC);\n assert.equal(result.valid, true);\n });\n\n it('Finds record valid - Ind2 = 4, copyright', async () => {\n const validator = await validatorFactory();\n const result = await validator.validate(recordValidCopyright);\n assert.equal(result.valid, true);\n });\n\n const recordInvalidInd2v1 = new MarcRecord({\n leader: '',\n fields: [\n {\n tag: '264',\n ind1: '#',\n ind2: '1',\n subfields: [\n {code: 'a', value: 'Helsinki'},\n {code: 'b', value: 'Helsingin yliopisto'},\n {code: 'c', value: '1995-2006'}\n ]\n }\n ]\n });\n\n const recordInvalidCopyrightCExtra = new MarcRecord({\n leader: '',\n fields: [\n {\n tag: '264',\n ind1: ' ',\n ind2: '4',\n subfields: [\n {code: 'a', value: 'Helsinki : '},\n {code: 'b', value: 'Suomen poliisikoirayhdistys.'},\n {code: 'c', value: '\u00A9 1974.'}\n ]\n }\n ]\n });\n\n it('Finds record invalid - No punc $c', async () => {\n const validator = await validatorFactory();\n const result = await validator.validate(recordInvalidInd2v1);\n assert.deepEqual(result, {\n message: ['Field 264 requires ending punctuation, ends in \\'6\\''],\n valid: false\n });\n });\n\n it('Finds record invalid - Ind2 = 4, copyright, extra punc $c', async () => {\n const validator = await validatorFactory();\n const result = await validator.validate(recordInvalidCopyrightCExtra);\n assert.deepEqual(result, {\n message: ['Field 264 has unwanted ending punctuation \\'.\\''],\n valid: false\n });\n });\n\n // Fix tests; invalid->valid\n it('Repairs the invalid record - Add punc $c', async () => {\n const validator = await validatorFactory();\n const result = await validator.fix(recordInvalidInd2v1);\n assert.equal(recordInvalidInd2v1.equalsTo(recordValidInd2v1), true);\n assert.deepEqual(result, {\n message: ['Field 264 requires ending punctuation, ends in \\'6\\''],\n fix: ['Field 264 - Added punctuation to $c'],\n valid: false\n });\n });\n\n it('Repairs the invalid record - Remove punc $c ($c has \u00A9, should not have punc)', async () => {\n const validator = await validatorFactory();\n const result = await validator.fix(recordInvalidCopyrightCExtra);\n assert.equal(recordInvalidCopyrightCExtra.equalsTo(recordValidCopyright), true);\n assert.deepEqual(result, {\n message: ['Field 264 has unwanted ending punctuation \\'.\\''],\n fix: ['Field 264 - Removed punctuation from $c'],\n valid: false\n });\n });\n });\n\n // \"340 KYLL\u00C4 Vain joidenkin osakenttien j\u00E4lkeen. Tarkista osakent\u00E4t MARC 21 Full -versiosta\n // -b: Piste aina osakent\u00E4n loppuun\n // - a, d, e, f, h, i: Piste n\u00E4ist\u00E4 viimeisen osakent\u00E4n loppuun\"\n // This doesn't match spec at all, but these rules were provided (https://www.kansalliskirjasto.fi/extra/marc21/bib/3XX.htm#340)\n describe('#340 TRUE - Punc at $b always and to last of [$a, $d, $e, $f, $h, $i]', () => {\n // Valid tests\n const recordValidA = new MarcRecord({\n leader: '',\n fields: [\n {\n tag: '340',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: 'marble.'}]\n }\n ]\n });\n\n const recordValidAB = new MarcRecord({\n leader: '',\n fields: [\n {\n tag: '340',\n ind1: ' ',\n ind2: ' ',\n subfields: [\n {code: 'a', value: 'parchment.'}, // This punc doesn't match example: https://www.kansalliskirjasto.fi/extra/marc21/bib/3XX.htm#340\n {code: 'b', value: '20 cm. folded to 10 x 12 cm.'}\n ]\n }\n ]\n });\n\n const recordValidDD = new MarcRecord({\n leader: '',\n fields: [\n {\n tag: '340',\n ind1: ' ',\n ind2: ' ',\n subfields: [\n {code: 'd', value: 'handwritten'},\n {code: 'd', value: 'typed.'}\n ]\n }\n ]\n });\n\n const recordValidComplex = new MarcRecord({\n leader: '',\n fields: [\n {\n tag: '340',\n ind1: ' ',\n ind2: ' ',\n subfields: [\n {code: 'a', value: 'wove paper'},\n {code: 'c', value: 'ink'},\n {code: 'c', value: 'gouache'},\n {code: 'd', value: 'lithography'},\n {code: 'd', value: 'collage.'}, // This punc doesn't match example: https://www.kansalliskirjasto.fi/extra/marc21/bib/3XX.htm#340\n {code: 'g', value: 'polychrome'}\n ]\n }\n ]\n });\n\n const recordValidJ2 = new MarcRecord({\n leader: '',\n fields: [\n {\n tag: '340',\n ind1: ' ',\n ind2: ' ',\n subfields: [\n {code: 'j', value: 'original'},\n {code: '2', value: 'rda'}\n ]\n }\n ]\n });\n\n it('Finds record valid - Punc $a (only)', async () => {\n const validator = await validatorFactory();\n const result = await validator.validate(recordValidA);\n assert.equal(result.valid, true);\n });\n\n it('Finds record valid - Punc $a (last) & punc $b (mandatory)', async () => {\n const validator = await validatorFactory();\n const result = await validator.validate(recordValidAB);\n assert.equal(result.valid, true);\n });\n\n it('Finds record valid - Punc $d (last of two)', async () => {\n const validator = await validatorFactory();\n const result = await validator.validate(recordValidDD);\n assert.equal(result.valid, true);\n });\n\n it('Finds record valid - Punc $d (last of two) followed by $g', async () => {\n const validator = await validatorFactory();\n const result = await validator.validate(recordValidComplex);\n assert.equal(result.valid, true);\n });\n\n it('Finds record valid - No punc (not $b, nor from list)', async () => {\n const validator = await validatorFactory();\n const result = await validator.validate(recordValidJ2);\n assert.equal(result.valid, true);\n });\n\n // Invalid tests\n const recordInvalidA = new MarcRecord({\n leader: '',\n fields: [\n {\n tag: '340',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: 'marble'}]\n }\n ]\n });\n\n const recordInvalidAMissingB = new MarcRecord({\n leader: '',\n fields: [\n {\n tag: '340',\n ind1: ' ',\n ind2: ' ',\n subfields: [\n {code: 'a', value: 'parchment'}, // This punc doesn't match example: https://www.kansalliskirjasto.fi/extra/marc21/bib/3XX.htm#340\n {code: 'b', value: '20 cm. folded to 10 x 12 cm.'}\n ]\n }\n ]\n });\n\n const recordInvalidABMissing = new MarcRecord({\n leader: '',\n fields: [\n {\n tag: '340',\n ind1: ' ',\n ind2: ' ',\n subfields: [\n {code: 'a', value: 'parchment.'}, // This punc doesn't match example: https://www.kansalliskirjasto.fi/extra/marc21/bib/3XX.htm#340\n {code: 'b', value: '20 cm. folded to 10 x 12 cm'}\n ]\n }\n ]\n });\n\n const recordInvalidDDMissing = new MarcRecord({\n leader: '',\n fields: [\n {\n tag: '340',\n ind1: ' ',\n ind2: ' ',\n subfields: [\n {code: 'd', value: 'handwritten'},\n {code: 'd', value: 'typed'}\n ]\n }\n ]\n });\n\n const recordInvalidComplexDMissing = new MarcRecord({\n leader: '',\n fields: [\n {\n tag: '340',\n ind1: ' ',\n ind2: ' ',\n subfields: [\n {code: 'a', value: 'wove paper'},\n {code: 'c', value: 'ink'},\n {code: 'c', value: 'gouache'},\n {code: 'd', value: 'lithography'},\n {code: 'd', value: 'collage'}, // This punc doesn't match example: https://www.kansalliskirjasto.fi/extra/marc21/bib/3XX.htm#340\n {code: 'g', value: 'polychrome'}\n ]\n }\n ]\n });\n\n it('Finds record invalid - No punc $a (only)', async () => {\n const validator = await validatorFactory();\n const result = await validator.validate(recordInvalidA);\n assert.deepEqual(result, {\n message: ['Field 340 requires ending punctuation, ends in \\'e\\''],\n valid: false\n });\n });\n\n it('Finds record invalid - No punc $a (last)', async () => {\n const validator = await validatorFactory();\n const result = await validator.validate(recordInvalidAMissingB);\n assert.deepEqual(result, {\n message: ['Field 340 requires ending punctuation, ends in \\'t\\''],\n valid: false\n });\n });\n\n it('Finds record invalid - No punc $b (mandatory)', async () => {\n const validator = await validatorFactory();\n const result = await validator.validate(recordInvalidABMissing);\n assert.deepEqual(result, {\n message: ['Field 340 requires ending punctuation, ends in \\'m\\''],\n valid: false\n });\n });\n\n it('Finds record invalid - No punc $d (last of two)', async () => {\n const validator = await validatorFactory();\n const result = await validator.validate(recordInvalidDDMissing);\n assert.deepEqual(result, {\n message: ['Field 340 requires ending punctuation, ends in \\'d\\''],\n valid: false\n });\n });\n\n it('Finds record invalid - No punc $d (last of two) followed by $g', async () => {\n const validator = await validatorFactory();\n const result = await validator.validate(recordInvalidComplexDMissing);\n assert.deepEqual(result, {\n message: ['Field 340 requires ending punctuation, ends in \\'e\\''],\n valid: false\n });\n });\n\n // Fix tests; invalid->valid\n it('Repairs the invalid record - Add punc $a (only)', async () => {\n const validator = await validatorFactory();\n const result = await validator.fix(recordInvalidA);\n assert.equal(recordInvalidA.equalsTo(recordInvalidA), true);\n assert.deepEqual(result, {\n message: ['Field 340 requires ending punctuation, ends in \\'e\\''],\n fix: ['Field 340 - Added punctuation to $a'],\n valid: false\n });\n });\n\n it('Repairs the invalid record - Add punc $a (last)', async () => {\n const validator = await validatorFactory();\n const result = await validator.fix(recordInvalidAMissingB);\n assert.equal(recordInvalidAMissingB.equalsTo(recordValidAB), true);\n assert.deepEqual(result, {\n message: ['Field 340 requires ending punctuation, ends in \\'t\\''],\n fix: ['Field 340 - Added punctuation to $a'],\n valid: false\n });\n });\n\n it('Repairs the invalid record - Add punc $b (mandatory)', async () => {\n const validator = await validatorFactory();\n const result = await validator.fix(recordInvalidABMissing);\n assert.equal(recordInvalidABMissing.equalsTo(recordValidAB), true);\n assert.deepEqual(result, {\n message: ['Field 340 requires ending punctuation, ends in \\'m\\''],\n fix: ['Field 340 - Added punctuation to $b'],\n valid: false\n });\n });\n\n it('Repairs the invalid record - Add punc $d (last of two)', async () => {\n const validator = await validatorFactory();\n const result = await validator.fix(recordInvalidDDMissing);\n assert.equal(recordInvalidDDMissing.equalsTo(recordValidDD), true);\n assert.deepEqual(result, {\n message: ['Field 340 requires ending punctuation, ends in \\'d\\''],\n fix: ['Field 340 - Added punctuation to $d'],\n valid: false\n });\n });\n\n it('Repairs the invalid record - Add punc $d (last of list)', async () => {\n const validator = await validatorFactory();\n const result = await validator.fix(recordInvalidComplexDMissing);\n assert.equal(recordInvalidComplexDMissing.equalsTo(recordInvalidComplexDMissing), true);\n assert.deepEqual(result, {\n message: ['Field 340 requires ending punctuation, ends in \\'e\\''],\n fix: ['Field 340 - Added punctuation to $d'],\n valid: false\n });\n });\n });\n\n // \"520 KYLL\u00C4 Jos viimeinen osakentt\u00E4 on $u, piste on ennen sit\u00E4\" (Sama kuin 242, $y)\n describe('#520 TRUE - If last subfield $u, punc before it', () => {\n // Valid tests\n const recordValid = new MarcRecord({\n leader: '',\n fields: [\n {\n tag: '520',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: 'Mediav\u00E4kivalta ja sen yleis\u00F6.'}]\n }\n ]\n });\n\n const recordValidWithU = new MarcRecord({\n leader: '',\n fields: [\n {\n tag: '520',\n ind1: ' ',\n ind2: ' ',\n subfields: [\n {code: 'a', value: 'Abstrakti.'}, // This does not match example: https://www.kansalliskirjasto.fi/extra/marc21/bib/50X-53X.htm#520\n {code: 'u', value: 'http://www.ojp.usdoj.gov/bjs/abstract/cchrie98.htm'}\n ]\n }\n ]\n });\n\n const recordValidU = new MarcRecord({\n leader: '',\n fields: [\n {\n tag: '520',\n ind1: ' ',\n ind2: ' ',\n subfields: [\n {code: 'a', value: 'Abstrakti.'}, // This does not match example: https://www.kansalliskirjasto.fi/extra/marc21/bib/50X-53X.htm#520\n {code: 'u', value: 'http://www.ojp.usdoj.gov/bjs/abstract/cchrie98.htm.'}\n ]\n }\n ]\n });\n\n it('Finds record valid - Punc $a (without $u)', async () => {\n const validator = await validatorFactory();\n const result = await validator.validate(recordValid);\n assert.equal(result.valid, true);\n });\n\n it('Finds record valid - Punc $a (with $u) ', async () => {\n const validator = await validatorFactory();\n const result = await validator.validate(recordValidWithU);\n assert.equal(result.valid, true);\n });\n\n it('Finds record valid - Punc $a & $u (punc at $u should be ignored) ', async () => {\n const validator = await validatorFactory();\n const result = await validator.validate(recordValidU);\n assert.equal(result.valid, true);\n });\n\n // Invalid tests\n const recordInvalid = new MarcRecord({\n leader: '',\n fields: [\n {\n tag: '520',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: 'Mediav\u00E4kivalta ja sen yleis\u00F6'}]\n }\n ]\n });\n\n const recordInvalidWithU = new MarcRecord({\n leader: '',\n fields: [\n {\n tag: '520',\n ind1: ' ',\n ind2: ' ',\n subfields: [\n {code: 'a', value: 'Abstrakti'},\n {code: 'u', value: 'http://www.ojp.usdoj.gov/bjs/abstract/cchrie98.htm'}\n ]\n }\n ]\n });\n\n it('Finds record invalid - No punc $a (without $u)', async () => {\n const validator = await validatorFactory();\n const result = await validator.validate(recordInvalid);\n assert.deepEqual(result, {\n message: ['Field 520 requires ending punctuation, ends in \\'\u00F6\\''],\n valid: false\n });\n });\n\n it('Finds record invalid - No punc $a (with $u)', async () => {\n const validator = await validatorFactory();\n const result = await validator.validate(recordInvalidWithU);\n assert.deepEqual(result, {\n message: ['Field 520 requires ending punctuation, ends in \\'i\\''],\n valid: false\n });\n });\n\n // Fix tests; invalid->valid\n it('Repairs the invalid record - Add punc $a (only)', async () => {\n const validator = await validatorFactory();\n const result = await validator.fix(recordInvalid);\n assert.equal(recordInvalid.equalsTo(recordValid), true);\n assert.deepEqual(result, {\n message: ['Field 520 requires ending punctuation, ends in \\'\u00F6\\''],\n fix: ['Field 520 - Added punctuation to $a'],\n valid: false\n });\n });\n\n it('Repairs the invalid record - Add punc $a (last before $u)', async () => {\n const validator = await validatorFactory();\n const result = await validator.fix(recordInvalidWithU);\n assert.equal(recordInvalidWithU.equalsTo(recordValidWithU), true);\n assert.deepEqual(result, {\n message: ['Field 520 requires ending punctuation, ends in \\'i\\''],\n fix: ['Field 520 - Added punctuation to $a'],\n valid: false\n });\n });\n });\n\n // \"538 KYLL\u00C4 Jos viimeinen osakentt\u00E4 on $u, piste on ennen sit\u00E4\" (Sama kuin 520)\n // Eli piste merkit\u00E4\u00E4n vikaan osakentt\u00E4\u00E4n as usual, mutta ennen *y*-osakentt\u00E4\u00E4\n // (speksin mukaan y->u) https://www.kansalliskirjasto.fi/extra/marc21/bib/53X-58X.htm#538\n describe('#538 TRUE - If last subfield $u, punc before it', () => {\n // Valid tests\n const recordValid = new MarcRecord({\n leader: '',\n fields: [\n {\n tag: '538',\n ind1: ' ',\n ind2: ' ',\n subfields: [\n {code: 'a', value: 'Project methodology for digital version'},\n {code: 'i', value: 'Technical details.'}, // This ended to ':' in examples, but it doesn't match statet rules: https://www.kansalliskirjasto.fi/extra/marc21/bib/53X-58X.htm#538\n {code: 'u', value: 'http://www.columbia.edu/dlc/linglung/methodology.html'}\n ]\n }\n ]\n });\n\n const recordValidPuncU = new MarcRecord({\n leader: '',\n fields: [\n {\n tag: '538',\n ind1: ' ',\n ind2: ' ',\n subfields: [\n {code: 'a', value: 'Project methodology for digital version'},\n {code: 'i', value: 'Technical details.'},\n {code: 'u', value: 'http://www.columbia.edu/dlc/linglung/methodology.html.'}\n ]\n }\n ]\n });\n\n const recordValidOnlyA = new MarcRecord({\n leader: '',\n fields: [\n {\n tag: '538',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: 'SECAM-videolaite.'}]\n }\n ]\n });\n\n it('Finds record valid - Punc $i (last before $u)', async () => {\n const validator = await validatorFactory();\n const result = await validator.validate(recordValid);\n assert.equal(result.valid, true);\n });\n\n it('Finds record valid - Punc $i & punc $u ($u is URL, should pass)', async () => {\n const validator = await validatorFactory();\n const result = await validator.validate(recordValidPuncU);\n assert.equal(result.valid, true);\n });\n\n it('Finds record valid - Punc $a (only)', async () => {\n const validator = await validatorFactory();\n const result = await validator.validate(recordValidOnlyA);\n assert.equal(result.valid, true);\n });\n\n // Invalid tests\n const recordInvalidMissingI = new MarcRecord({\n leader: '',\n fields: [\n {\n tag: '538',\n ind1: ' ',\n ind2: ' ',\n subfields: [\n {code: 'a', value: 'Project methodology for digital version'},\n {code: 'i', value: 'Technical details'},\n {code: 'u', value: 'http://www.columbia.edu/dlc/linglung/methodology.html'}\n ]\n }\n ]\n });\n\n const recordInvalidI = new MarcRecord({\n leader: '',\n fields: [\n {\n tag: '538',\n ind1: ' ',\n ind2: ' ',\n subfields: [\n {code: 'a', value: 'Project methodology for digital version'},\n {code: 'i', value: 'Technical details:'}, // This is actually like in examples, but it doesn't match statet rules: https://www.kansalliskirjasto.fi/extra/marc21/bib/53X-58X.htm#538\n {code: 'u', value: 'http://www.columbia.edu/dlc/linglung/methodology.html'}\n ]\n }\n ]\n });\n\n const recordInvalidOnlyA = new MarcRecord({\n leader: '',\n fields: [\n {\n tag: '538',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: 'SECAM-videolaite'}]\n }\n ]\n });\n\n it('Finds record invalid - No punc $i (last before $u)', async () => {\n const validator = await validatorFactory();\n const result = await validator.validate(recordInvalidMissingI);\n assert.deepEqual(result, {\n message: ['Field 538 requires ending punctuation, ends in \\'s\\''],\n valid: false\n });\n });\n\n it('Finds record invalid - Invalid punc $i (\":\" not valid punc mark, but this is according example...)', async () => {\n const validator = await validatorFactory();\n const result = await validator.validate(recordInvalidI);\n assert.deepEqual(result, {\n message: ['Field 538 requires ending punctuation, ends in \\':\\''],\n valid: false\n });\n });\n\n it('Finds record invalid - No punc $a (only)', async () => {\n const validator = await validatorFactory();\n const result = await validator.validate(recordInvalidOnlyA);\n assert.deepEqual(result, {\n message: ['Field 538 requires ending punctuation, ends in \\'e\\''],\n valid: false\n });\n });\n\n // Fix tests; invalid->valid\n it('Repairs the invalid record - Add punc $i (last)', async () => {\n const validator = await validatorFactory();\n const result = await validator.fix(recordInvalidMissingI);\n assert.equal(recordInvalidMissingI.equalsTo(recordValid), true);\n assert.deepEqual(result, {\n message: ['Field 538 requires ending punctuation, ends in \\'s\\''],\n fix: ['Field 538 - Added punctuation to $i'],\n valid: false\n });\n });\n\n it('Repairs the invalid record - Add punc $a (only)', async () => {\n const validator = await validatorFactory();\n const result = await validator.fix(recordInvalidOnlyA);\n assert.equal(recordInvalidOnlyA.equalsTo(recordValidOnlyA), true);\n assert.deepEqual(result, {\n message: ['Field 538 requires ending punctuation, ends in \\'e\\''],\n fix: ['Field 538 - Added punctuation to $a'],\n valid: false\n });\n });\n });\n\n // \"567 KYLL\u00C4 osakent\u00E4n $a j\u00E4lkeen, EI muiden osakenttien j\u00E4lkeen\"\n // Only if last subfield $a\n describe('#567 TRUE - After subfield $a, FALSE after others', () => {\n // Valid tests\n const recordValid = new MarcRecord({\n leader: '',\n fields: [\n {\n tag: '567',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: 'Narratiivinen tutkimus.'}]\n }\n ]\n });\n\n const recordValidWithoutA = new MarcRecord({\n leader: '',\n fields: [\n {\n tag: '567',\n ind1: ' ',\n ind2: ' ',\n subfields: [\n {code: 'b', value: 'Narrative inquiry'},\n {code: '2', value: 'lcsh'}\n ]\n }\n ]\n });\n\n it('Finds record valid - Punc $a (only)', async () => {\n const validator = await validatorFactory();\n const result = await validator.validate(recordValid);\n assert.equal(result.valid, true);\n });\n\n it('Finds record valid - No punc $b (only data field)', async () => {\n const validator = await validatorFactory();\n const result = await validator.validate(recordValidWithoutA);\n assert.equal(result.valid, true);\n });\n\n // Invalid tests\n const recordInvalid = new MarcRecord({\n leader: '',\n fields: [\n {\n tag: '567',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: 'Narratiivinen tutkimus'}]\n }\n ]\n });\n\n const recordInvalidWithoutA = new MarcRecord({\n leader: '',\n fields: [\n {\n tag: '567',\n ind1: ' ',\n ind2: ' ',\n subfields: [\n {code: 'b', value: 'Narrative inquiry.'},\n {code: '2', value: 'lcsh'}\n ]\n }\n ]\n });\n\n it('Finds record invalid - No punc $a (only)', async () => {\n const validator = await validatorFactory();\n const result = await validator.validate(recordInvalid);\n assert.deepEqual(result, {\n message: ['Field 567 requires ending punctuation, ends in \\'s\\''],\n valid: false\n });\n });\n\n it('Finds record invalid - Punc $b (only data field)', async () => {\n const validator = await validatorFactory();\n const result = await validator.validate(recordInvalidWithoutA);\n assert.deepEqual(result, {\n message: ['Field 567 has unwanted ending punctuation \\'.\\''],\n valid: false\n });\n });\n\n // Fix tests; invalid->valid\n it('Repairs the invalid record - Add punc $a (only)', async () => {\n const validator = await validatorFactory();\n const result = await validator.fix(recordInvalid);\n assert.equal(recordInvalid.equalsTo(recordValid), true);\n assert.deepEqual(result, {\n message: ['Field 567 requires ending punctuation, ends in \\'s\\''],\n fix: ['Field 567 - Added punctuation to $a'],\n valid: false\n });\n });\n\n it('Repairs the invalid record - Remove punc $b (only data field)', async () => {\n const validator = await validatorFactory();\n const result = await validator.fix(recordInvalidWithoutA);\n assert.equal(recordInvalidWithoutA.equalsTo(recordValidWithoutA), true);\n assert.deepEqual(result, {\n message: ['Field 567 has unwanted ending punctuation \\'.\\''],\n fix: ['Field 567 - Removed punctuation from $b'],\n valid: false\n });\n });\n });\n\n // \"647-651 EI - EI suomalaisten sanastojen termeihin, muihin sanaston k\u00E4yt\u00E4nn\u00F6n mukaan, yleens\u00E4 KYLL\u00C4\"\n // Finnish terms at $2:['ysa', 'yso', 'kassu', 'seko', 'valo', 'kulo', 'puho', 'oiko', 'mero', 'liito', 'fast', 'allars']\n // Default TRUE, until more special cases are added\n describe('#647-651 FALSE - If Finnish, else TRUE', () => {\n // Valid tests\n const recordValid647FastEndPunc = new MarcRecord({\n leader: '',\n fields: [\n {\n tag: '647',\n ind1: ' ',\n ind2: '7',\n subfields: [\n {code: 'a', value: 'Hurricane Katrina'},\n {code: 'd', value: '(2005)'},\n {code: '2', value: 'fast'}\n ]\n }\n ]\n });\n\n const recordValid648FinNo = new MarcRecord({\n leader: '',\n fields: [\n {\n tag: '648',\n ind1: ' ',\n ind2: '7',\n subfields: [\n {code: 'a', value: '1900-luku'},\n {code: '2', value: 'yso/swe'}\n ]\n },\n { // Exception: term ending in dot:\n tag: '648',\n ind1: ' ',\n ind2: '7',\n subfields: [\n {code: 'a', value: '1200-luku eaa.'},\n {code: '2', value: 'yso/fin'},\n {code: '0', value: 'http://www.yso.fi/onto/yso/p1129911200'}\n ]\n }\n ]\n });\n\n const recordValid648FastNo = new MarcRecord({\n leader: '',\n fields: [\n {\n tag: '648',\n ind1: ' ',\n ind2: '7',\n subfields: [\n {code: 'a', value: '1862'},\n {code: '2', value: 'fast'} // https://www.kansalliskirjasto.fi/extra/marc21/bib/6XX.htm#648\n ]\n }\n ]\n });\n\n const recordValid650FinNo = new MarcRecord({\n leader: '',\n fields: [\n {\n tag: '650', ind1: ' ', ind2: '7', subfields: [\n {code: 'a', value: 'kirjastot'},\n {code: 'x', value: 'atk-j\u00E4rjestelm\u00E4t'},\n {code: '2', value: 'kauno/fin'}\n ]\n },\n {\n tag: '650', ind1: ' ', ind2: '7', subfields: [\n {code: 'a', value: 'ajovalot'},\n {code: '2', value: 'juho'}\n ]\n }\n ]\n });\n\n const recordValid650EngNoControl = new MarcRecord({\n leader: '',\n fields: [\n {\n tag: '650',\n ind1: ' ',\n ind2: ' ',\n subfields: [\n {code: 'a', value: 'Flour industry'},\n {code: 'v', value: 'Periodicals.'}\n ]\n }\n ]\n });\n\n const recordValid650EngControl = new MarcRecord({\n leader: '',\n fields: [\n {\n tag: '650',\n ind1: ' ',\n ind2: '7',\n subfields: [\n {code: 'a', value: 'Career Exploration.'},\n {code: '2', value: 'ericd'}\n ]\n }\n ]\n });\n\n it('Finds record valid - 647 Fast, punc char at end', async () => {\n const validator = await validatorFactory();\n const result = await validator.validate(recordValid647FastEndPunc);\n assert.equal(result.valid, true);\n });\n\n it('Finds record valid - 648 Finnish, without punc', async () => {\n const validator = await validatorFactory();\n const result = await validator.validate(recordValid648FinNo);\n assert.equal(result.valid, true);\n });\n\n it('Finds record valid - 648 Fast, without punc', async () => {\n const validator = await validatorFactory();\n const result = await validator.validate(recordValid648FastNo);\n assert.equal(result.valid, true);\n });\n\n it('Finds record valid - 650 Finnish, without punc', async () => {\n const validator = await validatorFactory();\n const result = await validator.validate(recordValid650FinNo);\n assert.equal(result.valid, true);\n });\n\n it('Finds record valid - 650 English, punc (no control)', async () => {\n const validator = await validatorFactory();\n const result = await validator.validate(recordValid650EngNoControl);\n assert.equal(result.valid, true);\n });\n\n it('Finds record valid - 650 English, with punc', async () => {\n const validator = await validatorFactory();\n const result = await validator.validate(recordValid650EngControl);\n assert.equal(result.valid, true);\n });\n\n // Invalid tests\n const recordInvalid647FastEndPunc = new MarcRecord({\n leader: '',\n fields: [\n {\n tag: '647',\n ind1: ' ',\n ind2: '7',\n subfields: [\n {code: 'a', value: 'Hurricane Katrina'},\n {code: 'd', value: '(2005).'},\n {code: '2', value: 'fast'}\n ]\n }\n ]\n });\n\n const recordInvalid648FinYes = new MarcRecord({\n leader: '',\n fields: [\n {\n tag: '648',\n ind1: ' ',\n ind2: '7',\n subfields: [\n {code: 'a', value: '1900-luku.'},\n {code: '2', value: 'yso/swe'}\n ]\n }, { // Exception:\n tag: '648',\n ind1: ' ',\n ind2: '7',\n subfields: [\n {code: 'a', value: '1200-luku eaa'},\n {code: '2', value: 'yso/fin'},\n {code: '0', value: 'http://www.yso.fi/onto/yso/p1129911200'}\n ]\n }\n ]\n });\n\n const recordInvalid648FastYes = new MarcRecord({\n leader: '',\n fields: [\n {\n tag: '648',\n ind1: ' ',\n ind2: '7',\n subfields: [\n {code: 'a', value: '1862.'},\n {code: '2', value: 'fast'}\n ]\n }\n ]\n });\n\n const recordInvalid650FinYes = new MarcRecord({\n leader: '',\n fields: [\n {\n tag: '650', ind1: ' ', ind2: '7', subfields: [\n {code: 'a', value: 'kirjastot'},\n {code: 'x', value: 'atk-j\u00E4rjestelm\u00E4t.'},\n {code: '2', value: 'kauno/fin'}\n ]\n },\n {\n tag: '650', ind1: ' ', ind2: '7', subfields: [\n {code: 'a', value: 'ajovalot.'},\n {code: '2', value: 'juho'}\n ]\n }\n ]\n });\n\n const recordInvalid650EngNoControl = new MarcRecord({\n leader: '',\n fields: [\n {\n tag: '650',\n ind1: ' ',\n ind2: ' ',\n subfields: [\n {code: 'a', value: 'Flour industry'},\n {code: 'v', value: 'Periodicals'}\n ]\n }\n ]\n });\n\n const recordInvalid650EngControl = new MarcRecord({\n leader: '',\n fields: [\n {\n tag: '650',\n ind1: ' ',\n ind2: '7',\n subfields: [\n {code: 'a', value: 'Career Exploration'},\n {code: '2', value: 'ericd'}\n ]\n }\n ]\n });\n\n it('Finds record invalid - 647 Fast, dot at end', async () => {\n const validator = await validatorFactory();\n const result = await validator.validate(recordInvalid647FastEndPunc);\n assert.deepEqual(result, {\n message: ['Field 647 has an extra dot after \\')\\''],\n valid: false\n });\n });\n\n it('Finds record invalid - 648 Finnish, with punc', async () => {\n const validator = await validatorFactory();\n const result = await validator.validate(recordInvalid648FinYes);\n assert.deepEqual(result, {\n message: ['Field 648 has unwanted ending punctuation \\'.\\'', \"Field 648 requires ending punctuation, ends in 'a'\"],\n valid: false\n });\n });\n\n it('Finds record invalid - 648 Fast, with punc', async () => {\n const validator = await validatorFactory();\n const result = await validator.validate(recordInvalid648FastYes);\n assert.deepEqual(result, {\n message: ['Field 648 has unwanted ending punctuation \\'.\\''],\n valid: false\n });\n });\n\n const invalidField650Message = 'Field 650 has unwanted ending punctuation \\'.\\'';\n it('Finds record invalid - 650 Finnish, with punc', async () => {\n const validator = await validatorFactory();\n const result = await validator.validate(recordInvalid650FinYes);\n assert.deepEqual(result, {\n message: [invalidField650Message, invalidField650Message],\n valid: false\n });\n });\n\n it('Finds record invalid - 650 !Finnish, without punc (no control)', async () => {\n const validator = await validatorFactory();\n const result = await validator.validate(recordInvalid650EngNoControl);\n assert.deepEqual(result, {\n message: ['Field 650 requires ending punctuation, ends in \\'s\\''],\n valid: false\n });\n });\n\n it('Finds record invalid - 650 !Finnish, without punc', async () => {\n const validator = await validatorFactory();\n const result = await validator.validate(recordInvalid650EngControl);\n assert.deepEqual(result, {\n message: ['Field 650 requires ending punctuation, ends in \\'n\\''],\n valid: false\n });\n });\n\n // Fix tests; invalid->valid\n it('Repairs the invalid record - 647 Fast, removes double punc $d', async () => {\n const validator = await validatorFactory();\n const result = await validator.fix(recordInvalid647FastEndPunc);\n assert.equal(recordInvalid647FastEndPunc.equalsTo(recordValid647FastEndPunc), true);\n assert.deepEqual(result, {\n message: ['Field 647 has an extra dot after \\')\\''],\n fix: ['Field 647 - Removed dot after punctuation from $d'],\n valid: false\n });\n });\n\n it('Repairs the invalid record - 648 Finnish, removes punc $a', async () => {\n const validator = await validatorFactory();\n const result = await validator.fix(recordInvalid648FinYes);\n //console.info(\"NV-------\");\n //console.info(JSON.stringify(recordInvalid648FinYes));\n //console.info(JSON.stringify(recordValid648FinNo));\n //assert.equal(recordInvalid648FinYes.equalsTo(recordValid648FinNo), true);\n assert.deepEqual(recordInvalid648FinYes, recordValid648FinNo);\n //console.info(JSON.stringify(result));\n assert.deepEqual(result, {\n message: ['Field 648 has unwanted ending punctuation \\'.\\'', \"Field 648 requires ending punctuation, ends in 'a'\"],\n fix: ['Field 648 - Removed punctuation from $a', 'Field 648 - Added punctuation to $a'],\n valid: false\n });\n });\n\n it('Repairs the invalid record - 648 Fast, removes punc $a', async () => {\n const validator = await validatorFactory();\n const result = await validator.fix(recordInvalid648FastYes);\n assert.equal(recordInvalid648FastYes.equalsTo(recordValid648FastNo), true);\n assert.deepEqual(result, {\n message: ['Field 648 has unwanted ending punctuation \\'.\\''],\n fix: ['Field 648 - Removed punctuation from $a'],\n valid: false\n });\n });\n\n it('Repairs the invalid record - 650 Finnish, removes punc $x', async () => {\n const validator = await validatorFactory();\n const result = await validator.fix(recordInvalid650FinYes);\n assert.equal(recordInvalid650FinYes.equalsTo(recordValid650FinNo), true);\n assert.deepEqual(result, {\n message: [invalidField650Message, invalidField650Message],\n fix: ['Field 650 - Removed punctuation from $x', 'Field 650 - Removed punctuation from $a'],\n valid: false\n });\n });\n\n it('Repairs the invalid record - 650 !Finnish, add punc $v (no control)', async () => {\n const validator = await validatorFactory();\n const result = await validator.fix(recordInvalid650EngNoControl);\n assert.equal(recordInvalid650EngNoControl.equalsTo(recordValid650EngNoControl), true);\n assert.deepEqual(result, {\n message: ['Field 650 requires ending punctuation, ends in \\'s\\''],\n fix: ['Field 650 - Added punctuation to $v'],\n valid: false\n });\n });\n\n it('Repairs the invalid record - 650 !Finnish, add punc $a', async () => {\n const validator = await validatorFactory();\n const result = await validator.fix(recordInvalid650EngControl);\n assert.equal(recordInvalid650EngControl.equalsTo(recordValid650EngControl), true);\n assert.deepEqual(result, {\n message: ['Field 650 requires ending punctuation, ends in \\'n\\''],\n fix: ['Field 650 - Added punctuation to $a'],\n valid: false\n });\n });\n });\n\n // \"654-662 EI - EI suomalaisten sanastojen termeihin, muihin sanaston k\u00E4yt\u00E4nn\u00F6n mukaan, yleens\u00E4 KYLL\u00C4\"\n // Finnish terms at $2:['ysa', 'yso', 'kassu', 'seko', 'valo', 'kulo', 'puho', 'oiko', 'mero', 'liito', 'fast', 'allars']\n // Default TRUE, until more special cases are added\n describe('#654-662 TRUE - If Finnish, else TRUE', () => {\n // Valid tests\n const recordValid655FinNo = new MarcRecord({\n leader: '',\n fields: [\n {\n tag: '655',\n ind1: ' ',\n ind2: '7',\n subfields: [\n {code: 'a', value: 'kausijulkaisut'},\n {code: '2', value: 'yso/eng'}\n ]\n }\n ]\n });\n\n const recordValid655FinNo2 = new MarcRecord({\n leader: '',\n fields: [\n {\n tag: '655',\n ind1: ' ',\n ind2: '7',\n subfields: [\n {code: 'a', value: 'vironkielinen kirjallisuus'},\n {code: '2', value: 'local'}\n ]\n }\n ]\n });\n\n const recordValid655EngYes = new MarcRecord({\n leader: '',\n fields: [\n {\n tag: '655',\n ind1: ' ',\n ind2: '7',\n subfields: [\n {code: 'a', value: 'Bird\\'s-eye views'},\n {code: 'y', value: '1874.'},\n {code: '2', value: 'gmgpc'}\n ]\n }\n ]\n });\n\n const recordValid655EngYesNoControl = new MarcRecord({\n leader: '',\n fields: [\n {\n tag: '655',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: 'Diaries.'}]\n }\n ]\n });\n\n const recordValid656FinNo = new MarcRecord({\n leader: '',\n fields: [\n {\n tag: '656',\n ind1: ' ',\n ind2: '7',\n subfields: [\n {code: 'a', value: 'kuvaamataidonopettajat'},\n {code: '2', value: 'slm/eng'}\n ]\n }\n ]\n });\n\n const recordValid657EngYes = new MarcRecord({\n leader: '',\n fields: [\n {\n tag: '657',\n ind1: ' ',\n ind2: '7',\n subfields: [\n {code: 'a', value: 'Personnel benefits management'},\n {code: 'x', value: 'Vital statistics'},\n {code: 'z', value: 'Love Canal, New York.'},\n {code: '2', value: 'New York State Management Functions Index'}\n ]\n }\n ]\n });\n\n const recordValid658EngYes = new MarcRecord({\n leader: '',\n fields: [\n {\n tag: '658',\n ind1: ' ',\n ind2: ' ',\n subfields: [\n {code: 'a', value: 'Math manipulatives'},\n {code: 'd', value: 'highly correlated.'},\n {code: '2', value: '[source code]'}\n ]\n }\n ]\n });\n\n const recordValid662EngYes = new MarcRecord({\n leader: '',\n fields: [\n {\n tag: '662',\n ind1: ' ',\n ind2: ' ',\n subfields: [\n {code: 'a', value: 'Antarctica.'},\n {code: '2', value: 'lcsh/naf'}\n ]\n }\n ]\n });\n\n it('Finds record valid - 655 Finnish, no punc $a', async () => {\n const validator = await validatorFactory();\n const result = await validator.validate(recordValid655FinNo);\n assert.equal(result.valid, true);\n });\n\n it('Finds record valid - 655 Finnish, without punc', async () => {\n const validator = await validatorFactory();\n const result = await validator.validate(recordValid655FinNo2);\n assert.equal(result.valid, true);\n });\n\n it('Finds record valid - 655 English, with punc $y', async () => {\n const validator = await validatorFactory();\n const result = await validator.validate(recordValid655EngYes);\n assert.equal(result.valid, true);\n });\n\n it('Finds record valid - 655 English, with punc $a (no control)', async () => {\n const validator = await validatorFactory();\n const result = await validator.validate(recordValid655EngYesNoControl);\n assert.equal(result.valid, true);\n });\n\n it('Finds record valid - 656 Finnish, without punc $a', async () => {\n const validator = await validatorFactory();\n const result = await validator.validate(recordValid656FinNo);\n assert.equal(result.valid, true);\n });\n\n it('Finds record valid - 657 English, with punc $z', async () => {\n const validator = await validatorFactory();\n const result = await validator.validate(recordValid657EngYes);\n assert.equal(result.valid, true);\n });\n\n it('Finds record valid - 658 English, with punc $d', async () => {\n const validator = await validatorFactory();\n const result = await validator.validate(recordValid658EngYes);\n assert.equal(result.valid, true);\n });\n\n it('Finds record valid - 662 English, with punc $a', async () => {\n const validator = await validatorFactory();\n const result = await validator.validate(recordValid662EngYes);\n assert.equal(result.valid, true);\n });\n\n // Invalid tests\n const recordInvalid655FinYes = new MarcRecord({\n leader: '',\n fields: [\n {\n tag: '655',\n ind1: ' ',\n ind2: '7',\n subfields: [\n {code: 'a', value: 'kausijulkaisut.'},\n {code: '2', value: 'yso/eng'}\n ]\n }\n ]\n });\n\n const recordInvalid655FinYes2 = new MarcRecord({\n leader: '',\n fields: [\n {\n tag: '655',\n ind1: ' ',\n ind2: '7',\n subfields: [\n {code: 'a', value: 'vironkielinen kirjallisuus.'},\n {code: '2', value: 'local'}\n ]\n }\n ]\n });\n\n const recordInvalid655EngNo = new MarcRecord({\n leader: '',\n fields: [\n {\n tag: '655',\n ind1: ' ',\n ind2: '7',\n subfields: [\n {code: 'a', value: 'Bird\\'s-eye views'},\n {code: 'y', value: '1874'},\n {code: '2', value: 'gmgpc'}\n ]\n }\n ]\n });\n\n const recordInvalid655EngNoNoControl = new MarcRecord({\n leader: '',\n fields: [\n {\n tag: '655',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: 'Diaries'}]\n }\n ]\n });\n\n const recordInvalid656FinYes = new MarcRecord({\n leader: '',\n fields: [\n {\n tag: '656',\n ind1: ' ',\n ind2: '7',\n subfields: [\n {code: 'a', value: 'kuvaamataidonopettajat.'},\n {code: '2', value: 'slm/eng'}\n ]\n }\n ]\n });\n\n const recordInvalid657EngNo = new MarcRecord({\n leader: '',\n fields: [\n {\n tag: '657',\n ind1: ' ',\n ind2: '7',\n subfields: [\n {code: 'a', value: 'Personnel benefits management'},\n {code: 'x', value: 'Vital statistics'},\n {code: 'z', value: 'Love Canal, New York'},\n {code: '2', value: 'New York State Management Functions Index'}\n ]\n }\n ]\n });\n\n const recordInvalid658EngNo = new MarcRecord({\n leader: '',\n fields: [\n {\n tag: '658',\n ind1: ' ',\n ind2: ' ',\n subfields: [\n {code: 'a', value: 'Math manipulatives'},\n {code: 'd', value: 'highly correlated'},\n {code: '2', value: '[source code]'}\n ]\n }\n ]\n });\n\n const recordInvalid662EngNo = new MarcRecord({\n leader: '',\n fields: [\n {\n tag: '662',\n ind1: ' ',\n ind2: ' ',\n subfields: [\n {code: 'a', value: 'Antarctica'},\n {code: '2', value: 'lcsh/naf'}\n ]\n }\n ]\n });\n\n it('Finds record invalid - 655 Finnish, punc $a', async () => {\n const validator = await validatorFactory();\n const result = await validator.validate(recordInvalid655FinYes);\n assert.deepEqual(result, {\n message: ['Field 655 has unwanted ending punctuation \\'.\\''],\n valid: false\n });\n });\n\n it('Finds record invalid - 655 Finnish, with punc', async () => {\n const validator = await validatorFactory();\n const result = await validator.validate(recordInvalid655FinYes2);\n assert.deepEqual(result, {\n message: ['Field 655 has unwanted ending punctuation \\'.\\''],\n valid: false\n });\n });\n\n it('Finds record invalid - 655 !Finnish, without punc $y', async () => {\n const validator = await validatorFactory();\n const result = await validator.validate(recordInvalid655EngNo);\n assert.deepEqual(result, {\n message: ['Field 655 requires ending punctuation, ends in \\'4\\''],\n valid: false\n });\n });\n\n it('Finds record invalid - 655 !Finnish, without punc $a (no control)', async () => {\n const validator = await validatorFactory();\n const result = await validator.validate(recordInvalid655EngNoNoControl);\n assert.deepEqual(result, {\n message: ['Field 655 requires ending punctuation, ends in \\'s\\''],\n valid: false\n });\n });\n\n it('Finds record invalid - 656 Finnish, with punc $a', async () => {\n const validator = await validatorFactory();\n const result = await validator.validate(recordInvalid656FinYes);\n assert.deepEqual(result, {\n message: ['Field 656 has unwanted ending punctuation \\'.\\''],\n valid: false\n });\n });\n\n it('Finds record invalid - 657 !Finnish, without punc $z', async () => {\n const validator = await validatorFactory();\n const result = await validator.validate(recordInvalid657EngNo);\n assert.deepEqual(result, {\n message: ['Field 657 requires ending punctuation, ends in \\'k\\''],\n valid: false\n });\n });\n\n it('Finds record invalid - 658 !Finnish, without punc $d', async () => {\n const validator = await validatorFactory();\n const result = await validator.validate(recordInvalid658EngNo);\n assert.deepEqual(result, {\n message: ['Field 658 requires ending punctuation, ends in \\'d\\''],\n valid: false\n });\n });\n\n it('Finds record invalid - 662 !Finnish, without punc $a', async () => {\n const validator = await validatorFactory();\n const result = await validator.validate(recordInvalid662EngNo);\n assert.deepEqual(result, {\n message: ['Field 662 requires ending punctuation, ends in \\'a\\''],\n valid: false\n });\n });\n\n // Fix tests; invalid->valid\n it('Repairs the invalid record - 655 Finnish, remove punc $a', async () => {\n const validator = await validatorFactory();\n const result = await validator.fix(recordInvalid655FinYes);\n assert.equal(recordInvalid655FinYes.equalsTo(recordValid655FinNo), true);\n assert.deepEqual(result, {\n message: ['Field 655 has unwanted ending punctuation \\'.\\''],\n fix: ['Field 655 - Removed punctuation from $a'],\n valid: false\n });\n });\n\n it('Repairs the invalid record - 655 Finnish, removes punc $a 2', async () => {\n const validator = await validatorFactory();\n const result = await validator.fix(recordInvalid655FinYes2);\n assert.equal(recordInvalid655FinYes2.equalsTo(recordValid655FinNo2), true);\n assert.deepEqual(result, {\n message: ['Field 655 has unwanted ending punctuation \\'.\\''],\n fix: ['Field 655 - Removed punctuation from $a'],\n valid: false\n });\n });\n\n it('Repairs the invalid record - 655 !Finnish, add punc $y', async () => {\n const validator = await validatorFactory();\n const result = await validator.fix(recordInvalid655EngNo);\n assert.equal(recordInvalid655EngNo.equalsTo(recordValid655EngYes), true);\n assert.deepEqual(result, {\n message: ['Field 655 requires ending punctuation, ends in \\'4\\''],\n fix: ['Field 655 - Added punctuation to $y'],\n valid: false\n });\n });\n\n it('Repairs the invalid record - 655 !Finnish, add punc $a (no control)', async () => {\n const validator = await validatorFactory();\n const result = await validator.fix(recordInvalid655EngNoNoControl);\n assert.equal(recordInvalid655EngNoNoControl.equalsTo(recordValid655EngYesNoControl), true);\n assert.deepEqual(result, {\n message: ['Field 655 requires ending punctuation, ends in \\'s\\''],\n fix: ['Field 655 - Added punctuation to $a'],\n valid: false\n });\n });\n\n it('Repairs the invalid record - 656 Finnish, remove punc $a', async () => {\n const validator = await validatorFactory();\n const result = await validator.fix(recordInvalid656FinYes);\n assert.equal(recordInvalid656FinYes.equalsTo(recordValid656FinNo), true);\n assert.deepEqual(result, {\n message: ['Field 656 has unwanted ending punctuation \\'.\\''],\n fix: ['Field 656 - Removed punctuation from $a'],\n valid: false\n });\n });\n\n it('Repairs the invalid record - 657 !Finnish, add punc $z', async () => {\n const validator = await validatorFactory();\n const result = await validator.fix(recordInvalid657EngNo);\n assert.equal(recordInvalid657EngNo.equalsTo(recordValid657EngYes), true);\n assert.deepEqual(result, {\n message: ['Field 657 requires ending punctuation, ends in \\'k\\''],\n fix: ['Field 657 - Added punctuation to $z'],\n valid: false\n });\n });\n\n it('Repairs the invalid record - 658 !Finnish, add punc $d', async () => {\n const validator = await validatorFactory();\n const result = await validator.fix(recordInvalid658EngNo);\n assert.equal(recordInvalid658EngNo.equalsTo(recordValid658EngYes), true);\n assert.deepEqual(result, {\n message: ['Field 658 requires ending punctuation, ends in \\'d\\''],\n fix: ['Field 658 - Added punctuation to $d'],\n valid: false\n });\n });\n\n it('Repairs the invalid record - 662 !Finnish, add punc $a', async () => {\n const validator = await validatorFactory();\n const result = await validator.fix(recordInvalid662EngNo);\n assert.equal(recordInvalid662EngNo.equalsTo(recordValid662EngYes), true);\n assert.deepEqual(result, {\n message: ['Field 662 requires ending punctuation, ends in \\'a\\''],\n fix: ['Field 662 - Added punctuation to $a'],\n valid: false\n });\n });\n });\n\n // \"760-787 KYLL\u00C4 osakent\u00E4n $a j\u00E4lkeen, EI muiden osakenttien j\u00E4lkeen\" (kuten 567)\n // Only if last subfield $a\n describe('#760-787 TRUE - After subfield $a, FALSE after others', () => {\n // Valid tests\n const recordValid = new MarcRecord({\n leader: '',\n fields: [\n {\n tag: '760',\n ind1: ' ',\n ind2: ' ',\n subfields: [\n {code: 'a', value: 'Mellor, Alec.'},\n {code: 't', value: 'Strange masonic stories'},\n {code: 'e', value: 'eng'}\n ]\n }\n ]\n });\n\n const recordValidOnlyA = new MarcRecord({\n leader: '',\n fields: [\n {\n tag: '760',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: 'Mellor, Alec.'}]\n }\n ]\n });\n\n it('Finds record valid - Punc $a, but following fields, $e no punc (last)', async () => {\n const validator = await validatorFactory();\n const result = await validator.validate(recordValid);\n assert.equal(result.valid, true);\n });\n\n it('Finds record valid - Punc $a (only)', async () => {\n const validator = await validatorFactory();\n const result = await validator.validate(recordValidOnlyA);\n assert.equal(result.valid, true);\n });\n\n // Invalid tests\n const recordInvalid = new MarcRecord({\n leader: '',\n fields: [\n {\n tag: '760',\n ind1: ' ',\n ind2: ' ',\n subfields: [\n {code: 'a', value: 'Mellor, Alec.'},\n {code: 't', value: 'Strange masonic stories'},\n {code: 'e', value: 'eng.'}\n ]\n }\n ]\n });\n\n const recordInvalidOnlyA = new MarcRecord({\n leader: '',\n fields: [\n {\n tag: '760',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: 'Mellor, Alec'}]\n }\n ]\n });\n\n it('Finds record invalid - Punc $e (language field, strict)', async () => {\n const validator = await validatorFactory();\n const result = await validator.validate(recordInvalid);\n assert.deepEqual(result, {\n message: ['Field 760 has unwanted ending punctuation \\'.\\''],\n valid: false\n });\n });\n\n it('Finds record invalid - No punc $a (only)', async () => {\n const validator = await validatorFactory();\n const result = await validator.validate(recordInvalidOnlyA);\n assert.deepEqual(result, {\n message: ['Field 760 requires ending punctuation, ends in \\'c\\''],\n valid: false\n });\n });\n\n // Fix tests; invalid->valid\n it('Repairs the invalid record - Remove punc $e (language field, strict)', async () => {\n const validator = await validatorFactory();\n const result = await validator.fix(recordInvalid);\n assert.equal(recordInvalid.equalsTo(recordValid), true);\n assert.deepEqual(result, {\n message: ['Field 760 has unwanted ending punctuation \\'.\\''],\n fix: ['Field 760 - Removed punctuation from $e'],\n valid: false\n });\n });\n\n it('Repairs the invalid record - Add punc $a (only)', async () => {\n const validator = await validatorFactory();\n const result = await validator.fix(recordInvalidOnlyA);\n assert.equal(recordInvalidOnlyA.equalsTo(recordValidOnlyA), true);\n assert.deepEqual(result, {\n message: ['Field 760 requires ending punctuation, ends in \\'c\\''],\n fix: ['Field 760 - Added punctuation to $a'],\n valid: false\n });\n });\n });\n\n // \"`880`-kentt\u00E4: https://www.kansalliskirjasto.fi/extra/marc21/bib/841-88X.htm#880 Eli t\u00E4\u00E4 on se Loppupisteohjeen `Samoin kuin vastaavat kent\u00E4t` -keissi\n // Spex on siin\u00E4, mutta lyhk\u00E4sesti: `880`-kent\u00E4ss\u00E4 on muiden kenttien translitteroidut versiot (Data eri kirjaimistolla). 880-kent\u00E4n osakent\u00E4st\u00E4 `6` selvi\u00E4\u00E4 mihin kentt\u00E4\u00E4 se linkkaa.\"\n // 880 Samoin kuin vastaavat kent\u00E4t - Siis tarkistetaan kontrollikent\u00E4n $6 s\u00E4\u00E4nn\u00F6n\n describe('#880 - Like linked fields', () => {\n // Valid tests\n const recordValidSimple = new MarcRecord({\n leader: '',\n fields: [\n {\n tag: '880',\n ind1: ' ',\n ind2: ' ',\n subfields: [\n {code: 'a', value: '\u5E73\u7530 \u7BE4\u80E4'},\n {code: 'b', value: '1776-1843.'},\n {code: '6', value: '100-01/$1'} // Tag 100 has value TRUE -> last data subfield should have punc\n ]\n }\n ]\n });\n\n const recordValidComplex = new MarcRecord({\n leader: '',\n fields: [\n {\n tag: '880',\n ind1: ' ',\n ind2: ' ',\n subfields: [\n {code: 'b', value: '\u05D9\u05D3\u05D9\u05E2\u05D5\u05EA \u05D0\u05D7\u05E8\u05D5\u05E0\u05D5\u05EA'},\n {code: 'b', value: '\u05E1\u05E4\u05E8\u05D9 \u05D7\u05DE\u05D3'},\n {code: 'c', value: '2006.'},\n {code: '6', value: '260-02/(2/r \u2021a \u05EA\u05DC-\u05D0\u05D1\u05D9\u05D1'} // Tag 260 has value TRUE -> last data subfield should have punc\n ]\n }\n ]\n });\n\n it('Finds record valid - Punc $b', async () => {\n const validator = await validatorFactory();\n const result = await validator.validate(recordValidSimple);\n assert.equal(result.valid, true);\n });\n\n it('Finds record valid - Punc $c', async () => {\n const validator = await validatorFactory();\n const result = await validator.validate(recordValidComplex);\n assert.equal(result.valid, true);\n });\n\n // Invalid tests\n const recordInvalidSimple = new MarcRecord({\n leader: '',\n fields: [\n {\n tag: '880',\n ind1: ' ',\n ind2: ' ',\n subfields: [\n {code: 'a', value: '\u5E73\u7530 \u7BE4\u80E4'},\n {code: 'b', value: '1776-1843'},\n {code: '6', value: '100-01/$1'} // Tag 100 has value TRUE -> last data subfield should have punc\n ]\n }\n ]\n });\n\n const recordInvalidComplex = new MarcRecord({\n leader: '',\n fields: [\n {\n tag: '880',\n ind1: ' ',\n ind2: ' ',\n subfields: [\n {code: 'b', value: '\u05D9\u05D3\u05D9\u05E2\u05D5\u05EA \u05D0\u05D7\u05E8\u05D5\u05E0\u05D5\u05EA'},\n {code: 'b', value: '\u05E1\u05E4\u05E8\u05D9 \u05D7\u05DE\u05D3'},\n {code: 'c', value: '2006'},\n {code: '6', value: '260-02/(2/r \u2021a \u05EA\u05DC-\u05D0\u05D1\u05D9\u05D1'} // Tag 260 has value TRUE -> last data subfield should have punc\n ]\n }\n ]\n });\n\n it('Finds record invalid - No punc $b', async () => {\n const validator = await validatorFactory();\n const result = await validator.validate(recordInvalidSimple);\n assert.deepEqual(result, {\n message: ['Field 880 requires ending punctuation, ends in \\'3\\''],\n valid: false\n });\n });\n\n it('Finds record invalid - No punc $c', async () => {\n const validator = await validatorFactory();\n const result = await validator.validate(recordInvalidComplex);\n assert.deepEqual(result, {\n message: ['Field 880 requires ending punctuation, ends in \\'6\\''],\n valid: false\n });\n });\n\n // Fix tests; invalid->valid\n it('Repairs the invalid record - Add punc $b', async () => {\n const validator = await validatorFactory();\n const result = await validator.fix(recordInvalidSimple);\n assert.equal(recordInvalidSimple.equalsTo(recordValidSimple), true);\n assert.deepEqual(result, {\n message: ['Field 880 requires ending punctuation, ends in \\'3\\''],\n fix: ['Field 880 - Added punctuation to $b'],\n valid: false\n });\n });\n\n it('Repairs the invalid record - Add punc $c', async () => {\n const validator = await validatorFactory();\n const result = await validator.fix(recordInvalidComplex);\n assert.equal(recordInvalidComplex.equalsTo(recordValidComplex), true);\n assert.deepEqual(result, {\n message: ['Field 880 requires ending punctuation, ends in \\'6\\''],\n fix: ['Field 880 - Added punctuation to $c'],\n valid: false\n });\n });\n });\n });\n});\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }