-
-
Notifications
You must be signed in to change notification settings - Fork 9
Expand file tree
/
Copy pathtest_path_validation.py
More file actions
93 lines (73 loc) · 3.38 KB
/
test_path_validation.py
File metadata and controls
93 lines (73 loc) · 3.38 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
"""Tests for SCIM path validation utilities."""
from scim2_models.utils import validate_scim_path_syntax
from scim2_models.utils import validate_scim_urn_syntax
def test_validate_scim_path_syntax_valid_paths():
"""Test that valid SCIM paths are accepted."""
valid_paths = [
"userName",
"name.familyName",
"emails.value",
"groups.display",
"urn:ietf:params:scim:schemas:core:2.0:User:userName",
"urn:ietf:params:scim:schemas:extension:enterprise:2.0:User:employeeNumber",
'emails[type eq "work"].value',
'groups[display eq "Admin"]',
"meta.lastModified",
]
for path in valid_paths:
assert validate_scim_path_syntax(path), f"Path should be valid: {path}"
def test_validate_scim_path_syntax_invalid_paths():
"""Test that invalid SCIM paths are rejected."""
invalid_paths = [
"", # Empty string
" ", # Whitespace only
"123invalid", # Starts with digit
"invalid..path", # Double dots
"invalid@path", # Invalid character
"urn:invalid", # Invalid URN format
"urn:too:short", # URN too short
]
for path in invalid_paths:
assert not validate_scim_path_syntax(path), f"Path should be invalid: {path}"
def test_validate_scim_urn_syntax_valid_urns():
"""Test that valid SCIM URN paths are accepted."""
valid_urns = [
"urn:ietf:params:scim:schemas:core:2.0:User:userName",
"urn:ietf:params:scim:schemas:extension:enterprise:2.0:User:employeeNumber",
"urn:custom:namespace:schema:1.0:Resource:attribute",
"urn:example:extension:v2:MyResource:customField",
]
for urn in valid_urns:
assert validate_scim_urn_syntax(urn), f"URN should be valid: {urn}"
def test_validate_scim_urn_syntax_invalid_urns():
"""Test that invalid SCIM URN paths are rejected."""
invalid_urns = [
"not_an_urn", # Doesn't start with urn:
"urn:too:short", # Not enough segments
"urn:ietf:params:scim:schemas:core:2.0:User:", # Empty attribute
"urn:ietf:params:scim:schemas:core:2.0:User:123invalid", # Attribute starts with digit
"urn:invalid", # Too short
"urn:only:two:attribute", # URN part too short
]
for urn in invalid_urns:
assert not validate_scim_urn_syntax(urn), f"URN should be invalid: {urn}"
def test_validate_scim_path_syntax_edge_cases():
"""Test edge cases for path validation."""
# Test None handling (shouldn't happen in practice but defensive)
assert not validate_scim_path_syntax("")
# Test borderline valid cases
assert validate_scim_path_syntax("a") # Single character
assert validate_scim_path_syntax("a.b") # Simple dotted
assert validate_scim_path_syntax("a_b") # Underscore
assert validate_scim_path_syntax("a-b") # Hyphen
# Test borderline invalid cases
assert not validate_scim_path_syntax("9invalid") # Starts with digit
assert not validate_scim_path_syntax("a..b") # Double dots
def test_validate_scim_urn_syntax_edge_cases():
"""Test edge cases for URN validation."""
# Test minimal valid URN
assert validate_scim_urn_syntax("urn:a:b:c:d")
# Test boundary cases
assert not validate_scim_urn_syntax("urn:a:b:c:") # Empty attribute
assert not validate_scim_urn_syntax("urn:a:b:") # Missing resource
assert not validate_scim_urn_syntax("urn:") # Just urn: