NatLibFi/marc-record-validators-melinda

View on GitHub
src/typeOfDate-008.js

Summary

Maintainability
A
2 hrs
Test Coverage
import createDebugLogger from 'debug';

const debug = createDebugLogger('@natlibfi/marc-record-validators-melinda/typeOfDate-008');  // eslint-disable-line

export default function () {
  return {
    description: 'Validates 008 06',
    validate,
    fix
  };

  function validate(record) {
    const [f008] = record.get(/008/u);
    const c06 = f008.value.substring(6, 7);
    const c1114 = f008.value.substring(11, 15);
    // if 008 06 = s, and 11-14 = #### (not year/digits)
    if (c06 === 't' && !(/[0-9u]{4}/u).test(c1114)) {
      debug('is t and not valid 1114');
      return {valid: false, message: 'Invalid 008 06'};
    }

    return {valid: true};
  }

  function fix(record) {
    //  LDR/06=t ja 11-14=####, niin LDR/06 muutetaan s:ksi
    const [f008] = record.pop(/008/u); // eslint-disable-line functional/immutable-data
    const c06 = f008.value.substring(6, 7);
    const c1114 = f008.value.substring(11, 15);
    // if 008 06 = s, and 11-14 = #### (not year/digits)
    if (c06 === 't' && !(/[0-9u]{4}/u).test(c1114)) {
      f008.value = `${f008.value.substring(0, 6)}s${f008.value.substring(7)}`; // eslint-disable-line functional/immutable-data
      record.insertField(f008);
      return true;
    }

    record.insertField(f008);
    return true;
  }
}