Skip to content

Commit 7a8f022

Browse files
committed
refactor: centralize reference value fixing in generate_random_value
1 parent 91241f5 commit 7a8f022

File tree

1 file changed

+20
-14
lines changed

1 file changed

+20
-14
lines changed

scim2_tester/filling.py

Lines changed: 20 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -160,7 +160,7 @@ def generate_random_value(
160160
if is_multiple:
161161
value = [value]
162162

163-
return value
163+
return fix_reference_values_in_value(value)
164164

165165

166166
def fill_with_random_values(
@@ -202,27 +202,33 @@ def fill_with_random_values(
202202
set_value_by_urn(obj, urn, value)
203203

204204
fix_primary_attributes(obj)
205-
fix_reference_values(obj)
206205

207206
return obj
208207

209208

210-
def fix_reference_values(obj: Resource[Any]) -> None:
211-
"""Fix reference values to extract IDs from reference URLs.
209+
def fix_reference_values_in_value(value: Any) -> Any:
210+
"""Fix reference values in any value to extract IDs from reference URLs.
212211
213212
For SCIM reference fields, correctly sets the value field to match
214-
the ID extracted from the reference URL.
213+
the ID extracted from the reference URL. Works with both single values
214+
and lists containing reference objects.
215215
"""
216-
for field_name, _field_info in type(obj).model_fields.items():
217-
attr_value = getattr(obj, field_name, None)
218-
if not attr_value or not isinstance(attr_value, list):
219-
continue
216+
if isinstance(value, list):
217+
for item in value:
218+
if (
219+
hasattr(item, "ref")
220+
and hasattr(item, "value")
221+
and getattr(item, "ref", None)
222+
):
223+
item.value = item.ref.rsplit("/", 1)[-1]
224+
elif (
225+
hasattr(value, "ref")
226+
and hasattr(value, "value")
227+
and getattr(value, "ref", None)
228+
):
229+
value.value = value.ref.rsplit("/", 1)[-1]
220230

221-
for item in attr_value:
222-
if not (ref := getattr(item, "ref", None)) or not hasattr(item, "value"):
223-
continue
224-
225-
item.value = ref.rsplit("/", 1)[-1]
231+
return value
226232

227233

228234
def fix_primary_attributes(obj: Resource[Any]) -> None:

0 commit comments

Comments
 (0)