---
# sample schemas to reference in tests
schemas:
  021A:
    fields:
      021A:
        required: 1
        subfields:
          a:
            required: 1
            order: 1
          d:
            order: 2
          x: {}
  021A-repeatable:
    fields:
      021A:
        repeatable: 1
  021A-empty-subfields:
    fields:
      021A:
        subfields: {}
  occurrences:
    fields:
      028C/01:
        required: 1
      222X:
        required: 0
  occurrence-range:
    fields:
      028C/00-11:
        required: 1
      222X:
        required: 0
  pattern:
    fields:
      021A:
        subfields:
          a:
            pattern: x
  positions:
    fields:
      099X:
        subfields:
          x:
            positions:
              01: {}
              1-01:
                codes:
                  y: {}
              2-3:
                codes:
                  zz: {}
  level2:
    fields:
      200A:
        repeatable: 0

# sample records to reference in tests
records:
  021A: "021A $atitle"
  021A-repeated: "021A $atitle\n021A $atitle"
  021A-repeated-subfield: "021A $atitle$atitle"
  021A-missing-subfield: "021A $dsubtitle"
  021A-ordered-subfields: "021A $atitle$dsubtitle"
  021A-unordered-subfields: "021A $dsubtitle$atitle"
  021A-subfield: "021A $atitle$atitle"
  099X: "099X $xyzz"
  099X-short: "099X $xy"
  099X-wrong: "099X $xyaa"
  occurrences: "028C/01 $dEmma$aGoldman\n222X/123 $x23"
  occurrences-missing: "028C $dEmma$aGoldman"
  level2ok: "200A/001 $x1\n200A/002 $x2"
  level2notok: "200A/001 $x1\n200A/001 $x2"

# actual tests with schema, record, options, and expected errors
tests:


- check: valid record
  schema: 021A
  record: 021A

- check: valid record with repeatable field
  schema: 021A-repeatable
  record: 021A-repeated

- check: valid record with ordered subfields
  schema: 021A
  record: 021A-ordered-subfields

- check: non-repeatbale field repeated
  schema: 021A
  record: 021A-repeated
  errors:
  - message: field 021A is not repeatable
    repeated: 1
    tag: 021A

- check: multiple errors
  schema: 021A
  record: 099X
  errors:
  - message: unknown field 099X
    tag: 099X
  - message: missing field 021A
    required: 1
    tag: 021A

- check: unknown field ignored
  schema: 021A-repeatable
  record: 099X
  options:
    ignore_unknown_fields: 1

- check: unknown fields and subfields ignored
  schema: 021A-repeatable
  record: 099X
  options:
    ignore_unknown: 1

- check: unknown subfield
  schema: 021A-empty-subfields
  record: 021A
  errors:
  - message: unknown subfield 021A$a
    tag: 021A
    subfields:
      a:
        code: a
        message: unknown subfield 021A$a

- check: unknown subfield ignored
  schema: 021A-empty-subfields
  record: 021A
  options:
    ignore_unknown_subfields: 1

- check: non-repeatable subfield repeated
  schema: 021A
  record: 021A-repeated-subfield
  errors:
  - message: invalid subfield 021A$a
    tag: 021A
    subfields:
      a:
        code: a
        message: subfield 021A$a is not repeatable
        repeated: 1

- check: missing subfield
  schema: 021A
  record: 021A-missing-subfield
  errors:
  - message: invalid subfield 021A$a
    tag: 021A
    subfields:
      a:
        code: a
        message: missing subfield 021A$a
        required: 1

- check: wrong subfield order
  schema: 021A
  record: 021A-unordered-subfields
  errors:
  - message: invalid subfield 021A$a
    tag: 021A
    subfields:
      a:
        code: a
        order: 1
        message: wrong subfield order of 021A$a

- check: subfield order ignored
  schema: 021A
  record: 021A-unordered-subfields
  options:
    ignore_subfield_order: 1

- check: occurrence missing
  schema: occurrences
  record: occurrences-missing
  errors:
  - tag: 028C
    message: unknown field 028C
  - tag: 028C
    occurrence: '01'
    message: missing field 028C/01
    required: 1

- check: occurrence not missing
  schema: occurrences
  record: occurrences

- check: occurrence in range
  schema: occurrence-range
  record: occurrences

- check: occurrence zero=none in range
  schema: occurrence-range
  record: occurrences-missing

- check: subfield does not match pattern
  schema: pattern
  record: 021A
  errors:
  - message: invalid subfield 021A$a
    tag: 021A
    subfields:
      a:
        code: a
        value: title
        pattern: x
        message: value of subfield 021A$a does not match pattern x

- check: positions match
  schema: positions
  record: 099X

- check: positions do not match (value too short)
  schema: positions
  record: 099X-short
  errors:
  - message: invalid subfield 099X$x
    tag: 099X
    subfields:
      x:
        code: x
        value: y
        position: 2-3
        message: invalid value at position 2-3 of subfield 099X$x

- check: positions do not match
  schema: positions
  record: 099X-wrong
  errors:
  - message: invalid subfield 099X$x
    tag: 099X
    subfields:
      x:
        code: x
        value: aa
        position: 2-3
        message: invalid value at position 2-3 of subfield 099X$x

# TODO:
# - check fields in level 1 (uniqueness/required per local copy)
# - check fields in level 2 (required per local copy)
# - check x-fields

- check: level2 field repeated
  schema: level2
  record: level2notok
  errors:
  - message: field 200A is not repeatable
    tag: 200A
    repeated: 1

- check: level2 field repeated but different occurrence
  schema: level2
  record: level2ok