Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
36 changes: 36 additions & 0 deletions schemata/dependencies.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,22 @@ $id: https://pglifecycle.readthedocs.io/en/stable/schemata/dependencies.html
title: Dependencies
type: object
properties:
aggregates:
type: array
propertyNames:
pattern: ^([A-Za-z0-9_\-]+)\.([A-Za-z0-9_\-]+)$
collations:
type: array
propertyNames:
pattern: ^([A-Za-z0-9_\-]+)\.([A-Za-z0-9_\-]+)$
domains:
type: array
propertyNames:
pattern: ^([A-Za-z0-9_\-]+)\.([A-Za-z0-9_\-]+)$
event_triggers:
type: array
propertyNames:
pattern: ^([A-Za-z0-9_\-]+)$
Comment thread
coderabbitai[bot] marked this conversation as resolved.
extensions:
type: array
propertyNames:
Expand All @@ -24,10 +36,26 @@ properties:
type: array
propertyNames:
pattern: ^([A-Za-z0-9_\-]+)$
materialized_views:
type: array
propertyNames:
pattern: ^([A-Za-z0-9_\-]+)\.([A-Za-z0-9_\-]+)$
publications:
type: array
propertyNames:
pattern: ^([A-Za-z0-9_\-]+)$
sequences:
type: array
propertyNames:
pattern: ^([A-Za-z0-9_\-]+)\.([A-Za-z0-9_\-]+)$
servers:
type: array
propertyNames:
pattern: ^([A-Za-z0-9_\-]+)$
subscriptions:
type: array
propertyNames:
pattern: ^([A-Za-z0-9_\-]+)$
tables:
type: array
propertyNames:
Expand All @@ -36,6 +64,14 @@ properties:
type: array
propertyNames:
pattern: ^([A-Za-z0-9_\-]+)\.([A-Za-z0-9_\-]+)$
user_mappings:
type: array
propertyNames:
pattern: ^([A-Za-z0-9_\-]+)$
users:
type: array
propertyNames:
pattern: ^([A-Za-z0-9_\-]+)$
views:
type: array
propertyNames:
Expand Down
31 changes: 31 additions & 0 deletions src/project/validate.rs
Original file line number Diff line number Diff line change
Expand Up @@ -126,4 +126,35 @@ mod tests {
assert!(items.get("properties").is_some());
assert!(items.get("$package_schema").is_none());
}

#[test]
fn dependencies_schema_accepts_every_object_type() {
// the dependencies schema previously listed only nine plural
// keys with additionalProperties: false, so a dependency on an
// aggregate/collation/event_trigger/materialized_view/etc. failed
// validation even though the loader recognized the key
let schema = load_schema("dependencies").unwrap();
let validator = jsonschema::validator_for(&schema).unwrap();
let widened = json!({
"aggregates": ["test.agg"],
"collations": ["test.c"],
"event_triggers": ["et"],
"materialized_views": ["test.mv"],
"publications": ["p"],
"servers": ["s"],
"subscriptions": ["sub"],
"user_mappings": ["um"],
"users": ["u"],
});
assert!(
validator.iter_errors(&widened).next().is_none(),
"widened dependency keys should validate"
);
// additionalProperties: false must still reject unknown keys
let unknown = json!({"bogus_type": ["x"]});
assert!(
validator.iter_errors(&unknown).next().is_some(),
"unknown dependency keys must still be rejected"
);
}
}