Skip to content

Commit c95cdea

Browse files
authored
Fixed createOnlyProperties check condition (#67)
1 parent 29cfbcd commit c95cdea

File tree

3 files changed

+51
-1
lines changed

3 files changed

+51
-1
lines changed

src/rpdk/guard_rail/rule_library/core/schema-linter-core-rules.guard

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ rule ensure_primary_identifier_is_read_or_create_only when ensure_primary_identi
6868
}
6969

7070
when readOnlyProperties !exists {
71-
createOnlyProperties !exists
71+
createOnlyProperties exists
7272
<<
7373
{
7474
"result": "NON_COMPLIANT",
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
{
2+
"createOnlyProperties": [
3+
"/properties/PolicyStoreId"
4+
],
5+
"primaryIdentifier": [
6+
"/properties/PolicyId",
7+
"/properties/PolicyStoreId"
8+
]
9+
}

tests/integ/runner/test_integ_runner.py

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -329,6 +329,47 @@ def test_exec_compliance_stateless(
329329
assert warning_result == compliance_result.warning[warning_rule]
330330

331331

332+
@pytest.mark.parametrize(
333+
"collected_schemas,non_compliant_rules",
334+
[
335+
(
336+
collect_schemas(
337+
schemas=[
338+
"file:/"
339+
+ str(
340+
Path(os.path.dirname(os.path.realpath(__file__))).joinpath(
341+
"../data/sample-schema-create-only-pid.json"
342+
)
343+
)
344+
]
345+
),
346+
{
347+
"ensure_primary_identifier_is_read_or_create_only": {
348+
GuardRuleResult(
349+
check_id="PID003",
350+
message="primaryIdentifier MUST be either readOnly or createOnly",
351+
path="/primaryIdentifier/0",
352+
)
353+
},
354+
},
355+
),
356+
],
357+
)
358+
def test_exec_compliance_stateless_createOnly_pid_fail(
359+
collected_schemas, non_compliant_rules
360+
):
361+
"""Test exec_compliance for stateless"""
362+
payload: Stateless = Stateless(schemas=collected_schemas, rules=[])
363+
compliance_result = exec_compliance(payload)[0]
364+
365+
# Assert for non-compliant rules
366+
for non_compliant_rule, non_compliant_result in non_compliant_rules.items():
367+
assert non_compliant_rule in compliance_result.non_compliant
368+
assert (
369+
non_compliant_result == compliance_result.non_compliant[non_compliant_rule]
370+
)
371+
372+
332373
@pytest.mark.parametrize(
333374
"collected_schemas,collected_rules,non_compliant_rules,warning_rules",
334375
[

0 commit comments

Comments
 (0)