1import pytest 2from frictionless import validate 3 4 5# General 6 7 8def test_validate_inquiry(): 9 report = validate({"tasks": [{"source": "data/table.csv"}]}) 10 assert report.valid 11 12 13def test_validate_inquiry_multiple(): 14 report = validate( 15 {"tasks": [{"source": "data/table.csv"}, {"source": "data/matrix.csv"}]}, 16 ) 17 assert report.valid 18 19 20def test_validate_inquiry_multiple_invalid(): 21 report = validate( 22 {"tasks": [{"source": "data/table.csv"}, {"source": "data/invalid.csv"}]}, 23 ) 24 assert report.flatten(["taskPosition", "rowPosition", "fieldPosition", "code"]) == [ 25 [2, None, 3, "blank-label"], 26 [2, None, 4, "duplicate-label"], 27 [2, 2, 3, "missing-cell"], 28 [2, 2, 4, "missing-cell"], 29 [2, 3, 3, "missing-cell"], 30 [2, 3, 4, "missing-cell"], 31 [2, 4, None, "blank-row"], 32 [2, 5, 5, "extra-cell"], 33 ] 34 35 36def test_validate_inquiry_multiple_invalid_limit_errors(): 37 report = validate( 38 { 39 "tasks": [ 40 {"source": "data/table.csv"}, 41 {"source": "data/invalid.csv", "limitErrors": 1}, 42 ] 43 }, 44 ) 45 assert report.flatten(["taskPosition", "code", "note"]) == [ 46 [2, "blank-label", ""], 47 ] 48 assert report.tasks[0].flatten(["rowPosition", "fieldPosition", "code"]) == [] 49 assert report.tasks[1].flatten(["rowPosition", "fieldPosition", "code"]) == [ 50 [None, 3, "blank-label"], 51 ] 52 53 54def test_validate_inquiry_multiple_invalid_with_schema(): 55 report = validate( 56 { 57 "tasks": [ 58 { 59 "source": "data/table.csv", 60 "schema": {"fields": [{"name": "bad"}, {"name": "name"}]}, 61 }, 62 {"source": "data/invalid.csv"}, 63 ], 64 }, 65 ) 66 assert report.flatten(["taskPosition", "rowPosition", "fieldPosition", "code"]) == [ 67 [1, None, 1, "incorrect-label"], 68 [2, None, 3, "blank-label"], 69 [2, None, 4, "duplicate-label"], 70 [2, 2, 3, "missing-cell"], 71 [2, 2, 4, "missing-cell"], 72 [2, 3, 3, "missing-cell"], 73 [2, 3, 4, "missing-cell"], 74 [2, 4, None, "blank-row"], 75 [2, 5, 5, "extra-cell"], 76 ] 77 78 79def test_validate_inquiry_with_one_package(): 80 report = validate( 81 {"tasks": [{"source": "data/package/datapackage.json"}]}, 82 ) 83 assert report.valid 84 85 86def test_validate_inquiry_with_multiple_packages(): 87 report = validate( 88 { 89 "tasks": [ 90 {"source": "data/package/datapackage.json"}, 91 {"source": "data/invalid/datapackage.json"}, 92 ] 93 }, 94 ) 95 assert report.flatten(["taskPosition", "rowPosition", "fieldPosition", "code"]) == [ 96 [3, 3, None, "blank-row"], 97 [3, 3, None, "primary-key-error"], 98 [4, 4, None, "blank-row"], 99 ] 100 101 102# Parallel 103 104 105@pytest.mark.ci 106def test_validate_inquiry_parallel_multiple(): 107 report = validate( 108 {"tasks": [{"source": "data/table.csv"}, {"source": "data/matrix.csv"}]}, 109 parallel=True, 110 ) 111 assert report.valid 112 113 114@pytest.mark.ci 115def test_validate_inquiry_parallel_multiple_invalid(): 116 report = validate( 117 {"tasks": [{"source": "data/table.csv"}, {"source": "data/invalid.csv"}]}, 118 parallel=True, 119 ) 120 assert report.flatten(["taskPosition", "rowPosition", "fieldPosition", "code"]) == [ 121 [2, None, 3, "blank-label"], 122 [2, None, 4, "duplicate-label"], 123 [2, 2, 3, "missing-cell"], 124 [2, 2, 4, "missing-cell"], 125 [2, 3, 3, "missing-cell"], 126 [2, 3, 4, "missing-cell"], 127 [2, 4, None, "blank-row"], 128 [2, 5, 5, "extra-cell"], 129 ] 130 131 132@pytest.mark.ci 133def test_validate_inquiry_with_multiple_packages_with_parallel(): 134 report = validate( 135 { 136 "tasks": [ 137 {"source": "data/package/datapackage.json"}, 138 {"source": "data/invalid/datapackage.json"}, 139 ] 140 }, 141 parallel=True, 142 ) 143 assert report.flatten(["taskPosition", "rowPosition", "fieldPosition", "code"]) == [ 144 [3, 3, None, "blank-row"], 145 [3, 3, None, "primary-key-error"], 146 [4, 4, None, "blank-row"], 147 ] 148