============================= test session starts ==============================
platform linux -- Python 3.12.3, pytest-9.1.1, pluggy-1.6.0 -- /venv/bin/python3
cachedir: .pytest_cache
rootdir: /builds/keystone/python/pjdev-gitlab
configfile: pyproject.toml
plugins: asyncio-1.4.0, respx-0.23.1, anyio-4.14.1
asyncio: mode=Mode.AUTO, debug=False, asyncio_default_fixture_loop_scope=None, asyncio_default_test_loop_scope=function
collecting ... collected 58 items

tests/tests_for_api_utilities.py::test_build_auth_defaults_to_private_token PASSED [  1%]
tests/tests_for_api_utilities.py::test_build_auth_selects_bearer_for_oauth PASSED [  3%]
tests/tests_for_api_utilities.py::test_bearer_scheme_sends_authorization_header PASSED [  5%]
tests/tests_for_api_utilities.py::test_encode_path_segment PASSED        [  6%]
tests/tests_for_api_utilities.py::test_paginate_consumes_x_next_page PASSED [  8%]
tests/tests_for_api_utilities.py::test_async_retry_http_aborts_on_ignored_status PASSED [ 10%]
tests/tests_for_api_utilities.py::test_async_retry_http_retries_on_5xx PASSED [ 12%]
tests/tests_for_api_utilities.py::test_upload_to_project_returns_markdown PASSED [ 13%]
tests/tests_for_issues_service.py::test_search_issues_paginates PASSED   [ 15%]
tests/tests_for_issues_service.py::test_create_issue_with_image_uploads_first_then_creates PASSED [ 17%]
tests/tests_for_issues_service.py::test_set_issue_state PASSED           [ 18%]
tests/tests_for_issues_service.py::test_set_issue_labels_modes PASSED    [ 20%]
tests/tests_for_issues_service.py::test_aggregate_issues_by_label PASSED [ 22%]
tests/tests_for_issues_service.py::test_comment_on_issue PASSED          [ 24%]
tests/tests_for_merge_requests_service.py::test_get_merge_request PASSED [ 25%]
tests/tests_for_merge_requests_service.py::test_comment_on_merge_request PASSED [ 27%]
tests/tests_for_merge_requests_service.py::test_inline_diff_comment_payload_shape PASSED [ 29%]
tests/tests_for_merge_requests_service.py::test_approve_and_unapprove PASSED [ 31%]
tests/tests_for_models.py::test_config_api_base_url_strips_trailing_slash PASSED [ 32%]
tests/tests_for_models.py::test_issue_extra_fields_ignored PASSED        [ 34%]
tests/tests_for_models.py::test_merge_request_basic PASSED               [ 36%]
tests/tests_for_models.py::test_config_env_loading PASSED                [ 37%]
tests/tests_for_oauth_service.py::test_make_pkce_challenge_is_s256_of_verifier PASSED [ 39%]
tests/tests_for_oauth_service.py::test_cache_path_is_per_host_and_private PASSED [ 41%]
tests/tests_for_oauth_service.py::test_token_if_valid_expiry PASSED      [ 43%]
tests/tests_for_oauth_service.py::test_store_token_response_roundtrip PASSED [ 44%]
tests/tests_for_oauth_service.py::test_store_token_response_requires_access_token PASSED [ 46%]
tests/tests_for_oauth_service.py::test_refresh_access_token_success PASSED [ 48%]
tests/tests_for_oauth_service.py::test_refresh_access_token_returns_none_on_error PASSED [ 50%]
tests/tests_for_oauth_service.py::test_get_access_token_reuses_valid_cache PASSED [ 51%]
tests/tests_for_oauth_service.py::test_get_access_token_refreshes_expired_cache PASSED [ 53%]
tests/tests_for_oauth_service.py::test_get_access_token_requires_client_id PASSED [ 55%]
tests/tests_for_packages_service.py::test_upload_generic_package_url_shape PASSED [ 56%]
tests/tests_for_packages_service.py::test_download_generic_package PASSED [ 58%]
tests/tests_for_packages_service.py::test_list_packages PASSED           [ 60%]
tests/tests_for_repo_files_service.py::test_get_file_url_encoded PASSED  [ 62%]
tests/tests_for_repo_files_service.py::test_download_file_writes_to_dest PASSED [ 63%]
tests/tests_for_repo_files_service.py::test_download_directory_walks_tree PASSED [ 65%]
tests/tests_for_work_items_service.py::test_make_work_item_gid_passthrough_and_coerce PASSED [ 67%]
tests/tests_for_work_items_service.py::test_work_item_from_node_flattens_widgets PASSED [ 68%]
tests/tests_for_work_items_service.py::test_graphql_raises_on_errors PASSED [ 70%]
tests/tests_for_work_items_service.py::test_paginate_graphql_follows_end_cursor PASSED [ 72%]
tests/tests_for_work_items_service.py::test_get_work_item_by_global_id PASSED [ 74%]
tests/tests_for_work_items_service.py::test_get_work_item_by_project_path_and_iid_uses_namespace_lookup PASSED [ 75%]
tests/tests_for_work_items_service.py::test_get_work_item_missing_raises PASSED [ 77%]
tests/tests_for_work_items_service.py::test_search_work_items_paginates_and_translates_state PASSED [ 79%]
tests/tests_for_work_items_service.py::test_search_work_items_group_scope_uses_group_field PASSED [ 81%]
tests/tests_for_work_items_service.py::test_search_work_items_requires_one_scope PASSED [ 82%]
tests/tests_for_work_items_service.py::test_set_work_item_state_closes_via_workItemUpdate PASSED [ 84%]
tests/tests_for_work_items_service.py::test_set_work_item_state_mutation_errors_raise PASSED [ 86%]
tests/tests_for_work_items_service.py::test_list_work_item_notes_filters_system_notes PASSED [ 87%]
tests/tests_for_work_items_service.py::test_comment_on_work_item_creates_note PASSED [ 89%]
tests/tests_for_work_items_service.py::test_reply_to_work_item_discussion_threads_via_discussion_id PASSED [ 91%]
tests/tests_for_work_items_service.py::test_set_work_item_labels_add_passes_addLabelIds PASSED [ 93%]
tests/tests_for_work_items_service.py::test_set_work_item_labels_remove_passes_removeLabelIds PASSED [ 94%]
tests/tests_for_work_items_service.py::test_list_labels_for_project_includes_ancestor_groups PASSED [ 96%]
tests/tests_for_work_items_service.py::test_create_label_passes_project_path_color_and_description PASSED [ 98%]
tests/tests_for_work_items_service.py::test_create_label_group_scope_passes_group_path PASSED [100%]

============================== 58 passed in 1.76s ==============================
