|
1 | | -from scim2_client.engines.httpx import SyncSCIMClient |
| 1 | +from typing import Any |
| 2 | + |
| 3 | +from scim2_client.engines.httpx2 import SyncSCIMClient |
2 | 4 |
|
3 | 5 | from scim2_tester.checkers import random_url |
4 | 6 | from scim2_tester.checkers import resource_type_tests |
|
11 | 13 | from scim2_tester.utils import Status |
12 | 14 |
|
13 | 15 |
|
| 16 | +def _discovered_objects(results: list[CheckResult]) -> Any: |
| 17 | + """Extract the objects a discovery endpoint exposed. |
| 18 | +
|
| 19 | + Discovery orchestrators run the check querying the whole collection first, |
| 20 | + so its result comes first. The data of the other statuses describes why the |
| 21 | + check failed and must not be mistaken for discovered objects. |
| 22 | + """ |
| 23 | + return results[0].data if results[0].status == Status.SUCCESS else None |
| 24 | + |
| 25 | + |
14 | 26 | def check_server( |
15 | 27 | client: SyncSCIMClient, |
16 | 28 | raise_exceptions: bool = False, |
@@ -72,29 +84,23 @@ def check_server( |
72 | 84 | context = CheckContext(client, conf) |
73 | 85 | results = [] |
74 | 86 |
|
75 | | - result_spc_list = service_provider_config_endpoint(context) |
76 | | - results.extend(result_spc_list) |
77 | | - result_spc = result_spc_list[0] # Get the first (and only) result |
78 | | - if result_spc.status != Status.SKIPPED and not client.service_provider_config: |
79 | | - client.service_provider_config = result_spc.data |
| 87 | + results_spc = service_provider_config_endpoint(context) |
| 88 | + results.extend(results_spc) |
| 89 | + if not client.service_provider_config: |
| 90 | + client.service_provider_config = _discovered_objects(results_spc) |
80 | 91 |
|
81 | 92 | results_resource_types = _resource_types_endpoint(context) |
82 | 93 | results.extend(results_resource_types) |
83 | 94 | if not client.resource_types: |
84 | | - for rt_result in results_resource_types: |
85 | | - if rt_result.status != Status.SKIPPED and rt_result.data: |
86 | | - client.resource_types = rt_result.data |
87 | | - break |
| 95 | + client.resource_types = _discovered_objects(results_resource_types) |
88 | 96 |
|
89 | 97 | results_schemas = _schemas_endpoint(context) |
90 | 98 | results.extend(results_schemas) |
91 | | - if not client.resource_models: |
92 | | - for schema_result in results_schemas: |
93 | | - if schema_result.status != Status.SKIPPED and schema_result.data: |
94 | | - client.resource_models = client.build_resource_models( |
95 | | - client.resource_types or [], schema_result.data or [] |
96 | | - ) |
97 | | - break |
| 99 | + schemas = _discovered_objects(results_schemas) |
| 100 | + if not client.resource_models and schemas: |
| 101 | + client.resource_models = client.build_resource_models( |
| 102 | + client.resource_types or [], schemas |
| 103 | + ) |
98 | 104 |
|
99 | 105 | if ( |
100 | 106 | not client.service_provider_config |
|
0 commit comments