Skip to content

Commit 0ff90ec

Browse files
committed
test: Allow sidecar expressions to include known column names
1 parent d73aa2a commit 0ff90ec

File tree

1 file changed

+20
-16
lines changed

1 file changed

+20
-16
lines changed

tools/schemacode/src/bidsschematools/tests/test_expressions.py

Lines changed: 20 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -110,25 +110,26 @@ def test_valid_sidecar_field(schema_obj):
110110
111111
Test failures are usually due to typos.
112112
"""
113-
field_names = {field.name for key, field in schema_obj.objects.metadata.items()}
113+
field_names = {field.name for field in schema_obj.objects.metadata.values()}
114+
# Sidecars can have column descriptions
115+
column_names = {column.name for column in schema_obj.objects.columns.values()}
116+
field_or_column_names = field_names | column_names
114117

115118
for key, rule in walk_schema(
116119
schema_obj.rules, lambda k, v: isinstance(v, Mapping) and v.get("selectors")
117120
):
118-
for selector in rule["selectors"]:
119-
ast = expression.parse_string(selector)[0]
120-
for name in find_names(ast):
121-
if name.startswith(("json.", "sidecar.")):
122-
assert name.split(".", 1)[1] in field_names, (
123-
f"Bad field in selector: {name} ({key})"
124-
)
125-
for check in rule.get("checks", []):
126-
ast = expression.parse_string(check)[0]
127-
for name in find_names(ast):
128-
if name.startswith(("json.", "sidecar.")):
129-
assert name.split(".", 1)[1] in field_names, (
130-
f"Bad field in check: {name} ({key})"
131-
)
121+
for expr_type in ("selector", "check"):
122+
for expr in rule.get(f"{expr_type}s", []):
123+
ast = expression.parse_string(expr)[0]
124+
for name in find_names(ast):
125+
if name.startswith("json."):
126+
assert name.split(".", 2)[1] in field_names, (
127+
f"Bad field in {expr_type}: {name} ({key})"
128+
)
129+
elif name.startswith("sidecar."):
130+
assert name.split(".", 2)[1] in field_or_column_names, (
131+
f"Bad field in {expr_type}: {name} ({key})"
132+
)
132133

133134

134135
def test_test_valid_sidecar_field():
@@ -137,7 +138,10 @@ def test_test_valid_sidecar_field():
137138
"objects": {
138139
"metadata": {
139140
"a": {"name": "a"},
140-
}
141+
},
142+
"columns": {
143+
"column": {"name": "column"},
144+
},
141145
},
142146
"rules": {"myruleA": {"selectors": ["sidecar.a"], "checks": ["json.a == sidecar.a"]}},
143147
}

0 commit comments

Comments
 (0)