|
8 | 8 | from uipath.platform import UiPathApiConfig, UiPathExecutionContext |
9 | 9 | from uipath.platform.common.constants import ( |
10 | 10 | ENV_JOB_KEY, |
| 11 | + HEADER_FOLDER_KEY, |
11 | 12 | HEADER_JOB_KEY, |
12 | 13 | HEADER_USER_AGENT, |
13 | 14 | ) |
@@ -3918,3 +3919,61 @@ def test_ingest_data_omits_job_key_header_when_env_unset( |
3918 | 3919 |
|
3919 | 3920 | headers = mock_request.call_args[1]["headers"] |
3920 | 3921 | assert HEADER_JOB_KEY not in headers |
| 3922 | + |
| 3923 | + |
| 3924 | +class TestRetrieveByIdFolderScoping: |
| 3925 | + """retrieve_by_id must not send a folder header. |
| 3926 | +
|
| 3927 | + Indexes are looked up by id tenant-wide. Ephemeral indexes are created |
| 3928 | + tenant-scoped, so sending x-uipath-folderkey on the GET scopes the lookup to |
| 3929 | + a folder the index does not live in, producing a 404 "Schema not found". |
| 3930 | + Regression: ECS-1819. |
| 3931 | + """ |
| 3932 | + |
| 3933 | + def test_omits_folder_header_even_with_ambient_folder( |
| 3934 | + self, |
| 3935 | + service: ContextGroundingService, |
| 3936 | + monkeypatch: pytest.MonkeyPatch, |
| 3937 | + ) -> None: |
| 3938 | + monkeypatch.delenv(ENV_JOB_KEY, raising=False) |
| 3939 | + # Simulate running inside a folder context (e.g. UIPATH_FOLDER_KEY set). |
| 3940 | + service._folder_key = "ambient-folder-key" |
| 3941 | + |
| 3942 | + with patch.object(service, "request") as mock_request: |
| 3943 | + mock_request.return_value = MagicMock() |
| 3944 | + service.retrieve_by_id("ephemeral-index-id") |
| 3945 | + |
| 3946 | + headers = mock_request.call_args[1]["headers"] |
| 3947 | + assert HEADER_FOLDER_KEY not in headers |
| 3948 | + |
| 3949 | + @pytest.mark.anyio |
| 3950 | + async def test_async_omits_folder_header_even_with_ambient_folder( |
| 3951 | + self, |
| 3952 | + service: ContextGroundingService, |
| 3953 | + monkeypatch: pytest.MonkeyPatch, |
| 3954 | + ) -> None: |
| 3955 | + monkeypatch.delenv(ENV_JOB_KEY, raising=False) |
| 3956 | + service._folder_key = "ambient-folder-key" |
| 3957 | + |
| 3958 | + with patch.object(service, "request_async") as mock_request: |
| 3959 | + mock_request.return_value = MagicMock() |
| 3960 | + await service.retrieve_by_id_async("ephemeral-index-id") |
| 3961 | + |
| 3962 | + headers = mock_request.call_args[1]["headers"] |
| 3963 | + assert HEADER_FOLDER_KEY not in headers |
| 3964 | + |
| 3965 | + def test_still_carries_job_key( |
| 3966 | + self, |
| 3967 | + service: ContextGroundingService, |
| 3968 | + monkeypatch: pytest.MonkeyPatch, |
| 3969 | + ) -> None: |
| 3970 | + monkeypatch.setenv(ENV_JOB_KEY, "job-key-retrieve") |
| 3971 | + service._folder_key = "ambient-folder-key" |
| 3972 | + |
| 3973 | + with patch.object(service, "request") as mock_request: |
| 3974 | + mock_request.return_value = MagicMock() |
| 3975 | + service.retrieve_by_id("ephemeral-index-id") |
| 3976 | + |
| 3977 | + headers = mock_request.call_args[1]["headers"] |
| 3978 | + assert headers[HEADER_JOB_KEY] == "job-key-retrieve" |
| 3979 | + assert HEADER_FOLDER_KEY not in headers |
0 commit comments