============================= 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: anyio-4.14.2, respx-0.23.1, asyncio-1.4.0
asyncio: mode=Mode.AUTO, debug=False, asyncio_default_fixture_loop_scope=None, asyncio_default_test_loop_scope=function
collecting ... collected 112 items

tests/tests_for_api_utilities.py::test_build_auth_defaults_to_private_token PASSED [  0%]
tests/tests_for_api_utilities.py::test_build_auth_selects_bearer_for_oauth PASSED [  1%]
tests/tests_for_api_utilities.py::test_bearer_scheme_sends_authorization_header PASSED [  2%]
tests/tests_for_api_utilities.py::test_encode_path_segment PASSED        [  3%]
tests/tests_for_api_utilities.py::test_paginate_consumes_x_next_page PASSED [  4%]
tests/tests_for_api_utilities.py::test_async_retry_http_aborts_on_ignored_status PASSED [  5%]
tests/tests_for_api_utilities.py::test_async_retry_http_retries_on_5xx PASSED [  6%]
tests/tests_for_api_utilities.py::test_upload_to_project_returns_markdown PASSED [  7%]
tests/tests_for_git_sync_service.py::test_build_remote_url[https://gitlab.example.com-g/s/n-https://gitlab.example.com/g/s/n.git] PASSED [  8%]
tests/tests_for_git_sync_service.py::test_build_remote_url[https://gitlab.example.com/-/g/n/-https://gitlab.example.com/g/n.git] PASSED [  8%]
tests/tests_for_git_sync_service.py::test_build_remote_url[https://gitlab.example.com-g/n.git-https://gitlab.example.com/g/n.git] PASSED [  9%]
tests/tests_for_git_sync_service.py::test_build_remote_url_empty_repo_errors PASSED [ 10%]
tests/tests_for_git_sync_service.py::test_default_target_dir[developers/claude-skills-claude-skills] PASSED [ 11%]
tests/tests_for_git_sync_service.py::test_default_target_dir[g/s/name.git-name] PASSED [ 12%]
tests/tests_for_git_sync_service.py::test_default_target_dir[solo-solo] PASSED [ 13%]
tests/tests_for_git_sync_service.py::test_clone_when_target_missing PASSED [ 14%]
tests/tests_for_git_sync_service.py::test_clone_passes_token_via_askpass_env_only PASSED [ 15%]
tests/tests_for_git_sync_service.py::test_clone_with_branch PASSED       [ 16%]
tests/tests_for_git_sync_service.py::test_update_when_target_is_repo PASSED [ 16%]
tests/tests_for_git_sync_service.py::test_update_with_existing_branch_checks_out_and_ff PASSED [ 17%]
tests/tests_for_git_sync_service.py::test_update_with_new_branch_creates_from_fetch_head PASSED [ 18%]
tests/tests_for_git_sync_service.py::test_update_adds_origin_when_absent PASSED [ 19%]
tests/tests_for_git_sync_service.py::test_update_detached_head_errors PASSED [ 20%]
tests/tests_for_git_sync_service.py::test_clone_failure_removes_partial_target PASSED [ 21%]
tests/tests_for_git_sync_service.py::test_target_exists_but_not_a_repo_errors PASSED [ 22%]
tests/tests_for_git_sync_service.py::test_missing_token_errors PASSED    [ 23%]
tests/tests_for_git_sync_service.py::test_ff_only_failure_propagates PASSED [ 24%]
tests/tests_for_issues_service.py::test_search_issues_paginates PASSED   [ 25%]
tests/tests_for_issues_service.py::test_create_issue_with_image_uploads_first_then_creates PASSED [ 25%]
tests/tests_for_issues_service.py::test_set_issue_state PASSED           [ 26%]
tests/tests_for_issues_service.py::test_set_issue_labels_modes PASSED    [ 27%]
tests/tests_for_issues_service.py::test_aggregate_issues_by_label PASSED [ 28%]
tests/tests_for_issues_service.py::test_comment_on_issue PASSED          [ 29%]
tests/tests_for_issues_service.py::test_list_issue_notes_delegates_to_notes_service PASSED [ 30%]
tests/tests_for_merge_requests_service.py::test_get_merge_request PASSED [ 31%]
tests/tests_for_merge_requests_service.py::test_comment_on_merge_request PASSED [ 32%]
tests/tests_for_merge_requests_service.py::test_inline_diff_comment_payload_shape PASSED [ 33%]
tests/tests_for_merge_requests_service.py::test_approve_and_unapprove PASSED [ 33%]
tests/tests_for_merge_requests_service.py::test_list_merge_request_notes_delegates_to_notes_service PASSED [ 34%]
tests/tests_for_models.py::test_config_api_base_url_strips_trailing_slash PASSED [ 35%]
tests/tests_for_models.py::test_issue_extra_fields_ignored PASSED        [ 36%]
tests/tests_for_models.py::test_merge_request_basic PASSED               [ 37%]
tests/tests_for_models.py::test_config_env_loading PASSED                [ 38%]
tests/tests_for_notes_service.py::test_list_notes_for_merge_request PASSED [ 39%]
tests/tests_for_notes_service.py::test_list_notes_for_issue_uses_the_issue_path PASSED [ 40%]
tests/tests_for_notes_service.py::test_list_notes_can_drop_system_notes PASSED [ 41%]
tests/tests_for_notes_service.py::test_list_notes_forwards_sort_and_order_by PASSED [ 41%]
tests/tests_for_notes_service.py::test_get_note PASSED                   [ 42%]
tests/tests_for_notes_service.py::test_list_discussions_groups_notes_into_threads PASSED [ 43%]
tests/tests_for_notes_service.py::test_list_discussions_dropping_system_notes_drops_emptied_threads PASSED [ 44%]
tests/tests_for_notes_service.py::test_get_discussion PASSED             [ 45%]
tests/tests_for_notes_service.py::test_reply_to_discussion_posts_to_the_thread PASSED [ 46%]
tests/tests_for_notes_service.py::test_reply_to_note_resolves_the_containing_thread PASSED [ 47%]
tests/tests_for_notes_service.py::test_reply_to_note_raises_when_the_note_is_not_there PASSED [ 48%]
tests/tests_for_notes_service.py::test_find_discussion_for_note_returns_none_when_absent PASSED [ 49%]
tests/tests_for_notes_service.py::test_quick_action_only_reply_raises_a_useful_error PASSED [ 50%]
tests/tests_for_notes_service.py::test_notes_paginate_across_pages PASSED [ 50%]
tests/tests_for_oauth_cli.py::test_missing_client_id_errors PASSED       [ 51%]
tests/tests_for_oauth_cli.py::test_success_prints_only_token PASSED      [ 52%]
tests/tests_for_oauth_cli.py::test_reads_config_from_env PASSED          [ 53%]
tests/tests_for_oauth_cli.py::test_bad_redirect_port_errors PASSED       [ 54%]
tests/tests_for_oauth_cli.py::test_oauth_error_returns_one PASSED        [ 55%]
tests/tests_for_oauth_service.py::test_make_pkce_challenge_is_s256_of_verifier PASSED [ 56%]
tests/tests_for_oauth_service.py::test_cache_path_is_per_host_and_private PASSED [ 57%]
tests/tests_for_oauth_service.py::test_token_if_valid_expiry PASSED      [ 58%]
tests/tests_for_oauth_service.py::test_store_token_response_roundtrip PASSED [ 58%]
tests/tests_for_oauth_service.py::test_store_token_response_requires_access_token PASSED [ 59%]
tests/tests_for_oauth_service.py::test_refresh_access_token_success PASSED [ 60%]
tests/tests_for_oauth_service.py::test_refresh_access_token_returns_none_on_error PASSED [ 61%]
tests/tests_for_oauth_service.py::test_get_access_token_reuses_valid_cache PASSED [ 62%]
tests/tests_for_oauth_service.py::test_get_access_token_refreshes_expired_cache PASSED [ 63%]
tests/tests_for_oauth_service.py::test_get_access_token_requires_client_id PASSED [ 64%]
tests/tests_for_packages_service.py::test_upload_generic_package_url_shape PASSED [ 65%]
tests/tests_for_packages_service.py::test_download_generic_package PASSED [ 66%]
tests/tests_for_packages_service.py::test_list_packages PASSED           [ 66%]
tests/tests_for_repo_files_service.py::test_get_file_url_encoded PASSED  [ 67%]
tests/tests_for_repo_files_service.py::test_download_file_writes_to_dest PASSED [ 68%]
tests/tests_for_repo_files_service.py::test_download_directory_walks_tree PASSED [ 69%]
tests/tests_for_sync_cli.py::test_missing_repo_errors PASSED             [ 70%]
tests/tests_for_sync_cli.py::test_missing_client_id_errors PASSED        [ 71%]
tests/tests_for_sync_cli.py::test_success_prints_path_and_forwards_args PASSED [ 72%]
tests/tests_for_sync_cli.py::test_reads_config_from_env PASSED           [ 73%]
tests/tests_for_sync_cli.py::test_oauth_error_returns_one PASSED         [ 74%]
tests/tests_for_sync_cli.py::test_sync_error_returns_one PASSED          [ 75%]
tests/tests_for_sync_cli.py::test_bad_redirect_port_errors PASSED        [ 75%]
tests/tests_for_work_items_service.py::test_make_work_item_gid_passthrough_and_coerce PASSED [ 76%]
tests/tests_for_work_items_service.py::test_work_item_from_node_flattens_widgets PASSED [ 77%]
tests/tests_for_work_items_service.py::test_graphql_raises_on_errors PASSED [ 78%]
tests/tests_for_work_items_service.py::test_paginate_graphql_follows_end_cursor PASSED [ 79%]
tests/tests_for_work_items_service.py::test_get_work_item_by_global_id PASSED [ 80%]
tests/tests_for_work_items_service.py::test_get_work_item_by_project_path_and_iid_uses_namespace_lookup PASSED [ 81%]
tests/tests_for_work_items_service.py::test_get_work_item_omits_the_status_widget_by_default PASSED [ 82%]
tests/tests_for_work_items_service.py::test_get_work_item_include_status_selects_the_widget_and_lifts_it PASSED [ 83%]
tests/tests_for_work_items_service.py::test_get_work_item_missing_raises PASSED [ 83%]
tests/tests_for_work_items_service.py::test_get_work_item_status_by_project_path_and_iid PASSED [ 84%]
tests/tests_for_work_items_service.py::test_get_work_item_status_by_global_id_skips_the_iid_lookup PASSED [ 85%]
tests/tests_for_work_items_service.py::test_get_work_item_status_returns_none_when_no_status_is_assigned PASSED [ 86%]
tests/tests_for_work_items_service.py::test_get_work_item_status_missing_item_raises PASSED [ 87%]
tests/tests_for_work_items_service.py::test_search_work_items_paginates_and_translates_state PASSED [ 88%]
tests/tests_for_work_items_service.py::test_search_work_items_group_scope_uses_group_field PASSED [ 89%]
tests/tests_for_work_items_service.py::test_search_work_items_include_status_selects_the_widget PASSED [ 90%]
tests/tests_for_work_items_service.py::test_search_work_items_requires_one_scope PASSED [ 91%]
tests/tests_for_work_items_service.py::test_set_work_item_state_closes_via_workItemUpdate PASSED [ 91%]
tests/tests_for_work_items_service.py::test_set_work_item_state_mutation_errors_raise PASSED [ 92%]
tests/tests_for_work_items_service.py::test_list_work_item_notes_filters_system_notes PASSED [ 93%]
tests/tests_for_work_items_service.py::test_comment_on_work_item_creates_note PASSED [ 94%]
tests/tests_for_work_items_service.py::test_reply_to_work_item_discussion_threads_via_discussion_id PASSED [ 95%]
tests/tests_for_work_items_service.py::test_set_work_item_labels_add_passes_addLabelIds PASSED [ 96%]
tests/tests_for_work_items_service.py::test_set_work_item_labels_remove_passes_removeLabelIds PASSED [ 97%]
tests/tests_for_work_items_service.py::test_list_labels_for_project_includes_ancestor_groups PASSED [ 98%]
tests/tests_for_work_items_service.py::test_create_label_passes_project_path_color_and_description PASSED [ 99%]
tests/tests_for_work_items_service.py::test_create_label_group_scope_passes_group_path PASSED [100%]

============================= 112 passed in 2.66s ==============================
