Coverage for 3f2977b1232ae38831eef0a2f3309a066dfbe880: 100%

Files Functions Classes

coverage.py v7.16.0, created at 2026-11-09 00:25 +0000

File function   statements missing excluded   coverage
src/fastapi_cloud_cli/__init__.py (no function)   1 0 0   100%
src/fastapi_cloud_cli/__main__.py (no function)   2 0 0   100%
src/fastapi_cloud_cli/_app.py version_callback   3 0 0   100%
src/fastapi_cloud_cli/_app.py cloud_main   0 0 0   100%
src/fastapi_cloud_cli/_app.py (no function)   9 0 0   100%
src/fastapi_cloud_cli/api/__init__.py (no function)   22 0 0   100%
src/fastapi_cloud_cli/api/_errors.py StreamLogError.__init__   2 0 0   100%
src/fastapi_cloud_cli/api/_errors.py _handle_unauthorized   6 0 0   100%
src/fastapi_cloud_cli/api/_errors.py _get_response_error_message   10 0 2   100%
src/fastapi_cloud_cli/api/_errors.py handle_http_error   19 0 0   100%
src/fastapi_cloud_cli/api/_errors.py get_http_error_code   13 0 0   100%
src/fastapi_cloud_cli/api/_errors.py get_http_error_hint   5 0 0   100%
src/fastapi_cloud_cli/api/_errors.py (no function)   15 0 0   100%
src/fastapi_cloud_cli/api/_models.py DeploymentStatus._missing_   1 0 0   100%
src/fastapi_cloud_cli/api/_models.py DeploymentStatus.to_human_readable   1 0 0   100%
src/fastapi_cloud_cli/api/_models.py (no function)   112 0 0   100%
src/fastapi_cloud_cli/api/_retry.py attempt   11 0 0   100%
src/fastapi_cloud_cli/api/_retry.py attempt._backoff   3 0 0   100%
src/fastapi_cloud_cli/api/_retry.py attempts   3 0 0   100%
src/fastapi_cloud_cli/api/_retry.py attempts.decorator   2 0 0   100%
src/fastapi_cloud_cli/api/_retry.py attempts.decorator.wrapper   8 0 0   100%
src/fastapi_cloud_cli/api/_retry.py (no function)   18 0 0   100%
src/fastapi_cloud_cli/api/client.py _get_user_agent   4 0 0   100%
src/fastapi_cloud_cli/api/client.py APIClient.__init__   11 0 0   100%
src/fastapi_cloud_cli/api/client.py APIClient.handle_http_errors   17 0 1   100%
src/fastapi_cloud_cli/api/client.py APIClient.get_deployment   3 0 0   100%
src/fastapi_cloud_cli/api/client.py APIClient.get_environment_variables   3 0 0   100%
src/fastapi_cloud_cli/api/client.py APIClient.batch_environment_variables   3 0 0   100%
src/fastapi_cloud_cli/api/client.py APIClient.get_custom_domains   3 0 0   100%
src/fastapi_cloud_cli/api/client.py APIClient.create_custom_domain   3 0 0   100%
src/fastapi_cloud_cli/api/client.py APIClient.remove_custom_domain   2 0 0   100%
src/fastapi_cloud_cli/api/client.py APIClient.restart_custom_domain_setup   3 0 0   100%
src/fastapi_cloud_cli/api/client.py APIClient.stream_build_logs   28 0 0   100%
src/fastapi_cloud_cli/api/client.py APIClient._parse_log_line   5 0 0   100%
src/fastapi_cloud_cli/api/client.py APIClient.stream_app_logs   17 0 5   100%
src/fastapi_cloud_cli/api/client.py APIClient.poll_deployment_status   17 0 0   100%
src/fastapi_cloud_cli/api/client.py (no function)   41 0 0   100%
src/fastapi_cloud_cli/cli.py main   2 0 0   100%
src/fastapi_cloud_cli/cli.py (no function)   58 0 0   100%
src/fastapi_cloud_cli/commands/__init__.py (no function)   0 0 0   100%
src/fastapi_cloud_cli/commands/_auth.py get_user_command_context   1 0 0   100%
src/fastapi_cloud_cli/commands/_auth.py UserCommand.invoke   7 0 0   100%
src/fastapi_cloud_cli/commands/_auth.py (no function)   14 0 0   100%
src/fastapi_cloud_cli/commands/_flow.py render_login_output   1 0 0   100%
src/fastapi_cloud_cli/commands/_flow.py device_authorization_output   1 0 0   100%
src/fastapi_cloud_cli/commands/_flow.py start_device_authorization   5 0 0   100%
src/fastapi_cloud_cli/commands/_flow.py fetch_access_token   27 0 0   100%
src/fastapi_cloud_cli/commands/_flow.py complete_device_login   13 0 0   100%
src/fastapi_cloud_cli/commands/_flow.py (no function)   38 0 0   100%
src/fastapi_cloud_cli/commands/apps/__init__.py (no function)   2 0 0   100%
src/fastapi_cloud_cli/commands/apps/_app.py (no function)   2 0 0   100%
src/fastapi_cloud_cli/commands/apps/create.py _create_app   3 0 0   100%
src/fastapi_cloud_cli/commands/apps/create.py _render_apps_create_output   3 0 0   100%
src/fastapi_cloud_cli/commands/apps/create.py create_app   28 0 0   100%
src/fastapi_cloud_cli/commands/apps/create.py (no function)   28 0 0   100%
src/fastapi_cloud_cli/commands/apps/get.py _render_app_get_output   4 0 0   100%
src/fastapi_cloud_cli/commands/apps/get.py get_app   14 0 0   100%
src/fastapi_cloud_cli/commands/apps/get.py (no function)   21 0 0   100%
src/fastapi_cloud_cli/commands/apps/link.py _render_link_output   2 0 0   100%
src/fastapi_cloud_cli/commands/apps/link.py _fail_not_logged_in_interactive   1 0 0   100%
src/fastapi_cloud_cli/commands/apps/link.py _fail_already_linked_interactive   1 0 0   100%
src/fastapi_cloud_cli/commands/apps/link.py _link_app_by_id   9 0 0   100%
src/fastapi_cloud_cli/commands/apps/link.py _link_app_interactively   28 0 0   100%
src/fastapi_cloud_cli/commands/apps/link.py link_app   16 0 0   100%
src/fastapi_cloud_cli/commands/apps/link.py (no function)   30 0 0   100%
src/fastapi_cloud_cli/commands/apps/list.py _get_app_dashboard_url   1 0 0   100%
src/fastapi_cloud_cli/commands/apps/list.py _format_app_name   2 0 0   100%
src/fastapi_cloud_cli/commands/apps/list.py _get_apps_list_table   8 0 0   100%
src/fastapi_cloud_cli/commands/apps/list.py _get_team   3 0 0   100%
src/fastapi_cloud_cli/commands/apps/list.py _get_app   3 0 0   100%
src/fastapi_cloud_cli/commands/apps/list.py _get_apps   4 0 0   100%
src/fastapi_cloud_cli/commands/apps/list.py _render_apps_list_output   6 0 0   100%
src/fastapi_cloud_cli/commands/apps/list.py list_apps   18 0 0   100%
src/fastapi_cloud_cli/commands/apps/list.py (no function)   43 0 0   100%
src/fastapi_cloud_cli/commands/apps/unlink.py _render_unlink_output   4 0 0   100%
src/fastapi_cloud_cli/commands/apps/unlink.py _fail_not_linked   1 0 0   100%
src/fastapi_cloud_cli/commands/apps/unlink.py unlink_app   9 0 0   100%
src/fastapi_cloud_cli/commands/apps/unlink.py (no function)   22 0 0   100%
src/fastapi_cloud_cli/commands/apps/update.py _update_app   3 0 0   100%
src/fastapi_cloud_cli/commands/apps/update.py _render_apps_update_output   2 0 0   100%
src/fastapi_cloud_cli/commands/apps/update.py update_app   13 0 0   100%
src/fastapi_cloud_cli/commands/apps/update.py (no function)   24 0 0   100%
src/fastapi_cloud_cli/commands/auth/__init__.py (no function)   2 0 0   100%
src/fastapi_cloud_cli/commands/auth/_app.py (no function)   2 0 0   100%
src/fastapi_cloud_cli/commands/auth/wait.py wait   7 0 0   100%
src/fastapi_cloud_cli/commands/auth/wait.py (no function)   9 0 0   100%
src/fastapi_cloud_cli/commands/ci/__init__.py (no function)   2 0 0   100%
src/fastapi_cloud_cli/commands/ci/_app.py (no function)   2 0 0   100%
src/fastapi_cloud_cli/commands/ci/print_workflow.py _render_workflow_output   1 0 0   100%
src/fastapi_cloud_cli/commands/ci/print_workflow.py print_workflow   4 0 0   100%
src/fastapi_cloud_cli/commands/ci/print_workflow.py (no function)   14 0 0   100%
src/fastapi_cloud_cli/commands/deploy/__init__.py (no function)   2 0 0   100%
src/fastapi_cloud_cli/commands/deploy/archive.py validate_app_directory   16 0 0   100%
src/fastapi_cloud_cli/commands/deploy/archive.py _get_app_name   1 0 0   100%
src/fastapi_cloud_cli/commands/deploy/archive.py _should_exclude_entry   8 0 0   100%
src/fastapi_cloud_cli/commands/deploy/archive.py _rignore_walk   1 0 0   100%
src/fastapi_cloud_cli/commands/deploy/archive.py archive   14 0 0   100%
src/fastapi_cloud_cli/commands/deploy/archive.py _get_large_files   10 0 0   100%
src/fastapi_cloud_cli/commands/deploy/archive.py (no function)   15 0 0   100%
src/fastapi_cloud_cli/commands/deploy/cloud.py _get_teams   4 0 0   100%
src/fastapi_cloud_cli/commands/deploy/cloud.py _update_app   3 0 0   100%
src/fastapi_cloud_cli/commands/deploy/cloud.py _create_app   3 0 0   100%
src/fastapi_cloud_cli/commands/deploy/cloud.py _create_deployment   5 0 0   100%
src/fastapi_cloud_cli/commands/deploy/cloud.py _get_app   6 0 0   100%
src/fastapi_cloud_cli/commands/deploy/cloud.py _get_apps   4 0 0   100%
src/fastapi_cloud_cli/commands/deploy/cloud.py (no function)   26 0 0   100%
src/fastapi_cloud_cli/commands/deploy/command.py _get_deploy_output   1 0 0   100%
src/fastapi_cloud_cli/commands/deploy/command.py _get_large_file_warnings   5 0 0   100%
src/fastapi_cloud_cli/commands/deploy/command.py _render_app_id_mismatch   3 0 0   100%
src/fastapi_cloud_cli/commands/deploy/command.py _render_app_not_found   1 0 0   100%
src/fastapi_cloud_cli/commands/deploy/command.py _render_linked_app_not_found   2 0 0   100%
src/fastapi_cloud_cli/commands/deploy/command.py _confirm_home_directory_deploy   7 0 0   100%
src/fastapi_cloud_cli/commands/deploy/command.py _check_app_directory   6 0 0   100%
src/fastapi_cloud_cli/commands/deploy/command.py deploy   112 0 0   100%
src/fastapi_cloud_cli/commands/deploy/command.py (no function)   37 0 0   100%
src/fastapi_cloud_cli/commands/deploy/configure.py _configure_app   47 0 0   100%
src/fastapi_cloud_cli/commands/deploy/configure.py (no function)   10 0 0   100%
src/fastapi_cloud_cli/commands/deploy/upload.py _cancel_upload   7 0 0   100%
src/fastapi_cloud_cli/commands/deploy/upload.py _format_size   5 0 0   100%
src/fastapi_cloud_cli/commands/deploy/upload.py _upload_deployment   24 0 0   100%
src/fastapi_cloud_cli/commands/deploy/upload.py _upload_deployment.progress_callback   1 0 0   100%
src/fastapi_cloud_cli/commands/deploy/upload.py (no function)   16 0 0   100%
src/fastapi_cloud_cli/commands/deploy/wait.py _verify_deployment   22 0 0   100%
src/fastapi_cloud_cli/commands/deploy/wait.py _wait_for_deployment   49 0 0   100%
src/fastapi_cloud_cli/commands/deploy/wait.py (no function)   18 0 0   100%
src/fastapi_cloud_cli/commands/deployments.py _get_deployments   4 0 0   100%
src/fastapi_cloud_cli/commands/deployments.py _render_deployments_list_output   14 0 0   100%
src/fastapi_cloud_cli/commands/deployments.py _render_deployment_get_output   9 0 0   100%
src/fastapi_cloud_cli/commands/deployments.py _print_deployment_failure   8 0 0   100%
src/fastapi_cloud_cli/commands/deployments.py _print_build_log_json   2 0 0   100%
src/fastapi_cloud_cli/commands/deployments.py _print_build_log_line   4 0 0   100%
src/fastapi_cloud_cli/commands/deployments.py _render_build_logs_output   11 0 0   100%
src/fastapi_cloud_cli/commands/deployments.py _stream_build_logs   21 0 0   100%
src/fastapi_cloud_cli/commands/deployments.py _fetch_build_logs   9 0 0   100%
src/fastapi_cloud_cli/commands/deployments.py _handle_build_log_error   11 0 0   100%
src/fastapi_cloud_cli/commands/deployments.py _render_build_log_error   4 0 0   100%
src/fastapi_cloud_cli/commands/deployments.py get_deployment   6 0 0   100%
src/fastapi_cloud_cli/commands/deployments.py build_logs   22 0 3   100%
src/fastapi_cloud_cli/commands/deployments.py list_deployments   7 0 0   100%
src/fastapi_cloud_cli/commands/deployments.py (no function)   57 0 0   100%
src/fastapi_cloud_cli/commands/domains/__init__.py (no function)   2 0 0   100%
src/fastapi_cloud_cli/commands/domains/_app.py (no function)   2 0 0   100%
src/fastapi_cloud_cli/commands/domains/_setup.py _phase_from_status   5 0 0   100%
src/fastapi_cloud_cli/commands/domains/_setup.py _record_group   5 0 0   100%
src/fastapi_cloud_cli/commands/domains/_setup.py _step_status   13 0 0   100%
src/fastapi_cloud_cli/commands/domains/_setup.py _describe_step   35 0 0   100%
src/fastapi_cloud_cli/commands/domains/_setup.py get_setup_steps   13 0 0   100%
src/fastapi_cloud_cli/commands/domains/_setup.py get_setup_steps.records_for   1 0 0   100%
src/fastapi_cloud_cli/commands/domains/_setup.py get_setup_steps.build_step   2 0 0   100%
src/fastapi_cloud_cli/commands/domains/_setup.py (no function)   23 0 0   100%
src/fastapi_cloud_cli/commands/domains/_shared.py _normalize_domain_name   1 0 0   100%
src/fastapi_cloud_cli/commands/domains/_shared.py _find_custom_domain   2 0 0   100%
src/fastapi_cloud_cli/commands/domains/_shared.py _select_custom_domain   1 0 0   100%
src/fastapi_cloud_cli/commands/domains/_shared.py (no function)   7 0 0   100%
src/fastapi_cloud_cli/commands/domains/add.py _resolve_domain_name   6 0 0   100%
src/fastapi_cloud_cli/commands/domains/add.py _resolve_pre_validation   9 0 0   100%
src/fastapi_cloud_cli/commands/domains/add.py _render_custom_domain_add_output   5 0 0   100%
src/fastapi_cloud_cli/commands/domains/add.py add_domain   16 0 0   100%
src/fastapi_cloud_cli/commands/domains/add.py (no function)   22 0 0   100%
src/fastapi_cloud_cli/commands/domains/get.py _render_custom_domain_get_output   4 0 0   100%
src/fastapi_cloud_cli/commands/domains/get.py get_domain   20 0 0   100%
src/fastapi_cloud_cli/commands/domains/get.py (no function)   18 0 0   100%
src/fastapi_cloud_cli/commands/domains/list.py _render_custom_domains_list_output   6 0 0   100%
src/fastapi_cloud_cli/commands/domains/list.py list_domains   6 0 0   100%
src/fastapi_cloud_cli/commands/domains/list.py (no function)   17 0 0   100%
src/fastapi_cloud_cli/commands/domains/remove.py _render_custom_domain_remove_output   1 0 0   100%
src/fastapi_cloud_cli/commands/domains/remove.py _print_removal_warning   1 0 0   100%
src/fastapi_cloud_cli/commands/domains/remove.py remove_domain   34 0 0   100%
src/fastapi_cloud_cli/commands/domains/remove.py (no function)   19 0 0   100%
src/fastapi_cloud_cli/commands/domains/rendering.py get_setup_mode_label   3 0 0   100%
src/fastapi_cloud_cli/commands/domains/rendering.py get_custom_domains_table   10 0 0   100%
src/fastapi_cloud_cli/commands/domains/rendering.py _get_dns_records_table   19 0 0   100%
src/fastapi_cloud_cli/commands/domains/rendering.py _get_concise_step_description   6 0 0   100%
src/fastapi_cloud_cli/commands/domains/rendering.py _render_setup_step   23 0 0   100%
src/fastapi_cloud_cli/commands/domains/rendering.py render_custom_domain_setup   5 0 0   100%
src/fastapi_cloud_cli/commands/domains/rendering.py _get_next_action   5 0 0   100%
src/fastapi_cloud_cli/commands/domains/rendering.py render_custom_domain_details   14 0 0   100%
src/fastapi_cloud_cli/commands/domains/rendering.py (no function)   23 0 0   100%
src/fastapi_cloud_cli/commands/domains/restart.py _render_custom_domain_restart_output   8 0 0   100%
src/fastapi_cloud_cli/commands/domains/restart.py restart_domain   24 0 0   100%
src/fastapi_cloud_cli/commands/domains/restart.py (no function)   18 0 0   100%
src/fastapi_cloud_cli/commands/env/__init__.py (no function)   2 0 0   100%
src/fastapi_cloud_cli/commands/env/_app.py (no function)   2 0 0   100%
src/fastapi_cloud_cli/commands/env/_shared.py _find_environment_variable   1 0 0   100%
src/fastapi_cloud_cli/commands/env/_shared.py _format_env_var_value   7 0 0   100%
src/fastapi_cloud_cli/commands/env/_shared.py (no function)   5 0 0   100%
src/fastapi_cloud_cli/commands/env/delete.py _render_environment_variable_delete_output   4 0 0   100%
src/fastapi_cloud_cli/commands/env/delete.py delete   34 0 0   100%
src/fastapi_cloud_cli/commands/env/delete.py (no function)   20 0 0   100%
src/fastapi_cloud_cli/commands/env/get.py _render_environment_variable_get_output   10 0 0   100%
src/fastapi_cloud_cli/commands/env/get.py get_variable   21 0 0   100%
src/fastapi_cloud_cli/commands/env/get.py (no function)   20 0 0   100%
src/fastapi_cloud_cli/commands/env/list.py _get_environment_variables_table   9 0 0   100%
src/fastapi_cloud_cli/commands/env/list.py _render_environment_variables_list_output   6 0 0   100%
src/fastapi_cloud_cli/commands/env/list.py list_variables   7 0 0   100%
src/fastapi_cloud_cli/commands/env/list.py (no function)   21 0 0   100%
src/fastapi_cloud_cli/commands/env/set.py _render_environment_variable_set_output   6 0 0   100%
src/fastapi_cloud_cli/commands/env/set.py _input   1 0 0   100%
src/fastapi_cloud_cli/commands/env/set.py _resolve_environment_variable_name   7 0 0   100%
src/fastapi_cloud_cli/commands/env/set.py _resolve_environment_variable_value   11 0 0   100%
src/fastapi_cloud_cli/commands/env/set.py set   16 0 0   100%
src/fastapi_cloud_cli/commands/env/set.py (no function)   23 0 0   100%
src/fastapi_cloud_cli/commands/integrations/__init__.py (no function)   7 0 0   100%
src/fastapi_cloud_cli/commands/integrations/providers/__init__.py (no function)   2 0 0   100%
src/fastapi_cloud_cli/commands/integrations/providers/_app.py (no function)   2 0 0   100%
src/fastapi_cloud_cli/commands/integrations/providers/list.py _get_providers   3 0 0   100%
src/fastapi_cloud_cli/commands/integrations/providers/list.py _get_providers_table   10 0 0   100%
src/fastapi_cloud_cli/commands/integrations/providers/list.py _render_providers_list_output   6 0 0   100%
src/fastapi_cloud_cli/commands/integrations/providers/list.py list_providers   6 0 0   100%
src/fastapi_cloud_cli/commands/integrations/providers/list.py (no function)   30 0 0   100%
src/fastapi_cloud_cli/commands/integrations/resources/__init__.py (no function)   2 0 0   100%
src/fastapi_cloud_cli/commands/integrations/resources/_app.py (no function)   2 0 0   100%
src/fastapi_cloud_cli/commands/integrations/resources/connect.py _get_resource_connect_url   2 0 0   100%
src/fastapi_cloud_cli/commands/integrations/resources/connect.py _render_resource_connect_output   11 0 0   100%
src/fastapi_cloud_cli/commands/integrations/resources/connect.py connect_resource   15 0 0   100%
src/fastapi_cloud_cli/commands/integrations/resources/connect.py (no function)   24 0 0   100%
src/fastapi_cloud_cli/commands/integrations/resources/disconnect.py _disconnect_resource   2 0 0   100%
src/fastapi_cloud_cli/commands/integrations/resources/disconnect.py _print_disconnect_warning   5 0 0   100%
src/fastapi_cloud_cli/commands/integrations/resources/disconnect.py _render_resource_disconnect_output   4 0 0   100%
src/fastapi_cloud_cli/commands/integrations/resources/disconnect.py disconnect_resource   36 0 0   100%
src/fastapi_cloud_cli/commands/integrations/resources/disconnect.py (no function)   24 0 0   100%
src/fastapi_cloud_cli/commands/integrations/resources/get.py _to_connected_resource   7 0 0   100%
src/fastapi_cloud_cli/commands/integrations/resources/get.py _get_resource   4 0 0   100%
src/fastapi_cloud_cli/commands/integrations/resources/get.py _render_resource_get_output   13 0 0   100%
src/fastapi_cloud_cli/commands/integrations/resources/get.py get_resource   6 0 0   100%
src/fastapi_cloud_cli/commands/integrations/resources/get.py (no function)   56 0 0   100%
src/fastapi_cloud_cli/commands/integrations/resources/list.py _get_resources   3 0 0   100%
src/fastapi_cloud_cli/commands/integrations/resources/list.py _get_resources_table   9 0 0   100%
src/fastapi_cloud_cli/commands/integrations/resources/list.py _render_resources_list_output   6 0 0   100%
src/fastapi_cloud_cli/commands/integrations/resources/list.py list_resources   6 0 0   100%
src/fastapi_cloud_cli/commands/integrations/resources/list.py (no function)   26 0 0   100%
src/fastapi_cloud_cli/commands/integrations/resources/providers.py (no function)   3 0 0   100%
src/fastapi_cloud_cli/commands/login.py _interactive_login   14 0 0   100%
src/fastapi_cloud_cli/commands/login.py login   21 0 0   100%
src/fastapi_cloud_cli/commands/login.py (no function)   16 0 0   100%
src/fastapi_cloud_cli/commands/logout.py _render_logout_output   3 0 0   100%
src/fastapi_cloud_cli/commands/logout.py logout   3 0 0   100%
src/fastapi_cloud_cli/commands/logout.py (no function)   12 0 0   100%
src/fastapi_cloud_cli/commands/logs.py _validate_since   3 0 0   100%
src/fastapi_cloud_cli/commands/logs.py _validate_tail   3 0 0   100%
src/fastapi_cloud_cli/commands/logs.py _get_log_bullet   2 0 0   100%
src/fastapi_cloud_cli/commands/logs.py _format_log_line   3 0 0   100%
src/fastapi_cloud_cli/commands/logs.py _print_log_line   1 0 0   100%
src/fastapi_cloud_cli/commands/logs.py _render_app_logs_output   5 0 0   100%
src/fastapi_cloud_cli/commands/logs.py _print_app_log_json   1 0 0   100%
src/fastapi_cloud_cli/commands/logs.py _render_plain_error   4 0 0   100%
src/fastapi_cloud_cli/commands/logs.py _handle_stream_log_error   13 0 0   100%
src/fastapi_cloud_cli/commands/logs.py _process_log_stream   18 0 3   100%
src/fastapi_cloud_cli/commands/logs.py logs   8 0 0   100%
src/fastapi_cloud_cli/commands/logs.py (no function)   40 0 0   100%
src/fastapi_cloud_cli/commands/setup_ci.py _render_ci_setup_output   10 0 0   100%
src/fastapi_cloud_cli/commands/setup_ci.py _get_github_host   2 0 0   100%
src/fastapi_cloud_cli/commands/setup_ci.py _repo_slug_from_origin   2 0 0   100%
src/fastapi_cloud_cli/commands/setup_ci.py _check_git_installed   1 0 0   100%
src/fastapi_cloud_cli/commands/setup_ci.py _check_gh_cli_installed   1 0 0   100%
src/fastapi_cloud_cli/commands/setup_ci.py _get_remote_origin   6 0 0   100%
src/fastapi_cloud_cli/commands/setup_ci.py _set_github_secret   4 0 0   100%
src/fastapi_cloud_cli/commands/setup_ci.py _create_token   4 0 0   100%
src/fastapi_cloud_cli/commands/setup_ci.py _get_default_branch   5 0 0   100%
src/fastapi_cloud_cli/commands/setup_ci.py _get_workflow_content   1 0 0   100%
src/fastapi_cloud_cli/commands/setup_ci.py _write_workflow_file   3 0 0   100%
src/fastapi_cloud_cli/commands/setup_ci.py _get_workflow_path   3 0 0   100%
src/fastapi_cloud_cli/commands/setup_ci.py _format_workflow_path   1 0 0   100%
src/fastapi_cloud_cli/commands/setup_ci.py _resolve_existing_workflow_path   11 0 0   100%
src/fastapi_cloud_cli/commands/setup_ci.py setup_ci   97 0 0   100%
src/fastapi_cloud_cli/commands/setup_ci.py (no function)   47 0 0   100%
src/fastapi_cloud_cli/commands/teams/__init__.py (no function)   2 0 0   100%
src/fastapi_cloud_cli/commands/teams/_app.py (no function)   2 0 0   100%
src/fastapi_cloud_cli/commands/teams/get.py _get_team_dashboard_url   1 0 0   100%
src/fastapi_cloud_cli/commands/teams/get.py _get_team   4 0 0   100%
src/fastapi_cloud_cli/commands/teams/get.py _render_team_get_output   3 0 0   100%
src/fastapi_cloud_cli/commands/teams/get.py get_team   5 0 0   100%
src/fastapi_cloud_cli/commands/teams/get.py (no function)   23 0 0   100%
src/fastapi_cloud_cli/commands/teams/list.py _get_teams   4 0 0   100%
src/fastapi_cloud_cli/commands/teams/list.py _render_teams_list_output   14 0 0   100%
src/fastapi_cloud_cli/commands/teams/list.py list_teams   6 0 0   100%
src/fastapi_cloud_cli/commands/teams/list.py (no function)   28 0 0   100%
src/fastapi_cloud_cli/commands/tokens/__init__.py (no function)   2 0 0   100%
src/fastapi_cloud_cli/commands/tokens/_app.py (no function)   2 0 0   100%
src/fastapi_cloud_cli/commands/tokens/create.py _resolve_token_name   5 0 0   100%
src/fastapi_cloud_cli/commands/tokens/create.py _resolve_output_file   3 0 0   100%
src/fastapi_cloud_cli/commands/tokens/create.py _create_deploy_token   3 0 0   100%
src/fastapi_cloud_cli/commands/tokens/create.py _write_token_value   3 0 0   100%
src/fastapi_cloud_cli/commands/tokens/create.py _render_deploy_token_create_output   2 0 0   100%
src/fastapi_cloud_cli/commands/tokens/create.py create_token   15 0 0   100%
src/fastapi_cloud_cli/commands/tokens/create.py (no function)   33 0 0   100%
src/fastapi_cloud_cli/commands/tokens/delete.py _delete_deploy_token   5 0 0   100%
src/fastapi_cloud_cli/commands/tokens/delete.py _render_deploy_token_delete_output   1 0 0   100%
src/fastapi_cloud_cli/commands/tokens/delete.py delete_token   10 0 0   100%
src/fastapi_cloud_cli/commands/tokens/delete.py (no function)   16 0 0   100%
src/fastapi_cloud_cli/commands/tokens/list.py _get_deploy_tokens   3 0 0   100%
src/fastapi_cloud_cli/commands/tokens/list.py _get_deploy_tokens_table   9 0 0   100%
src/fastapi_cloud_cli/commands/tokens/list.py _render_deploy_tokens_list_output   6 0 0   100%
src/fastapi_cloud_cli/commands/tokens/list.py list_tokens   7 0 0   100%
src/fastapi_cloud_cli/commands/tokens/list.py (no function)   26 0 0   100%
src/fastapi_cloud_cli/commands/whoami.py _render_whoami_output   3 0 0   100%
src/fastapi_cloud_cli/commands/whoami.py whoami   10 0 0   100%
src/fastapi_cloud_cli/commands/whoami.py (no function)   16 0 0   100%
src/fastapi_cloud_cli/config.py Settings.from_user_settings   6 0 0   100%
src/fastapi_cloud_cli/config.py Settings.get   1 0 0   100%
src/fastapi_cloud_cli/config.py (no function)   12 0 0   100%
src/fastapi_cloud_cli/logging.py setup_logging   9 0 0   100%
src/fastapi_cloud_cli/logging.py (no function)   5 0 0   100%
src/fastapi_cloud_cli/utils/__init__.py (no function)   0 0 0   100%
src/fastapi_cloud_cli/utils/apps.py get_app_config   7 0 0   100%
src/fastapi_cloud_cli/utils/apps.py resolve_app_id   6 0 0   100%
src/fastapi_cloud_cli/utils/apps.py resolve_app_id_or_fail   4 0 0   100%
src/fastapi_cloud_cli/utils/apps.py write_app_config   10 0 0   100%
src/fastapi_cloud_cli/utils/apps.py (no function)   13 0 2   100%
src/fastapi_cloud_cli/utils/auth.py write_auth_config   4 0 0   100%
src/fastapi_cloud_cli/utils/auth.py delete_auth_config   6 0 0   100%
src/fastapi_cloud_cli/utils/auth.py read_auth_config   7 0 0   100%
src/fastapi_cloud_cli/utils/auth.py _get_auth_token   7 0 0   100%
src/fastapi_cloud_cli/utils/auth.py _is_jwt_expired   22 0 3   100%
src/fastapi_cloud_cli/utils/auth.py Identity.__init__   2 0 0   100%
src/fastapi_cloud_cli/utils/auth.py Identity.user_token   1 0 0   100%
src/fastapi_cloud_cli/utils/auth.py Identity.deploy_token   1 0 0   100%
src/fastapi_cloud_cli/utils/auth.py Identity.is_user_token_expired   3 0 0   100%
src/fastapi_cloud_cli/utils/auth.py Identity.is_logged_in   8 0 0   100%
src/fastapi_cloud_cli/utils/auth.py Identity.has_deploy_token   5 0 0   100%
src/fastapi_cloud_cli/utils/auth.py (no function)   27 0 0   100%
src/fastapi_cloud_cli/utils/build_logs.py print_build_error   6 0 0   100%
src/fastapi_cloud_cli/utils/build_logs.py (no function)   5 0 0   100%
src/fastapi_cloud_cli/utils/cli.py ErrorRenderer.__call__   0 0 0   100%
src/fastapi_cloud_cli/utils/cli.py _title_sweep_frames   8 0 0   100%
src/fastapi_cloud_cli/utils/cli.py _strip_rich_markup   3 0 0   100%
src/fastapi_cloud_cli/utils/cli.py IndentedBlock.__init__   5 0 0   100%
src/fastapi_cloud_cli/utils/cli.py IndentedBlock.__rich_console__   10 0 0   100%
src/fastapi_cloud_cli/utils/cli.py FastAPIStyle.render_element   19 0 0   100%
src/fastapi_cloud_cli/utils/cli.py FastAPIStyle.title_padding   1 0 0   100%
src/fastapi_cloud_cli/utils/cli.py FastAPIStyle._render_title   8 0 0   100%
src/fastapi_cloud_cli/utils/cli.py FastAPIStyle._animate_title_sweep   10 0 0   100%
src/fastapi_cloud_cli/utils/cli.py FastAPIStyle._get_progress_status_emoji   9 0 0   100%
src/fastapi_cloud_cli/utils/cli.py FastAPIStyle._render_with_emoji_bullet   1 0 0   100%
src/fastapi_cloud_cli/utils/cli.py FastAPIStyle._get_bullet_prefix   7 0 0   100%
src/fastapi_cloud_cli/utils/cli.py FastAPIStyle.get_cursor_offset_for_element   9 0 0   100%
src/fastapi_cloud_cli/utils/cli.py FastAPIRichToolkit.__init__   2 0 0   100%
src/fastapi_cloud_cli/utils/cli.py FastAPIRichToolkit.__exit__   2 0 0   100%
src/fastapi_cloud_cli/utils/cli.py FastAPIRichToolkit._get_version_check   5 0 0   100%
src/fastapi_cloud_cli/utils/cli.py FastAPIRichToolkit._print_update_message   5 0 0   100%
src/fastapi_cloud_cli/utils/cli.py FastAPIRichToolkit.print_error   1 0 0   100%
src/fastapi_cloud_cli/utils/cli.py FastAPIRichToolkit.print_hint   1 0 0   100%
src/fastapi_cloud_cli/utils/cli.py FastAPIRichToolkit.success   9 0 0   100%
src/fastapi_cloud_cli/utils/cli.py FastAPIRichToolkit.fail   9 0 0   100%
src/fastapi_cloud_cli/utils/cli.py get_details_table   6 0 0   100%
src/fastapi_cloud_cli/utils/cli.py get_rich_toolkit   4 0 0   100%
src/fastapi_cloud_cli/utils/cli.py (no function)   62 0 0   100%
src/fastapi_cloud_cli/utils/config.py get_config_folder   4 0 0   100%
src/fastapi_cloud_cli/utils/config.py get_auth_path   3 0 0   100%
src/fastapi_cloud_cli/utils/config.py get_cli_config_path   3 0 0   100%
src/fastapi_cloud_cli/utils/config.py get_version_check_cache_path   1 0 0   100%
src/fastapi_cloud_cli/utils/config.py (no function)   7 0 0   100%
src/fastapi_cloud_cli/utils/dates.py format_last_updated   26 0 0   100%
src/fastapi_cloud_cli/utils/dates.py _format_time_ago   2 0 0   100%
src/fastapi_cloud_cli/utils/dates.py (no function)   3 0 0   100%
src/fastapi_cloud_cli/utils/env.py validate_environment_variable_name   3 0 0   100%
src/fastapi_cloud_cli/utils/env.py (no function)   1 0 0   100%
src/fastapi_cloud_cli/utils/errors.py ErrorToolkit.fail   0 0 0   100%
src/fastapi_cloud_cli/utils/errors.py (no function)   5 0 0   100%
src/fastapi_cloud_cli/utils/execution.py is_ci_enabled   4 0 0   100%
src/fastapi_cloud_cli/utils/execution.py (no function)   5 0 0   100%
src/fastapi_cloud_cli/utils/progress_file.py ProgressFile.__init__   4 0 0   100%
src/fastapi_cloud_cli/utils/progress_file.py ProgressFile.read   7 0 0   100%
src/fastapi_cloud_cli/utils/progress_file.py ProgressFile.__getattr__   1 0 0   100%
src/fastapi_cloud_cli/utils/progress_file.py (no function)   7 0 0   100%
src/fastapi_cloud_cli/utils/sentry.py init_sentry   4 0 0   100%
src/fastapi_cloud_cli/utils/sentry.py (no function)   5 0 0   100%
src/fastapi_cloud_cli/utils/teams.py get_teams   3 0 0   100%
src/fastapi_cloud_cli/utils/teams.py select_team   6 0 0   100%
src/fastapi_cloud_cli/utils/teams.py resolve_team_id   9 0 0   100%
src/fastapi_cloud_cli/utils/teams.py (no function)   13 0 0   100%
src/fastapi_cloud_cli/utils/version_check.py _parse_simple_release_version   4 0 0   100%
src/fastapi_cloud_cli/utils/version_check.py is_newer_version   5 0 0   100%
src/fastapi_cloud_cli/utils/version_check.py read_cached_latest_version   11 0 0   100%
src/fastapi_cloud_cli/utils/version_check.py write_latest_version_cache   7 0 0   100%
src/fastapi_cloud_cli/utils/version_check.py fetch_latest_version   10 0 0   100%
src/fastapi_cloud_cli/utils/version_check.py check_for_update   8 0 0   100%
src/fastapi_cloud_cli/utils/version_check.py get_upgrade_command   4 0 0   100%
src/fastapi_cloud_cli/utils/version_check.py format_update_message   1 0 0   100%
src/fastapi_cloud_cli/utils/version_check.py BackgroundVersionCheck.__init__   3 0 0   100%
src/fastapi_cloud_cli/utils/version_check.py BackgroundVersionCheck.start   1 0 0   100%
src/fastapi_cloud_cli/utils/version_check.py BackgroundVersionCheck._run   2 0 0   100%
src/fastapi_cloud_cli/utils/version_check.py BackgroundVersionCheck.get_update_message   7 0 0   100%
src/fastapi_cloud_cli/utils/version_check.py (no function)   46 0 0   100%
tests/__init__.py (no function)   0 0 0   100%
tests/conftest.py unset_env_vars   4 0 0   100%
tests/conftest.py isolated_config_path   3 0 0   100%
tests/conftest.py temp_auth_config   1 0 0   100%
tests/conftest.py reset_syspath   4 0 0   100%
tests/conftest.py setup_terminal   3 0 0   100%
tests/conftest.py settings   1 0 0   100%
tests/conftest.py respx_mock   2 0 0   100%
tests/conftest.py logged_in_cli   3 0 0   100%
tests/conftest.py logged_out_cli   2 0 0   100%
tests/conftest.py configured_app   6 0 0   100%
tests/conftest.py (no function)   36 0 0   100%
tests/domains/__init__.py (no function)   0 0 0   100%
tests/domains/test_cli.py custom_domain   1 0 0   100%
tests/domains/test_cli.py test_domains_commands_require_user_session   3 0 0   100%
tests/domains/test_cli.py test_domains_list_requires_app_context   3 0 0   100%
tests/domains/test_cli.py test_domains_list_uses_linked_app_and_renders_rows   7 0 0   100%
tests/domains/test_cli.py test_domains_list_returns_json   5 0 0   100%
tests/domains/test_cli.py test_domains_list_renders_empty_state   4 0 0   100%
tests/domains/test_cli.py test_domains_list_surfaces_app_not_found_as_json   4 0 0   100%
tests/domains/test_cli.py test_domain_status_metadata_is_exhaustive   1 0 0   100%
tests/domains/test_cli.py test_domains_get_renders_restart_action_when_setup_failed   5 0 0   100%
tests/domains/test_cli.py test_domains_get_renders_correction_action_when_dns_is_invalid   5 0 0   100%
tests/domains/test_cli.py test_domains_get_omits_next_action_while_setup_is_in_progress   5 0 0   100%
tests/domains/test_cli.py test_domains_get_json_requires_domain   3 0 0   100%
tests/domains/test_cli.py test_domains_get_resolves_normalized_hostname_or_id_as_json   5 0 0   100%
tests/domains/test_cli.py test_domains_get_prompts_with_selector_and_renders_details   6 0 0   100%
tests/domains/test_cli.py test_domains_get_reports_not_found   4 0 0   100%
tests/domains/test_cli.py test_domains_get_selector_handles_empty_collection   4 0 0   100%
tests/domains/test_cli.py test_domains_get_gates_zero_downtime_records_by_phase   10 0 0   100%
tests/domains/test_cli.py test_domains_get_shows_url_and_no_action_when_live   5 0 0   100%
tests/domains/test_cli.py test_domains_add_json_requires_domain   3 0 0   100%
tests/domains/test_cli.py test_domains_add_json_requires_setup_mode   3 0 0   100%
tests/domains/test_cli.py test_domains_add_rejects_both_setup_modes   3 0 0   100%
tests/domains/test_cli.py test_domains_add_surfaces_backend_hostname_validation   5 0 0   100%
tests/domains/test_cli.py test_domains_add_posts_setup_mode_and_returns_json   5 0 0   100%
tests/domains/test_cli.py test_domains_add_with_arguments_renders_result   5 0 0   100%
tests/domains/test_cli.py test_domains_add_standard_wizard   7 0 0   100%
tests/domains/test_cli.py test_domains_add_zero_downtime_wizard_hides_traffic_records   7 0 0   100%
tests/domains/test_cli.py test_domains_add_surfaces_duplicate_as_invalid_input   4 0 0   100%
tests/domains/test_cli.py test_domains_add_surfaces_entitlement_limit   5 0 0   100%
tests/domains/test_cli.py test_domains_remove_json_requires_domain   3 0 0   100%
tests/domains/test_cli.py test_domains_remove_json_requires_confirmation   3 0 0   100%
tests/domains/test_cli.py test_domains_remove_resolves_name_and_returns_json   6 0 0   100%
tests/domains/test_cli.py test_domains_remove_warns_and_confirms   7 0 0   100%
tests/domains/test_cli.py test_domains_remove_can_select_domain   7 0 0   100%
tests/domains/test_cli.py test_domains_remove_can_be_cancelled   6 0 0   100%
tests/domains/test_cli.py test_domains_remove_reports_not_found_before_delete   4 0 0   100%
tests/domains/test_cli.py test_domains_remove_selector_handles_empty_collection   4 0 0   100%
tests/domains/test_cli.py test_domains_restart_json_requires_domain   3 0 0   100%
tests/domains/test_cli.py test_domains_restart_returns_reset_domain_as_json   7 0 0   100%
tests/domains/test_cli.py test_domains_restart_with_argument_renders_result   7 0 0   100%
tests/domains/test_cli.py test_domains_restart_selector_only_shows_failed_domains   9 0 0   100%
tests/domains/test_cli.py test_domains_restart_selector_handles_no_failed_domains   5 0 0   100%
tests/domains/test_cli.py test_domains_restart_reports_not_found   4 0 0   100%
tests/domains/test_cli.py test_domains_restart_surfaces_backend_rejection_for_live_domain   7 0 0   100%
tests/domains/test_cli.py test_domains_list_surfaces_network_errors   4 0 0   100%
tests/domains/test_cli.py (no function)   102 0 0   100%
tests/domains/test_setup.py _custom_domain   1 0 0   100%
tests/domains/test_setup.py test_pre_validation_setup_steps_follow_domain_phase   4 0 0   100%
tests/domains/test_setup.py test_standard_setup_step_reflects_domain_state   4 0 0   100%
tests/domains/test_setup.py (no function)   13 0 0   100%
tests/integrations/__init__.py (no function)   0 0 0   100%
tests/integrations/providers/__init__.py (no function)   0 0 0   100%
tests/integrations/providers/test_list.py test_lists_providers_json_returns_not_logged_in_when_logged_out   4 0 0   100%
tests/integrations/providers/test_list.py test_lists_providers_as_json_with_explicit_team_overriding_linked_app   7 0 0   100%
tests/integrations/providers/test_list.py test_lists_providers_uses_linked_app_team   6 0 0   100%
tests/integrations/providers/test_list.py test_lists_providers_json_requires_team_without_linked_app   5 0 0   100%
tests/integrations/providers/test_list.py test_lists_providers_prompts_for_team_and_renders_statuses   8 0 0   100%
tests/integrations/providers/test_list.py test_lists_providers_returns_missing_input_when_no_teams_exist   5 0 0   100%
tests/integrations/providers/test_list.py test_lists_providers_in_human_output_empty   4 0 0   100%
tests/integrations/providers/test_list.py test_lists_providers_json_returns_not_found_for_unknown_team   5 0 0   100%
tests/integrations/providers/test_list.py (no function)   34 0 0   100%
tests/integrations/resources/__init__.py (no function)   0 0 0   100%
tests/integrations/resources/test_connect.py _app   1 0 0   100%
tests/integrations/resources/test_connect.py _team   1 0 0   100%
tests/integrations/resources/test_connect.py _mock_app_and_team   2 0 0   100%
tests/integrations/resources/test_connect.py test_connect_resource_json_returns_not_logged_in_when_logged_out   4 0 0   100%
tests/integrations/resources/test_connect.py test_connect_resource_json_returns_url_without_opening_browser   8 0 0   100%
tests/integrations/resources/test_connect.py test_connect_resource_opens_browser_for_linked_app   7 0 0   100%
tests/integrations/resources/test_connect.py test_connect_resource_no_open_prints_url_without_opening_browser   6 0 0   100%
tests/integrations/resources/test_connect.py test_connect_resource_json_requires_app_without_linked_app   5 0 0   100%
tests/integrations/resources/test_connect.py test_connect_resource_json_returns_not_found_for_unknown_app   5 0 0   100%
tests/integrations/resources/test_connect.py (no function)   31 0 0   100%
tests/integrations/resources/test_disconnect.py _resource_summary   1 0 0   100%
tests/integrations/resources/test_disconnect.py _resource_detail   1 0 0   100%
tests/integrations/resources/test_disconnect.py test_disconnect_resource_json_returns_not_logged_in_when_logged_out   4 0 0   100%
tests/integrations/resources/test_disconnect.py test_disconnect_resource_json_requires_resource_id   4 0 0   100%
tests/integrations/resources/test_disconnect.py test_disconnect_resource_json_requires_confirmation   4 0 0   100%
tests/integrations/resources/test_disconnect.py test_disconnect_resource_as_json_with_explicit_app_overriding_linked_app   8 0 0   100%
tests/integrations/resources/test_disconnect.py test_disconnect_resource_allows_interactive_selection   8 0 0   100%
tests/integrations/resources/test_disconnect.py test_disconnect_resource_prompts_for_confirmation_when_id_is_provided   6 0 0   100%
tests/integrations/resources/test_disconnect.py test_disconnect_resource_can_be_cancelled   5 0 0   100%
tests/integrations/resources/test_disconnect.py test_disconnect_resource_selector_handles_empty_list   4 0 0   100%
tests/integrations/resources/test_disconnect.py test_disconnect_resource_json_returns_not_found   5 0 0   100%
tests/integrations/resources/test_disconnect.py (no function)   34 0 0   100%
tests/integrations/resources/test_get.py _database_resource   3 0 0   100%
tests/integrations/resources/test_get.py _logfire_resource   3 0 0   100%
tests/integrations/resources/test_get.py test_gets_resource_json_returns_not_logged_in_when_logged_out   4 0 0   100%
tests/integrations/resources/test_get.py test_gets_database_resource_as_json_with_explicit_app_overriding_linked_app   7 0 0   100%
tests/integrations/resources/test_get.py test_gets_logfire_resource_as_json_using_linked_app   6 0 0   100%
tests/integrations/resources/test_get.py test_gets_resource_json_requires_app_without_linked_app   5 0 0   100%
tests/integrations/resources/test_get.py test_gets_database_resource_in_human_output   4 0 0   100%
tests/integrations/resources/test_get.py test_gets_logfire_resource_in_human_output_without_environment_variables   4 0 0   100%
tests/integrations/resources/test_get.py test_gets_resource_json_returns_not_found   5 0 0   100%
tests/integrations/resources/test_get.py (no function)   39 0 0   100%
tests/integrations/resources/test_list.py _resource   1 0 0   100%
tests/integrations/resources/test_list.py test_lists_resources_json_returns_not_logged_in_when_logged_out   4 0 0   100%
tests/integrations/resources/test_list.py test_lists_resources_as_json_with_explicit_app_overriding_linked_app   7 0 0   100%
tests/integrations/resources/test_list.py test_lists_resources_uses_linked_app   6 0 0   100%
tests/integrations/resources/test_list.py test_lists_resources_json_requires_app_without_linked_app   5 0 0   100%
tests/integrations/resources/test_list.py test_lists_resources_in_human_output   5 0 0   100%
tests/integrations/resources/test_list.py test_lists_resources_in_human_output_empty   4 0 0   100%
tests/integrations/resources/test_list.py test_lists_resources_json_returns_not_found_for_unknown_app   5 0 0   100%
tests/integrations/resources/test_list.py (no function)   29 0 0   100%
tests/test_api_client.py client   1 0 0   100%
tests/test_api_client.py deployment_id   1 0 0   100%
tests/test_api_client.py test_api_client_reports_high_confidence_agent   4 0 0   100%
tests/test_api_client.py test_api_client_omits_unattributed_agent   2 0 0   100%
tests/test_api_client.py logs_route   1 0 0   100%
tests/test_api_client.py test_stream_build_logs_successful   8 0 0   100%
tests/test_api_client.py test_get_http_error_code_returns_network_error   1 0 0   100%
tests/test_api_client.py test_get_http_error_hint_for_invalid_deploy_token   1 0 0   100%
tests/test_api_client.py test_stream_build_logs_failed   5 0 0   100%
tests/test_api_client.py test_stream_build_logs_stop_after_terminal_state   5 0 0   100%
tests/test_api_client.py test_stream_build_logs_internal_messages_are_skipped   5 0 0   100%
tests/test_api_client.py test_stream_build_logs_malformed_json_is_skipped   6 0 0   100%
tests/test_api_client.py test_stream_build_logs_unknown_log_type_is_skipped   5 0 0   100%
tests/test_api_client.py test_stream_build_logs_network_error_retry   6 0 0   100%
tests/test_api_client.py test_stream_build_logs_server_error_retry   5 0 0   100%
tests/test_api_client.py test_stream_build_logs_client_error_raises_immediately   3 0 0   100%
tests/test_api_client.py test_stream_build_logs_max_retries_exceeded   4 0 0   100%
tests/test_api_client.py test_stream_build_logs_empty_lines_are_skipped   6 0 0   100%
tests/test_api_client.py test_stream_build_logs_continue_after_timeout   12 0 0   100%
tests/test_api_client.py test_stream_build_logs_no_follow_stops_after_timeout   3 0 0   100%
tests/test_api_client.py test_stream_build_logs_connection_closed_without_complete_failed_or_timeout   5 0 0   100%
tests/test_api_client.py test_stream_build_logs_retry_timeout   5 0 0   100%
tests/test_api_client.py test_stream_build_logs_retry_timeout.responses   2 0 0   100%
tests/test_api_client.py poll_route   1 0 0   100%
tests/test_api_client.py test_poll_deployment_status_recovers_from_transient_errors   7 0 0   100%
tests/test_api_client.py test_poll_deployment_status_recovers_from_transient_errors.handler   4 0 0   100%
tests/test_api_client.py test_poll_deployment_status_keeps_polling_on_unknown_status   5 0 0   100%
tests/test_api_client.py test_poll_deployment_status_raises_after_max_consecutive_errors   3 0 0   100%
tests/test_api_client.py test_poll_deployment_status_timeout   2 0 0   100%
tests/test_api_client.py test_get_deployment_with_persisted_failure   3 0 0   100%
tests/test_api_client.py (no function)   44 0 0   100%
tests/test_archive.py src_path   3 0 0   100%
tests/test_archive.py dst_path   3 0 0   100%
tests/test_archive.py tar_path   1 0 0   100%
tests/test_archive.py test_archive_creates_tar_file   6 0 0   100%
tests/test_archive.py test_archive_excludes_venv_and_similar_folders   17 0 0   100%
tests/test_archive.py test_archive_preserves_relative_paths   7 0 0   100%
tests/test_archive.py test_archive_respects_fastapicloudignore   10 0 0   100%
tests/test_archive.py test_archive_respects_fastapicloudignore_unignore   12 0 0   100%
tests/test_archive.py test_archive_includes_hidden_files_but_excludes_env   9 0 0   100%
tests/test_archive.py (no function)   16 0 0   100%
tests/test_auth.py test_is_jwt_expired_with_valid_token   3 0 0   100%
tests/test_auth.py test_is_jwt_expired_with_expired_token   3 0 0   100%
tests/test_auth.py test_is_jwt_expired_with_no_exp_claim   2 0 0   100%
tests/test_auth.py test_is_jwt_expired_with_malformed_token   1 0 0   100%
tests/test_auth.py test_is_jwt_expired_with_invalid_base64   2 0 0   100%
tests/test_auth.py test_is_jwt_expired_with_invalid_json   5 0 0   100%
tests/test_auth.py test_is_jwt_expired_edge_case_exact_expiration   3 0 0   100%
tests/test_auth.py test_is_jwt_expired_edge_case_one_second_before   3 0 0   100%
tests/test_auth.py test_is_user_token_expired_with_no_token   2 0 0   100%
tests/test_auth.py test_is_logged_in_with_no_token   2 0 0   100%
tests/test_auth.py test_is_logged_in_with_valid_token   4 0 0   100%
tests/test_auth.py test_is_logged_in_with_expired_token   4 0 0   100%
tests/test_auth.py test_is_logged_in_with_malformed_token   2 0 0   100%
tests/test_auth.py (no function)   20 0 0   100%
tests/test_cli.py _get_command_name   3 0 0   100%
tests/test_cli.py _iter_cli_commands   11 0 0   100%
tests/test_cli.py _has_json_output_option   1 0 0   100%
tests/test_cli.py render_plain   2 0 0   100%
tests/test_cli.py style_with_recording_console   3 0 0   100%
tests/test_cli.py test_shows_help   3 0 0   100%
tests/test_cli.py test_shows_help_without_args   3 0 0   100%
tests/test_cli.py test_script   2 0 0   100%
tests/test_cli.py test_version   3 0 0   100%
tests/test_cli.py test_cli_commands_include_json_output_option   1 0 0   100%
tests/test_cli.py test_uses_header_style   3 0 0   100%
tests/test_cli.py test_title_sweep_frames_keep_constant_chip_width   6 0 0   100%
tests/test_cli.py test_strip_rich_markup_preserves_empty_hint   1 0 0   100%
tests/test_cli.py test_indented_block_hangs_prefix_and_preserves_final_blank_line   2 0 0   100%
tests/test_cli.py test_fastapi_style_returns_parent_rendered_children_without_extra_indent   3 0 0   100%
tests/test_cli.py test_fastapi_style_uses_child_metadata_from_container   4 0 0   100%
tests/test_cli.py test_fastapi_style_renders_title_chip_and_tagged_title   3 0 0   100%
tests/test_cli.py test_fastapi_style_skips_title_animation_for_non_terminal_console   3 0 0   100%
tests/test_cli.py test_fastapi_style_animates_title_sweep_in_terminal   4 0 0   100%
tests/test_cli.py test_fastapi_style_renders_progress_and_bullet_prefixes   8 0 0   100%
tests/test_cli.py test_fastapi_style_progress_status_emoji_states   15 0 0   100%
tests/test_cli.py test_bullets_can_be_written_to_encoded_streams   10 0 0   100%
tests/test_cli.py test_bullet_fallback_preserves_supported_text_and_layout   10 0 0   100%
tests/test_cli.py test_error_bullet_fallback_keeps_error_style   8 0 0   100%
tests/test_cli.py test_fastapi_style_gets_cursor_offset_with_and_without_bullet_column   10 0 0   100%
tests/test_cli.py test_toolkit_success_delegates_human_output_renderer   6 0 0   100%
tests/test_cli.py test_toolkit_success_delegates_human_output_renderer.record_output   1 0 0   100%
tests/test_cli.py test_toolkit_success_delegates_human_output_renderer.render_output   1 0 0   100%
tests/test_cli.py test_get_details_table_renders_label_value_rows   4 0 0   100%
tests/test_cli.py test_toolkit_success_prints_json_envelope   6 0 0   100%
tests/test_cli.py test_toolkit_success_prints_json_envelope.command   2 0 0   100%
tests/test_cli.py test_toolkit_success_omits_empty_json_envelope_fields   6 0 0   100%
tests/test_cli.py test_toolkit_success_omits_empty_json_envelope_fields.command   2 0 0   100%
tests/test_cli.py test_toolkit_success_includes_non_empty_warnings   6 0 0   100%
tests/test_cli.py test_toolkit_success_includes_non_empty_warnings.command   2 0 0   100%
tests/test_cli.py test_toolkit_success_uses_strict_json_output   5 0 0   100%
tests/test_cli.py test_toolkit_json_mode_suppresses_update_message   8 0 0   100%
tests/test_cli.py test_toolkit_json_mode_suppresses_update_message.command   2 0 0   100%
tests/test_cli.py test_toolkit_fail_prints_json_error_and_exits   6 0 0   100%
tests/test_cli.py test_toolkit_fail_prints_json_error_and_exits.command   2 0 0   100%
tests/test_cli.py test_toolkit_fail_uses_error_emoji   7 0 0   100%
tests/test_cli.py test_toolkit_fail_uses_error_emoji.record_print   1 0 0   100%
tests/test_cli.py test_toolkit_fail_uses_custom_human_output_renderer_and_exits   7 0 0   100%
tests/test_cli.py test_toolkit_fail_uses_custom_human_output_renderer_and_exits.render_output   1 0 0   100%
tests/test_cli.py test_toolkit_fail_uses_custom_human_output_renderer_and_exits.command   2 0 0   100%
tests/test_cli.py test_embedded_fastapi_cli_prints_forced_update_message   9 0 0   100%
tests/test_cli.py (no function)   74 0 0   100%
tests/test_cli_apps.py test_creates_app_json_returns_not_logged_in_when_logged_out   4 0 0   100%
tests/test_cli_apps.py test_creates_app_as_json_without_link_by_default   10 0 0   100%
tests/test_cli_apps.py test_creates_app_and_links_to_path_when_link_is_explicit   12 0 0   100%
tests/test_cli_apps.py test_creates_app_prompts_for_team_when_team_id_is_missing   11 0 0   100%
tests/test_cli_apps.py test_creates_app_prompts_for_name_and_links_by_default   16 0 0   100%
tests/test_cli_apps.py test_creates_app_json_requires_team_id_and_name   4 0 0   100%
tests/test_cli_apps.py test_creates_app_json_rejects_path_without_link   11 0 0   100%
tests/test_cli_apps.py test_creates_app_json_rejects_invalid_directory   4 0 0   100%
tests/test_cli_apps.py test_updates_app_json_returns_not_logged_in_when_logged_out   4 0 0   100%
tests/test_cli_apps.py test_updates_app_directory_as_json   7 0 0   100%
tests/test_cli_apps.py test_updates_linked_app_directory_in_human_output   6 0 0   100%
tests/test_cli_apps.py test_updates_app_json_returns_missing_required_input_without_update_flags   4 0 0   100%
tests/test_cli_apps.py test_updates_app_json_rejects_invalid_directory   4 0 0   100%
tests/test_cli_apps.py test_links_existing_app_to_path_as_json   11 0 0   100%
tests/test_cli_apps.py test_links_existing_app_returns_already_linked_without_force   10 0 0   100%
tests/test_cli_apps.py test_links_existing_app_replaces_config_with_force   13 0 0   100%
tests/test_cli_apps.py test_lists_apps_as_json_with_team_and_pagination_params   10 0 0   100%
tests/test_cli_apps.py test_lists_apps_json_returns_missing_required_input_without_team_id   4 0 0   100%
tests/test_cli_apps.py test_gets_app_human_returns_not_logged_in_when_logged_out   3 0 0   100%
tests/test_cli_apps.py test_lists_apps_prompts_for_team_when_team_id_is_missing   10 0 0   100%
tests/test_cli_apps.py test_lists_apps_returns_missing_required_input_when_no_teams   4 0 0   100%
tests/test_cli_apps.py test_gets_app_as_json   6 0 0   100%
tests/test_cli_apps.py test_gets_app_in_human_output   7 0 0   100%
tests/test_cli_apps.py test_gets_app_json_returns_not_found_for_unknown_app   6 0 0   100%
tests/test_cli_apps.py test_gets_app_as_json_uses_linked_app_when_id_omitted   7 0 0   100%
tests/test_cli_apps.py test_gets_app_json_returns_missing_required_input_without_app_id   5 0 0   100%
tests/test_cli_apps.py test_get_app_dashboard_url_uses_settings_team_and_app_slugs   2 0 0   100%
tests/test_cli_apps.py test_lists_apps_in_human_output   8 0 0   100%
tests/test_cli_apps.py test_lists_apps_in_human_output_empty   7 0 0   100%
tests/test_cli_apps.py test_lists_apps_human_returns_not_logged_in_when_logged_out   3 0 0   100%
tests/test_cli_apps.py (no function)   65 0 0   100%
tests/test_cli_ci.py _mock_token_api   1 0 0   100%
tests/test_cli_ci.py test_print_workflow_uses_default_branch   5 0 0   100%
tests/test_cli_ci.py test_print_workflow_uses_branch_option   4 0 0   100%
tests/test_cli_ci.py test_print_workflow_json_outputs_envelope   4 0 0   100%
tests/test_cli_ci.py test_ci_setup_json_outputs_envelope   10 0 0   100%
tests/test_cli_ci.py test_ci_setup_json_returns_dependency_missing_when_gh_is_missing   6 0 0   100%
tests/test_cli_ci.py test_ci_setup_workflow_only_skips_token_and_secret_creation   9 0 0   100%
tests/test_cli_ci.py test_ci_setup_json_existing_workflow_fails_without_prompt   8 0 0   100%
tests/test_cli_ci.py test_ci_setup_json_existing_workflow_fails_before_side_effects   10 0 0   100%
tests/test_cli_ci.py (no function)   23 0 0   100%
tests/test_cli_deploy.py app_source   3 0 0   100%
tests/test_cli_deploy.py _get_random_team   4 0 0   100%
tests/test_cli_deploy.py _get_random_app   5 0 0   100%
tests/test_cli_deploy.py _get_random_deployment   4 0 0   100%
tests/test_cli_deploy.py test_starts_login_when_not_logged_in   12 0 0   100%
tests/test_cli_deploy.py test_cancels_deploy_when_user_declines_login   10 0 0   100%
tests/test_cli_deploy.py test_shows_login_prompt_when_token_is_expired   10 0 0   100%
tests/test_cli_deploy.py test_fails_with_clear_error_when_running_on_ci_without_token   7 0 0   100%
tests/test_cli_deploy.py test_deploy_json_uses_configured_app_and_skips_waiting_by_default   17 0 0   100%
tests/test_cli_deploy.py test_deploy_json_returns_missing_required_input_without_app_context   4 0 0   100%
tests/test_cli_deploy.py test_deploy_json_returns_not_logged_in_without_prompt   4 0 0   100%
tests/test_cli_deploy.py test_deploy_json_includes_large_file_warnings   17 0 0   100%
tests/test_cli_deploy.py test_shows_error_when_trying_to_get_teams   7 0 0   100%
tests/test_cli_deploy.py test_handles_invalid_auth   7 0 0   100%
tests/test_cli_deploy.py test_shows_teams   10 0 0   100%
tests/test_cli_deploy.py test_filter_teams   13 0 0   100%
tests/test_cli_deploy.py test_asks_for_app_name_after_team   7 0 0   100%
tests/test_cli_deploy.py test_filter_apps   15 0 0   100%
tests/test_cli_deploy.py test_creates_app_on_backend   9 0 0   100%
tests/test_cli_deploy.py test_shows_api_message_when_create_app_is_forbidden   9 0 0   100%
tests/test_cli_deploy.py test_creates_app_with_directory   11 0 0   100%
tests/test_cli_deploy.py test_shows_validation_error_for_invalid_directory   6 0 0   100%
tests/test_cli_deploy.py test_cancels_deployment_when_user_selects_no   8 0 0   100%
tests/test_cli_deploy.py test_uses_existing_app   11 0 0   100%
tests/test_cli_deploy.py test_uses_existing_app_with_directory   9 0 0   100%
tests/test_cli_deploy.py test_uses_existing_app_and_changes_directory   9 0 0   100%
tests/test_cli_deploy.py test_updates_app_directory_via_api_when_changed   22 0 0   100%
tests/test_cli_deploy.py test_does_not_update_app_directory_when_unchanged   19 0 0   100%
tests/test_cli_deploy.py test_exits_successfully_when_deployment_is_done   17 0 0   100%
tests/test_cli_deploy.py test_exits_successfully_when_deployment_is_done_when_app_is_configured   20 0 0   100%
tests/test_cli_deploy.py test_exits_with_error_when_deployment_fails_to_build   21 0 0   100%
tests/test_cli_deploy.py test_shows_error_when_deployment_build_fails   19 0 0   100%
tests/test_cli_deploy.py test_shows_error_when_app_does_not_exist   5 0 0   100%
tests/test_cli_deploy.py _deploy_without_waiting   14 0 0   100%
tests/test_cli_deploy.py test_can_skip_waiting   3 0 0   100%
tests/test_cli_deploy.py test_creates_config_folder_and_creates_git_ignore   4 0 0   100%
tests/test_cli_deploy.py test_does_not_duplicate_entry_in_git_ignore   4 0 0   100%
tests/test_cli_deploy.py test_shows_no_apps_found_message_when_team_has_no_apps   9 0 0   100%
tests/test_cli_deploy.py test_shows_error_message_on_build_exception   18 0 0   100%
tests/test_cli_deploy.py test_shows_error_message_on_build_log_http_error   19 0 0   100%
tests/test_cli_deploy.py test_short_wait_messages   22 0 0   100%
tests/test_cli_deploy.py test_short_wait_messages.build_logs_handler   4 0 0   100%
tests/test_cli_deploy.py test_long_wait_messages   22 0 0   100%
tests/test_cli_deploy.py test_long_wait_messages.build_logs_handler   4 0 0   100%
tests/test_cli_deploy.py test_calls_upload_cancelled_when_user_interrupts   14 0 0   100%
tests/test_cli_deploy.py test_cancel_upload_swallows_exceptions   15 0 0   100%
tests/test_cli_deploy.py _mock_deploy_until_upload   8 0 0   100%
tests/test_cli_deploy.py _mock_deploy_until_deployment_creation   6 0 0   100%
tests/test_cli_deploy.py test_deploy_shows_error_when_creation_rejects_archive_size   11 0 0   100%
tests/test_cli_deploy.py test_deploy_json_shows_error_when_creation_rejects_archive_size   9 0 0   100%
tests/test_cli_deploy.py test_deploy_shows_error_when_upload_fails   7 0 0   100%
tests/test_cli_deploy.py test_deploy_successfully_with_token   21 0 0   100%
tests/test_cli_deploy.py test_deploy_with_token_fails   12 0 0   100%
tests/test_cli_deploy.py test_upload_deployment_progress   24 0 0   100%
tests/test_cli_deploy.py test_deploy_with_app_id_arg   14 0 0   100%
tests/test_cli_deploy.py test_deploy_with_app_id_from_env_var   14 0 0   100%
tests/test_cli_deploy.py test_deploy_with_app_id_matching_local_config   19 0 0   100%
tests/test_cli_deploy.py test_deploy_with_app_id_mismatch_fails   13 0 0   100%
tests/test_cli_deploy.py test_deploy_json_with_app_id_mismatch_returns_invalid_input   10 0 0   100%
tests/test_cli_deploy.py test_deploy_with_app_id_arg_app_not_found   7 0 0   100%
tests/test_cli_deploy.py test_deploy_json_with_app_id_arg_app_not_found   6 0 0   100%
tests/test_cli_deploy.py _setup_deployment_mocks   11 0 0   100%
tests/test_cli_deploy.py test_verification_failure_after_build_complete   12 0 0   100%
tests/test_cli_deploy.py test_polling_with_intermediate_states   12 0 0   100%
tests/test_cli_deploy.py test_polling_with_intermediate_states.poll_handler   4 0 0   100%
tests/test_cli_deploy.py test_polling_timeout_shows_dashboard_link   10 0 0   100%
tests/test_cli_deploy.py test_verifying_skipped_treated_as_success   10 0 0   100%
tests/test_cli_deploy.py test_ctrl_c_during_verification_shows_cancelled   10 0 0   100%
tests/test_cli_deploy.py test_ctrl_c_during_build_streaming_shows_cancelled   16 0 0   100%
tests/test_cli_deploy.py _create_file   5 0 0   100%
tests/test_cli_deploy.py test_large_file_threshold_warning   16 0 0   100%
tests/test_cli_deploy.py test_large_file_threshold_only_top_three_files_with_more_indicator   20 0 0   100%
tests/test_cli_deploy.py test_large_file_threshold_does_not_warn_when_no_large_files   13 0 0   100%
tests/test_cli_deploy.py test_large_file_threshold_custom_threshold   12 0 0   100%
tests/test_cli_deploy.py test_large_file_threshold_custom_threshold_envvar   12 0 0   100%
tests/test_cli_deploy.py test_invalid_large_file_threshold   4 0 0   100%
tests/test_cli_deploy.py test_deploy_shows_backend_build_failure_diagnostic   19 0 0   100%
tests/test_cli_deploy.py test_diagnosed_build_failure_replaces_log_panel   9 0 0   100%
tests/test_cli_deploy.py test_diagnosed_build_failure_replaces_log_panel.wait_for_build   2 0 0   100%
tests/test_cli_deploy.py _mock_configured_app   2 0 0   100%
tests/test_cli_deploy.py test_deploy_fails_when_app_directory_is_missing   5 0 0   100%
tests/test_cli_deploy.py test_deploy_points_linked_apps_to_the_repository_root   5 0 0   100%
tests/test_cli_deploy.py test_deploy_with_force_skips_the_app_directory_check   10 0 0   100%
tests/test_cli_deploy.py test_deploy_fails_when_there_is_nothing_to_upload   6 0 0   100%
tests/test_cli_deploy.py test_deploy_on_ci_without_app_id_fails_instead_of_prompting   4 0 0   100%
tests/test_cli_deploy.py test_deploy_on_ci_refuses_the_home_directory   4 0 0   100%
tests/test_cli_deploy.py test_deploy_asks_before_deploying_the_home_directory   6 0 0   100%
tests/test_cli_deploy.py test_deploy_continues_when_home_directory_is_confirmed   9 0 0   100%
tests/test_cli_deploy.py test_degraded_deployment_fails_verification   8 0 0   100%
tests/test_cli_deploy.py (no function)   188 0 0   100%
tests/test_cli_deployments.py build_logs_deployment   3 0 0   100%
tests/test_cli_deployments.py test_lists_deployments_as_json_with_app_id_and_pagination_params   7 0 0   100%
tests/test_cli_deployments.py test_lists_deployments_as_json_uses_linked_app   7 0 0   100%
tests/test_cli_deployments.py test_lists_deployments_human_output_shows_id_status_and_created   6 0 0   100%
tests/test_cli_deployments.py test_lists_deployments_in_human_output_empty   5 0 0   100%
tests/test_cli_deployments.py test_lists_deployments_json_returns_not_logged_in_when_logged_out   4 0 0   100%
tests/test_cli_deployments.py test_lists_deployments_json_returns_missing_required_input_without_app_context   4 0 0   100%
tests/test_cli_deployments.py test_gets_deployment_json_returns_not_logged_in_when_logged_out   4 0 0   100%
tests/test_cli_deployments.py test_gets_deployment_as_json_with_app_id   7 0 0   100%
tests/test_cli_deployments.py test_gets_deployment_as_json_uses_linked_app   7 0 0   100%
tests/test_cli_deployments.py test_gets_deployment_json_returns_missing_required_input_without_app_context   4 0 0   100%
tests/test_cli_deployments.py test_gets_deployment_in_human_output   6 0 0   100%
tests/test_cli_deployments.py test_gets_build_logs_no_follow_as_json   6 0 0   100%
tests/test_cli_deployments.py test_gets_failed_build_logs_no_follow_as_json_exits_nonzero   6 0 0   100%
tests/test_cli_deployments.py test_gets_build_logs_no_follow_in_human_output   6 0 0   100%
tests/test_cli_deployments.py test_gets_build_logs_no_follow_in_human_output_empty   5 0 0   100%
tests/test_cli_deployments.py test_gets_failed_build_logs_no_follow_in_human_output_exits_nonzero   6 0 0   100%
tests/test_cli_deployments.py test_streams_build_logs_in_human_output   6 0 0   100%
tests/test_cli_deployments.py test_streams_failed_build_logs_in_human_output_exits_nonzero   6 0 0   100%
tests/test_cli_deployments.py test_streams_build_logs_as_json_ndjson   6 0 0   100%
tests/test_cli_deployments.py test_build_logs_json_returns_not_logged_in_when_logged_out   4 0 0   100%
tests/test_cli_deployments.py test_streaming_build_logs_handles_keyboard_interrupt   4 0 0   100%
tests/test_cli_deployments.py test_build_logs_handles_not_found_stream_error   5 0 0   100%
tests/test_cli_deployments.py test_build_logs_handles_http_stream_error_with_hint   7 0 0   100%
tests/test_cli_deployments.py test_build_logs_handles_http_stream_error_with_hint.raise_stream_error   7 0 0   100%
tests/test_cli_deployments.py test_build_logs_handles_generic_stream_error   5 0 0   100%
tests/test_cli_deployments.py test_build_logs_handles_connection_loss   6 0 0   100%
tests/test_cli_deployments.py test_streams_failed_build_logs_as_json_ndjson_exits_nonzero   6 0 0   100%
tests/test_cli_deployments.py test_shows_build_failure_diagnostic_in_human_output   10 0 0   100%
tests/test_cli_deployments.py test_gets_build_failure_diagnostic_without_logs_or_hint   6 0 0   100%
tests/test_cli_deployments.py test_streams_build_failure_diagnostic_as_json   8 0 0   100%
tests/test_cli_deployments.py test_gets_build_failure_diagnostic_as_json   8 0 0   100%
tests/test_cli_deployments.py test_generic_build_failure_without_logs   7 0 0   100%
tests/test_cli_deployments.py test_build_logs_shows_persisted_failure_after_logs_expire   10 0 0   100%
tests/test_cli_deployments.py test_build_logs_does_not_report_readiness_failure_as_build_failure   6 0 0   100%
tests/test_cli_deployments.py test_get_deployment_includes_persisted_failure_in_json   5 0 0   100%
tests/test_cli_deployments.py test_get_deployment_shows_persisted_failure   7 0 0   100%
tests/test_cli_deployments.py test_build_logs_handles_deployment_lookup_error   5 0 0   100%
tests/test_cli_deployments.py (no function)   86 0 0   100%
tests/test_cli_link.py test_link_json_requires_app_id   4 0 0   100%
tests/test_cli_link.py test_link_json_returns_not_logged_in_when_logged_out   4 0 0   100%
tests/test_cli_link.py test_link_direct_as_json   11 0 0   100%
tests/test_cli_link.py test_link_direct_in_human_output   13 0 0   100%
tests/test_cli_link.py test_link_direct_with_app_id_option_as_json   11 0 0   100%
tests/test_cli_link.py test_link_returns_invalid_input_when_app_id_is_ambiguous   4 0 0   100%
tests/test_cli_link.py test_shows_a_message_if_not_logged_in   3 0 0   100%
tests/test_cli_link.py test_shows_a_message_if_already_linked   4 0 0   100%
tests/test_cli_link.py test_shows_a_message_if_no_teams   5 0 0   100%
tests/test_cli_link.py test_shows_a_message_if_no_apps   8 0 0   100%
tests/test_cli_link.py test_links_successfully   14 0 0   100%
tests/test_cli_link.py test_shows_error_on_teams_api_failure   5 0 0   100%
tests/test_cli_link.py test_shows_error_on_apps_api_failure   8 0 0   100%
tests/test_cli_link.py test_app_menu_is_ordered_by_slug   12 0 0   100%
tests/test_cli_link.py test_team_menu_is_ordered_by_name   11 0 0   100%
tests/test_cli_link.py test_links_with_multiple_teams_and_apps   14 0 0   100%
tests/test_cli_link.py (no function)   39 0 0   100%
tests/test_cli_login.py test_shows_a_message_if_something_is_wrong   6 0 0   100%
tests/test_cli_login.py test_full_login   12 0 0   100%
tests/test_cli_login.py test_cloud_auth_login_alias_uses_interactive_login   11 0 0   100%
tests/test_cli_login.py test_cloud_login_json_returns_authorization_data   7 0 0   100%
tests/test_cli_login.py test_top_level_login_json_returns_authorization_data   7 0 0   100%
tests/test_cli_login.py test_auth_start_is_not_supported   3 0 0   100%
tests/test_cli_login.py test_auth_login_as_json_returns_authorization_data   7 0 0   100%
tests/test_cli_login.py test_auth_wait_as_json_writes_auth_config   6 0 0   100%
tests/test_cli_login.py test_auth_wait_shows_login_title   5 0 0   100%
tests/test_cli_login.py test_full_login_with_no_open_shows_manual_authorization_details   10 0 0   100%
tests/test_cli_login.py test_auth_wait_json_timeout_returns_error_envelope   6 0 0   100%
tests/test_cli_login.py test_auth_wait_json_cancel_returns_error_envelope   5 0 0   100%
tests/test_cli_login.py test_login_shows_authorization_declined   6 0 0   100%
tests/test_cli_login.py test_auth_wait_shows_authorization_declined   5 0 0   100%
tests/test_cli_login.py test_auth_wait_json_authorization_declined_returns_error_envelope   14 0 0   100%
tests/test_cli_login.py test_fetch_access_token_uses_default_timeout   7 0 0   100%
tests/test_cli_login.py test_full_login_with_deploy_token_set   13 0 0   100%
tests/test_cli_login.py test_fetch_access_token_success_immediately   6 0 0   100%
tests/test_cli_login.py test_fetch_access_token_authorization_pending_then_success   8 0 0   100%
tests/test_cli_login.py test_fetch_access_token_handles_unknown_oauth_error   6 0 0   100%
tests/test_cli_login.py test_fetch_access_token_handles_500_error   6 0 0   100%
tests/test_cli_login.py test_notify_already_logged_in_user   4 0 0   100%
tests/test_cli_login.py (no function)   59 0 0   100%
tests/test_cli_logout.py test_logout_with_existing_auth_file   6 0 0   100%
tests/test_cli_logout.py test_logout_with_no_auth_file   5 0 0   100%
tests/test_cli_logout.py test_logout_json_with_existing_auth_file   6 0 0   100%
tests/test_cli_logout.py test_logout_json_with_no_auth_file   6 0 0   100%
tests/test_cli_logout.py (no function)   9 0 0   100%
tests/test_cli_setup_ci.py _mock_token_api   1 0 0   100%
tests/test_cli_setup_ci.py test_shows_login_message_when_not_logged_in   3 0 0   100%
tests/test_cli_setup_ci.py test_shows_message_if_app_not_configured   3 0 0   100%
tests/test_cli_setup_ci.py test_shows_error_when_secrets_only_and_workflow_only_conflict   3 0 0   100%
tests/test_cli_setup_ci.py test_shows_error_when_git_not_installed   4 0 0   100%
tests/test_cli_setup_ci.py test_exits_with_error_when_no_remote_origin   4 0 0   100%
tests/test_cli_setup_ci.py test_shows_error_when_origin_is_not_github   4 0 0   100%
tests/test_cli_setup_ci.py test_detects_github_origin_and_completes_successfully   6 0 0   100%
tests/test_cli_setup_ci.py test_app_id_option_works_without_linked_directory   6 0 0   100%
tests/test_cli_setup_ci.py test_detects_non_main_default_branch   5 0 0   100%
tests/test_cli_setup_ci.py test_get_default_branch_falls_back_to_main   2 0 0   100%
tests/test_cli_setup_ci.py test_get_default_branch_returns_branch_name   2 0 0   100%
tests/test_cli_setup_ci.py test_check_git_installed_returns_true   2 0 0   100%
tests/test_cli_setup_ci.py test_check_git_installed_returns_false_when_missing   2 0 0   100%
tests/test_cli_setup_ci.py test_check_gh_cli_installed_returns_true   2 0 0   100%
tests/test_cli_setup_ci.py test_check_gh_cli_installed_returns_false_when_missing   2 0 0   100%
tests/test_cli_setup_ci.py test_format_workflow_path_uses_forward_slashes   1 0 0   100%
tests/test_cli_setup_ci.py test_existing_workflow_prompt_uses_forward_slashes   7 0 0   100%
tests/test_cli_setup_ci.py test_existing_workflow_prompt_uses_forward_slashes.confirm   2 0 0   100%
tests/test_cli_setup_ci.py test_get_remote_origin_returns_url   2 0 0   100%
tests/test_cli_setup_ci.py test_get_remote_origin_falls_back_to_git_when_gh_fails   2 0 0   100%
tests/test_cli_setup_ci.py test_set_github_secret_calls_gh_cli   3 0 0   100%
tests/test_cli_setup_ci.py test_set_github_secret_raises_custom_exception_on_command_error   3 0 0   100%
tests/test_cli_setup_ci.py test_set_github_secret_raises_custom_exception_when_gh_not_found   3 0 0   100%
tests/test_cli_setup_ci.py test_dry_run_shows_planned_steps   8 0 0   100%
tests/test_cli_setup_ci.py test_dry_run_secrets_only_skips_workflow   5 0 0   100%
tests/test_cli_setup_ci.py test_secrets_only_skips_workflow_file   8 0 0   100%
tests/test_cli_setup_ci.py test_branch_flag_overrides_detected_branch   8 0 0   100%
tests/test_cli_setup_ci.py test_creates_token_sets_secrets_and_writes_workflow   19 0 0   100%
tests/test_cli_setup_ci.py test_declining_token_creation_skips_token_and_secret_setup   8 0 0   100%
tests/test_cli_setup_ci.py test_declining_token_creation_for_secrets_only_finishes_without_setup   7 0 0   100%
tests/test_cli_setup_ci.py test_declining_github_secret_setup_keeps_created_token   10 0 0   100%
tests/test_cli_setup_ci.py test_shows_manual_instructions_when_gh_not_installed   11 0 0   100%
tests/test_cli_setup_ci.py test_handles_gh_command_errors_gracefully   5 0 0   100%
tests/test_cli_setup_ci.py test_file_flag_uses_custom_filename   6 0 0   100%
tests/test_cli_setup_ci.py test_overwrites_existing_workflow_when_confirmed   10 0 0   100%
tests/test_cli_setup_ci.py test_skips_writing_workflow_when_declined   10 0 0   100%
tests/test_cli_setup_ci.py test_renames_workflow_when_declined_and_new_name_given   11 0 0   100%
tests/test_cli_setup_ci.py test_get_github_host_extracts_from_ssh_url   2 0 0   100%
tests/test_cli_setup_ci.py test_get_github_host_extracts_from_https_url   2 0 0   100%
tests/test_cli_setup_ci.py test_get_github_host_extracts_from_enterprise_ssh_url   2 0 0   100%
tests/test_cli_setup_ci.py test_get_github_host_extracts_from_enterprise_https_url   2 0 0   100%
tests/test_cli_setup_ci.py test_shows_enterprise_manual_secrets_url_when_gh_not_installed   9 0 0   100%
tests/test_cli_setup_ci.py (no function)   72 0 0   100%
tests/test_cli_teams.py test_lists_teams_as_json_with_pagination_params   6 0 0   100%
tests/test_cli_teams.py test_lists_teams_json_returns_not_logged_in_when_logged_out   4 0 0   100%
tests/test_cli_teams.py test_lists_teams_human_shows_api_error   4 0 0   100%
tests/test_cli_teams.py test_lists_teams_in_human_output   4 0 0   100%
tests/test_cli_teams.py test_lists_teams_in_human_output_empty   4 0 0   100%
tests/test_cli_teams.py test_lists_teams_human_returns_not_logged_in_when_logged_out   3 0 0   100%
tests/test_cli_teams.py test_gets_team_human_returns_not_logged_in_when_logged_out   3 0 0   100%
tests/test_cli_teams.py test_gets_team_as_json   6 0 0   100%
tests/test_cli_teams.py test_gets_team_in_human_output   5 0 0   100%
tests/test_cli_teams.py test_gets_team_json_returns_not_found_for_unknown_team   6 0 0   100%
tests/test_cli_teams.py test_gets_team_json_returns_permission_denied   6 0 0   100%
tests/test_cli_teams.py (no function)   27 0 0   100%
tests/test_cli_tokens.py test_creates_token_json_returns_not_logged_in_when_logged_out   4 0 0   100%
tests/test_cli_tokens.py test_deletes_token_json_returns_not_logged_in_when_logged_out   4 0 0   100%
tests/test_cli_tokens.py test_deletes_token_as_json_with_app_id   7 0 0   100%
tests/test_cli_tokens.py test_deletes_token_as_json_uses_linked_app   7 0 0   100%
tests/test_cli_tokens.py test_deletes_token_json_returns_missing_required_input_without_app_context   4 0 0   100%
tests/test_cli_tokens.py test_delete_token_json_returns_not_found_when_token_is_missing   7 0 0   100%
tests/test_cli_tokens.py test_delete_token_human_output   6 0 0   100%
tests/test_cli_tokens.py test_creates_token_json_returns_missing_required_input_without_name   4 0 0   100%
tests/test_cli_tokens.py test_creates_token_json_returns_missing_required_input_without_output_file   4 0 0   100%
tests/test_cli_tokens.py test_create_token_requires_output_file_before_prompting_for_name   6 0 0   100%
tests/test_cli_tokens.py test_creates_token_as_json_with_app_id_and_writes_value_to_file   11 0 0   100%
tests/test_cli_tokens.py test_creates_token_uses_linked_app_and_custom_expiration   8 0 0   100%
tests/test_cli_tokens.py test_create_token_prompts_for_name_under_deploy_tokens_heading   10 0 0   100%
tests/test_cli_tokens.py test_create_token_separates_prompt_from_http_error   12 0 0   100%
tests/test_cli_tokens.py test_create_token_human_output_does_not_print_token_value   12 0 0   100%
tests/test_cli_tokens.py test_create_token_json_maps_duplicate_name_to_invalid_input   8 0 0   100%
tests/test_cli_tokens.py test_lists_tokens_json_returns_not_logged_in_when_logged_out   4 0 0   100%
tests/test_cli_tokens.py test_lists_tokens_json_returns_missing_required_input_without_app_context   4 0 0   100%
tests/test_cli_tokens.py test_lists_tokens_as_json_with_app_id_without_secret_values   8 0 0   100%
tests/test_cli_tokens.py test_lists_tokens_as_json_uses_linked_app   6 0 0   100%
tests/test_cli_tokens.py test_lists_tokens_in_human_output_empty   5 0 0   100%
tests/test_cli_tokens.py test_lists_tokens_human_output_without_secret_values   6 0 0   100%
tests/test_cli_tokens.py (no function)   47 0 0   100%
tests/test_cli_unlink.py test_apps_unlink_removes_cloud_json_and_preserves_fastapicloud_dir   16 0 0   100%
tests/test_cli_unlink.py test_unlink_compatibility_shortcut_removes_cloud_json   12 0 0   100%
tests/test_cli_unlink.py test_apps_unlink_as_json   10 0 0   100%
tests/test_cli_unlink.py test_unlink_compatibility_shortcut_as_json   13 0 0   100%
tests/test_cli_unlink.py test_apps_unlink_json_returns_not_linked_when_config_is_missing   4 0 0   100%
tests/test_cli_unlink.py test_unlink_when_no_configuration_exists   3 0 0   100%
tests/test_cli_unlink.py (no function)   11 0 0   100%
tests/test_cli_whoami.py test_shows_a_message_if_something_is_wrong   4 0 0   100%
tests/test_cli_whoami.py test_shows_a_message_when_token_is_invalid   4 0 0   100%
tests/test_cli_whoami.py test_shows_a_message_when_user_has_no_permissions   4 0 0   100%
tests/test_cli_whoami.py test_shows_email   4 0 0   100%
tests/test_cli_whoami.py test_uses_toolkit_output_renderer_for_logged_in_user   11 0 0   100%
tests/test_cli_whoami.py test_uses_toolkit_output_renderer_for_logged_in_user.record_output   1 0 0   100%
tests/test_cli_whoami.py test_prints_json_when_json_env_is_enabled   6 0 0   100%
tests/test_cli_whoami.py test_json_option_is_not_enabled_before_command   3 0 0   100%
tests/test_cli_whoami.py test_prints_json_when_json_option_is_enabled_after_command   4 0 0   100%
tests/test_cli_whoami.py test_prints_json_error_when_json_env_is_enabled_and_logged_out   4 0 0   100%
tests/test_cli_whoami.py test_prints_json_error_when_token_is_invalid   5 0 0   100%
tests/test_cli_whoami.py test_prints_json_error_when_user_has_no_permissions   5 0 0   100%
tests/test_cli_whoami.py test_prints_json_error_when_request_has_generic_api_error   8 0 0   100%
tests/test_cli_whoami.py test_prints_json_error_when_request_times_out   5 0 0   100%
tests/test_cli_whoami.py test_handles_read_timeout   4 0 0   100%
tests/test_cli_whoami.py test_prints_not_logged_in   4 0 0   100%
tests/test_cli_whoami.py test_prints_not_logged_in_with_deploy_token   4 0 0   100%
tests/test_cli_whoami.py test_shows_logged_in_and_has_deploy_token   5 0 0   100%
tests/test_cli_whoami.py (no function)   42 0 0   100%
tests/test_config.py test_loads_default_values_when_file_does_not_exist   4 0 0   100%
tests/test_config.py test_loads_settings_even_when_file_is_broken   6 0 0   100%
tests/test_config.py test_loads_partial_settings   6 0 0   100%
tests/test_config.py test_get_config_folder_reads_env_override   2 0 0   100%
tests/test_config.py test_get_config_folder_defaults_to_app_dir   2 0 0   100%
tests/test_config.py (no function)   10 0 0   100%
tests/test_dates.py test_format_last_updated_formats_relative_time   1 0 0   100%
tests/test_dates.py test_format_last_updated_returns_invalid_dates_unchanged   1 0 0   100%
tests/test_dates.py (no function)   8 0 0   100%
tests/test_deploy_utils.py _create_file   5 0 0   100%
tests/test_deploy_utils.py test_excludes_paths   1 0 0   100%
tests/test_deploy_utils.py test_includes_paths   1 0 0   100%
tests/test_deploy_utils.py test_deployment_status_to_human_readable   1 0 0   100%
tests/test_deploy_utils.py test_every_deployment_status_has_human_readable   1 0 0   100%
tests/test_deploy_utils.py test_deployment_model_accepts_unknown_status   2 0 0   100%
tests/test_deploy_utils.py test_validate_app_directory_valid   1 0 0   100%
tests/test_deploy_utils.py test_validate_app_directory_invalid   3 0 0   100%
tests/test_deploy_utils.py test_get_large_files_no_files_above_threshold   2 0 0   100%
tests/test_deploy_utils.py test_get_large_files_returns_files_at_or_above_threshold   5 0 0   100%
tests/test_deploy_utils.py test_get_large_files_excludes_default_exclusions   4 0 0   100%
tests/test_deploy_utils.py test_get_large_files_respects_fastapicloudignore   4 0 0   100%
tests/test_deploy_utils.py (no function)   22 0 0   100%
tests/test_env_delete.py test_delete_succeeds_when_variable_is_already_absent   6 0 0   100%
tests/test_env_delete.py test_delete_json_reports_managed_variable_error   6 0 0   100%
tests/test_env_delete.py configured_app   6 0 0   100%
tests/test_env_delete.py test_shows_a_message_if_not_logged_in   3 0 0   100%
tests/test_env_delete.py test_shows_a_message_if_app_is_not_configured   3 0 0   100%
tests/test_env_delete.py test_delete_json_returns_missing_required_input_without_app_context   4 0 0   100%
tests/test_env_delete.py test_shows_a_message_if_something_is_wrong   5 0 0   100%
tests/test_env_delete.py test_shows_message_if_app_not_found   5 0 0   100%
tests/test_env_delete.py test_shows_a_message_if_name_is_invalid   4 0 0   100%
tests/test_env_delete.py test_shows_message_when_it_deletes   5 0 0   100%
tests/test_env_delete.py test_deletes_environment_variable_as_json_with_app_id   6 0 0   100%
tests/test_env_delete.py test_delete_environment_variable_json_returns_app_not_found   6 0 0   100%
tests/test_env_delete.py test_shows_selector_for_environment_variables   7 0 0   100%
tests/test_env_delete.py test_shows_message_if_no_environment_variable   5 0 0   100%
tests/test_env_delete.py test_delete_json_returns_missing_required_input_without_name   4 0 0   100%
tests/test_env_delete.py test_delete_json_returns_missing_required_input_without_confirmation   4 0 0   100%
tests/test_env_delete.py test_shows_message_when_deletion_is_cancelled   4 0 0   100%
tests/test_env_delete.py (no function)   39 0 0   100%
tests/test_env_get.py test_shows_a_message_if_not_logged_in   3 0 0   100%
tests/test_env_get.py test_shows_message_if_no_environment_variables   5 0 0   100%
tests/test_env_get.py test_gets_environment_variable_in_human_output_with_environment_variables_tag   5 0 0   100%
tests/test_env_get.py test_gets_secret_environment_variable_in_human_output   5 0 0   100%
tests/test_env_get.py test_get_prompts_for_environment_variable_name   6 0 0   100%
tests/test_env_get.py test_get_json_returns_missing_required_input_without_name   4 0 0   100%
tests/test_env_get.py test_gets_secret_environment_variable_as_json   7 0 0   100%
tests/test_env_get.py test_gets_non_secret_environment_variable_as_json   7 0 0   100%
tests/test_env_get.py test_get_environment_variable_json_returns_not_found   6 0 0   100%
tests/test_env_get.py (no function)   26 0 0   100%
tests/test_env_list.py test_shows_a_message_if_not_logged_in   3 0 0   100%
tests/test_env_list.py test_shows_a_message_if_app_is_not_configured   3 0 0   100%
tests/test_env_list.py test_list_json_returns_missing_required_input_without_app_context   4 0 0   100%
tests/test_env_list.py test_shows_a_message_if_something_is_wrong   5 0 0   100%
tests/test_env_list.py test_shows_a_message_if_no_env_variables   5 0 0   100%
tests/test_env_list.py test_shows_environment_variables_names   5 0 0   100%
tests/test_env_list.py test_lists_environment_variables_as_json_with_app_id   7 0 0   100%
tests/test_env_list.py test_lists_environment_variables_as_json_with_path   5 0 0   100%
tests/test_env_list.py test_shows_environment_variables_in_compact_table   5 0 0   100%
tests/test_env_list.py test_truncates_values_and_marks_secrets_in_compact_table   6 0 0   100%
tests/test_env_list.py test_shows_secret_environment_variables_without_value   5 0 0   100%
tests/test_env_list.py (no function)   35 0 0   100%
tests/test_env_set.py test_updates_existing_variable_using_returned_secret_status   5 0 0   100%
tests/test_env_set.py test_updating_existing_secret_shows_secret_output   4 0 0   100%
tests/test_env_set.py test_set_json_reports_managed_variable_error   6 0 0   100%
tests/test_env_set.py configured_app   6 0 0   100%
tests/test_env_set.py test_shows_a_message_if_not_logged_in   3 0 0   100%
tests/test_env_set.py test_shows_a_message_if_app_is_not_configured   3 0 0   100%
tests/test_env_set.py test_shows_a_message_if_something_is_wrong   5 0 0   100%
tests/test_env_set.py test_shows_message_when_it_sets   5 0 0   100%
tests/test_env_set.py test_asks_for_name_and_value   6 0 0   100%
tests/test_env_set.py test_asks_for_name_and_value_for_secret   6 0 0   100%
tests/test_env_set.py test_sets_secret_flag   5 0 0   100%
tests/test_env_set.py test_sets_environment_variable_as_json   6 0 0   100%
tests/test_env_set.py test_sets_secret_environment_variable_as_json   6 0 0   100%
tests/test_env_set.py test_sets_environment_variable_as_json_reads_value_stdin   6 0 0   100%
tests/test_env_set.py test_set_json_returns_missing_required_input_without_name   4 0 0   100%
tests/test_env_set.py test_set_rejects_value_and_value_stdin   4 0 0   100%
tests/test_env_set.py test_set_json_returns_missing_required_input_without_value   4 0 0   100%
tests/test_env_set.py (no function)   42 0 0   100%
tests/test_logs.py test_shows_message_if_not_logged_in   3 0 0   100%
tests/test_logs.py test_shows_message_if_app_not_configured   3 0 0   100%
tests/test_logs.py test_displays_logs   10 0 0   100%
tests/test_logs.py test_displays_logs_with_explicit_app_id   9 0 0   100%
tests/test_logs.py test_apps_logs_displays_logs   8 0 0   100%
tests/test_logs.py test_apps_logs_no_follow_json_outputs_envelope   8 0 0   100%
tests/test_logs.py test_apps_logs_follow_json_outputs_ndjson   8 0 0   100%
tests/test_logs.py test_passes_default_params   6 0 0   100%
tests/test_logs.py test_streams_logs_in_human_output   7 0 0   100%
tests/test_logs.py test_passes_custom_params   4 0 0   100%
tests/test_logs.py test_displays_all_log_levels   10 0 0   100%
tests/test_logs.py test_handles_401_unauthorized   5 0 0   100%
tests/test_logs.py test_handles_403_forbidden   5 0 0   100%
tests/test_logs.py test_handles_404   5 0 0   100%
tests/test_logs.py test_handles_retention_limit_error   6 0 0   100%
tests/test_logs.py test_handles_retention_limit_error_json   8 0 0   100%
tests/test_logs.py test_shows_message_when_no_logs_found   5 0 0   100%
tests/test_logs.py test_handles_server_error_message   7 0 0   100%
tests/test_logs.py test_handles_unknown_log_level   7 0 0   100%
tests/test_logs.py test_skips_invalid_json_lines   7 0 0   100%
tests/test_logs.py test_skips_heartbeat_messages   8 0 0   100%
tests/test_logs.py test_handles_connection_loss   4 0 0   100%
tests/test_logs.py test_rejects_invalid_since_format   4 0 0   100%
tests/test_logs.py test_rejects_invalid_tail   4 0 0   100%
tests/test_logs.py test_accepts_valid_since_format   4 0 0   100%
tests/test_logs.py (no function)   61 0 0   100%
tests/test_prepare_release.py test_bump_version   1 0 0   100%
tests/test_prepare_release.py test_update_version_file   3 0 0   100%
tests/test_prepare_release.py test_update_version_file_requires_newer_version   3 0 0   100%
tests/test_prepare_release.py test_update_release_notes   3 0 0   100%
tests/test_prepare_release.py test_update_release_notes_rejects_existing_version   3 0 0   100%
tests/test_prepare_release.py test_get_release_notes_body_with_dated_heading   3 0 0   100%
tests/test_prepare_release.py test_get_release_notes_body_with_plain_heading   3 0 0   100%
tests/test_prepare_release.py test_get_release_notes_body_allows_non_version_h2_content   3 0 0   100%
tests/test_prepare_release.py test_get_release_notes_body_requires_version_section   3 0 0   100%
tests/test_prepare_release.py test_get_release_notes_body_requires_non_empty_section   3 0 0   100%
tests/test_prepare_release.py test_cli_updates_configured_files   10 0 0   100%
tests/test_prepare_release.py test_cli_accepts_env_vars   14 0 0   100%
tests/test_prepare_release.py test_cli_prints_current_version   6 0 0   100%
tests/test_prepare_release.py test_cli_prints_release_notes   8 0 0   100%
tests/test_prepare_release.py (no function)   21 0 0   100%
tests/test_progress_file.py _make_file   3 0 0   100%
tests/test_progress_file.py test_read_with_size   4 0 0   100%
tests/test_progress_file.py test_callback_not_called_within_interval   6 0 0   100%
tests/test_progress_file.py test_callback_called_after_interval_elapses   8 0 0   100%
tests/test_progress_file.py test_callback_tracks_cumulative_bytes   12 0 0   100%
tests/test_progress_file.py test_callback_called_on_eof   6 0 0   100%
tests/test_progress_file.py test_name_property   3 0 0   100%
tests/test_progress_file.py test_callback_uses_current_file_position_after_seek   8 0 0   100%
tests/test_progress_file.py (no function)   13 0 0   100%
tests/test_sentry.py test_init_sentry_when_logged_in   3 0 0   100%
tests/test_sentry.py test_init_sentry_when_deployment_token   4 0 0   100%
tests/test_sentry.py test_init_sentry_when_logged_out   3 0 0   100%
tests/test_sentry.py (no function)   7 0 0   100%
tests/test_utils_apps.py test_resolve_app_id_prefers_explicit_app_id   4 0 0   100%
tests/test_utils_apps.py test_resolve_app_id_uses_linked_app   4 0 0   100%
tests/test_utils_apps.py test_resolve_app_id_returns_none_without_app_context   1 0 0   100%
tests/test_utils_apps.py (no function)   5 0 0   100%
tests/test_version_check.py current_version   1 0 0   100%
tests/test_version_check.py test_is_newer_version   6 0 0   100%
tests/test_version_check.py test_check_for_update_returns_update_when_pypi_has_newer_version   4 0 0   100%
tests/test_version_check.py test_check_for_update_uses_fresh_cache_without_network   4 0 0   100%
tests/test_version_check.py test_check_for_update_refreshes_stale_cache   6 0 0   100%
tests/test_version_check.py test_check_for_update_returns_none_when_current_is_latest   3 0 0   100%
tests/test_version_check.py test_check_for_update_ignores_network_errors   3 0 0   100%
tests/test_version_check.py test_check_for_update_ignores_invalid_payload   3 0 0   100%
tests/test_version_check.py test_read_cached_latest_version_ignores_stale_cache   4 0 0   100%
tests/test_version_check.py test_read_cached_latest_version_ignores_invalid_cache   4 0 0   100%
tests/test_version_check.py test_read_cached_latest_version_ignores_non_simple_version   4 0 0   100%
tests/test_version_check.py test_write_latest_version_cache   3 0 0   100%
tests/test_version_check.py test_write_latest_version_cache_ignores_write_errors   4 0 0   100%
tests/test_version_check.py test_get_upgrade_command_uses_detected_installer   3 0 0   100%
tests/test_version_check.py test_get_upgrade_command_uses_detected_installer.fake_detect_installer   2 0 0   100%
tests/test_version_check.py test_get_upgrade_command_falls_back_when_installer_is_unknown   2 0 0   100%
tests/test_version_check.py test_get_upgrade_command_propagates_detector_errors   4 0 0   100%
tests/test_version_check.py test_get_upgrade_command_propagates_detector_errors.broken_detector   1 0 0   100%
tests/test_version_check.py test_format_update_message   6 0 0   100%
tests/test_version_check.py _seed_fresh_update_cache   1 0 0   100%
tests/test_version_check.py test_get_rich_toolkit_prints_update_after_toolkit_output   7 0 0   100%
tests/test_version_check.py test_get_rich_toolkit_prints_update_after_toolkit_output.command_with_toolkit   2 0 0   100%
tests/test_version_check.py test_get_rich_toolkit_skips_update_when_disabled   7 0 0   100%
tests/test_version_check.py test_background_check_stores_result_and_returns_message   8 0 0   100%
tests/test_version_check.py test_background_check_returns_no_message_without_update   5 0 0   100%
tests/test_version_check.py test_background_check_hides_unexpected_errors   6 0 0   100%
tests/test_version_check.py test_background_check_hides_unexpected_errors.broken_check   1 0 0   100%
tests/test_version_check.py (no function)   48 0 0   100%
tests/utils.py changing_dir   5 0 0   100%
tests/utils.py build_logs_response   1 0 0   100%
tests/utils.py _SnapshotResult.output   2 0 0   100%
tests/utils.py SnapshotCliRunner.invoke   3 0 0   100%
tests/utils.py create_jwt_token   5 0 0   100%
tests/utils.py (no function)   37 0 0   100%
Total     9389 0 19   100%

No items found using the specified filter.