[INFO] cloning repository https://github.com/Dheebz/spotify-cli [INFO] running `Command { std: "git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "clone" "--bare" "https://github.com/Dheebz/spotify-cli" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2FDheebz%2Fspotify-cli", kill_on_drop: false }` [INFO] [stderr] Cloning into bare repository '/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2FDheebz%2Fspotify-cli'... [INFO] running `Command { std: "git" "rev-parse" "HEAD", kill_on_drop: false }` [INFO] [stdout] b3c7438bdaf0ad798c6f013b88662c37173aa6cd [INFO] testing Dheebz/spotify-cli against master#7704328ba5ae8d6ce0ac303c9d5a1a1605906766 for pr-146989 [INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2FDheebz%2Fspotify-cli" "/workspace/builds/worker-2-tc1/source", kill_on_drop: false }` [INFO] [stderr] Cloning into '/workspace/builds/worker-2-tc1/source'... [INFO] [stderr] done. [INFO] started tweaking git repo https://github.com/Dheebz/spotify-cli [INFO] finished tweaking git repo https://github.com/Dheebz/spotify-cli [INFO] tweaked toml for git repo https://github.com/Dheebz/spotify-cli written to /workspace/builds/worker-2-tc1/source/Cargo.toml [INFO] validating manifest of git repo https://github.com/Dheebz/spotify-cli on toolchain 7704328ba5ae8d6ce0ac303c9d5a1a1605906766 [INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+7704328ba5ae8d6ce0ac303c9d5a1a1605906766" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }` [INFO] crate git repo https://github.com/Dheebz/spotify-cli already has a lockfile, it will not be regenerated [INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+7704328ba5ae8d6ce0ac303c9d5a1a1605906766" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }` [INFO] [stderr] Updating crates.io index [INFO] [stderr] Downloading crates ... [INFO] [stderr] Downloaded chunked_transfer v1.5.0 [INFO] [stderr] Downloaded float-cmp v0.10.0 [INFO] [stderr] Downloaded clap_complete v4.5.65 [INFO] [stderr] Downloaded deadpool v0.12.3 [INFO] [stderr] Downloaded wiremock v0.6.5 [INFO] [stderr] Downloaded zmij v1.0.14 [INFO] [stderr] Downloaded keyring v3.6.3 [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-2-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-2-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:98afbf2d16093dec2546ff8915fddc74e65664aa03fc460b3712b1c2c54a33e4" "/opt/rustwide/cargo-home/bin/cargo" "+7704328ba5ae8d6ce0ac303c9d5a1a1605906766" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }` [INFO] [stdout] 6f550d78422f0b5e37d670ac38a41e7c051b0ae9666f6f7696b777b53a07790c [INFO] running `Command { std: "docker" "start" "-a" "6f550d78422f0b5e37d670ac38a41e7c051b0ae9666f6f7696b777b53a07790c", kill_on_drop: false }` [INFO] running `Command { std: "docker" "inspect" "6f550d78422f0b5e37d670ac38a41e7c051b0ae9666f6f7696b777b53a07790c", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "6f550d78422f0b5e37d670ac38a41e7c051b0ae9666f6f7696b777b53a07790c", kill_on_drop: false }` [INFO] [stdout] 6f550d78422f0b5e37d670ac38a41e7c051b0ae9666f6f7696b777b53a07790c [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-2-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-2-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "RUSTDOCFLAGS=--cap-lints=forbid" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:98afbf2d16093dec2546ff8915fddc74e65664aa03fc460b3712b1c2c54a33e4" "/opt/rustwide/cargo-home/bin/cargo" "+7704328ba5ae8d6ce0ac303c9d5a1a1605906766" "build" "--frozen" "--message-format=json", kill_on_drop: false }` [INFO] [stdout] d753f699f43510dc045e777479b94d71a3a1b0530217b3e614e67c3ffe502adf [INFO] running `Command { std: "docker" "start" "-a" "d753f699f43510dc045e777479b94d71a3a1b0530217b3e614e67c3ffe502adf", kill_on_drop: false }` [INFO] [stderr] Compiling proc-macro2 v1.0.105 [INFO] [stderr] Compiling quote v1.0.43 [INFO] [stderr] Compiling bytes v1.11.0 [INFO] [stderr] Compiling itoa v1.0.17 [INFO] [stderr] Compiling find-msvc-tools v0.1.7 [INFO] [stderr] Compiling smallvec v1.15.1 [INFO] [stderr] Compiling tracing-core v0.1.36 [INFO] [stderr] Compiling zeroize v1.8.2 [INFO] [stderr] Compiling icu_properties_data v2.1.2 [INFO] [stderr] Compiling generic-array v0.14.7 [INFO] [stderr] Compiling errno v0.3.14 [INFO] [stderr] Compiling socket2 v0.6.1 [INFO] [stderr] Compiling mio v1.1.1 [INFO] [stderr] Compiling futures-task v0.3.31 [INFO] [stderr] Compiling zmij v1.0.14 [INFO] [stderr] Compiling rustls v0.23.36 [INFO] [stderr] Compiling signal-hook-registry v1.4.8 [INFO] [stderr] Compiling futures-util v0.3.31 [INFO] [stderr] Compiling futures-channel v0.3.31 [INFO] [stderr] Compiling serde_json v1.0.149 [INFO] [stderr] Compiling cc v1.2.52 [INFO] [stderr] Compiling rustls-pki-types v1.13.2 [INFO] [stderr] Compiling clap_lex v0.7.7 [INFO] [stderr] Compiling regex-syntax v0.8.8 [INFO] [stderr] Compiling indexmap v2.13.0 [INFO] [stderr] Compiling ryu v1.0.22 [INFO] [stderr] Compiling option-ext v0.2.0 [INFO] [stderr] Compiling iri-string v0.7.10 [INFO] [stderr] Compiling winnow v0.7.14 [INFO] [stderr] Compiling dirs-sys v0.4.1 [INFO] [stderr] Compiling clap_builder v4.5.54 [INFO] [stderr] Compiling tracing-log v0.2.0 [INFO] [stderr] Compiling ascii v1.1.0 [INFO] [stderr] Compiling chunked_transfer v1.5.0 [INFO] [stderr] Compiling webpki-roots v1.0.5 [INFO] [stderr] Compiling dirs v5.0.1 [INFO] [stderr] Compiling block-buffer v0.10.4 [INFO] [stderr] Compiling http v1.4.0 [INFO] [stderr] Compiling crypto-common v0.1.7 [INFO] [stderr] Compiling tiny_http v0.12.0 [INFO] [stderr] Compiling keyring v3.6.3 [INFO] [stderr] Compiling syn v2.0.114 [INFO] [stderr] Compiling digest v0.10.7 [INFO] [stderr] Compiling urlencoding v2.1.3 [INFO] [stderr] Compiling sha2 v0.10.9 [INFO] [stderr] Compiling http-body v1.0.1 [INFO] [stderr] Compiling ring v0.17.14 [INFO] [stderr] Compiling http-body-util v0.1.3 [INFO] [stderr] Compiling regex-automata v0.4.13 [INFO] [stderr] Compiling matchers v0.2.0 [INFO] [stderr] Compiling synstructure v0.13.2 [INFO] [stderr] Compiling zerovec-derive v0.11.2 [INFO] [stderr] Compiling displaydoc v0.2.5 [INFO] [stderr] Compiling serde_derive v1.0.228 [INFO] [stderr] Compiling tokio-macros v2.6.0 [INFO] [stderr] Compiling tracing-attributes v0.1.31 [INFO] [stderr] Compiling clap_derive v4.5.49 [INFO] [stderr] Compiling thiserror-impl v2.0.17 [INFO] [stderr] Compiling zerofrom-derive v0.1.6 [INFO] [stderr] Compiling yoke-derive v0.8.1 [INFO] [stderr] Compiling tokio v1.49.0 [INFO] [stderr] Compiling rustls-webpki v0.103.8 [INFO] [stderr] Compiling tracing v0.1.44 [INFO] [stderr] Compiling zerofrom v0.1.6 [INFO] [stderr] Compiling thiserror v2.0.17 [INFO] [stderr] Compiling yoke v0.8.1 [INFO] [stderr] Compiling zerovec v0.11.5 [INFO] [stderr] Compiling zerotrie v0.2.3 [INFO] [stderr] Compiling clap v4.5.54 [INFO] [stderr] Compiling clap_complete v4.5.65 [INFO] [stderr] Compiling tinystr v0.8.2 [INFO] [stderr] Compiling potential_utf v0.1.4 [INFO] [stderr] Compiling icu_collections v2.1.1 [INFO] [stderr] Compiling icu_locale_core v2.1.1 [INFO] [stderr] Compiling serde v1.0.228 [INFO] [stderr] Compiling icu_provider v2.1.1 [INFO] [stderr] Compiling serde_spanned v0.6.9 [INFO] [stderr] Compiling toml_datetime v0.6.11 [INFO] [stderr] Compiling serde_urlencoded v0.7.1 [INFO] [stderr] Compiling tracing-serde v0.2.0 [INFO] [stderr] Compiling tracing-subscriber v0.3.22 [INFO] [stderr] Compiling toml_edit v0.22.27 [INFO] [stderr] Compiling icu_normalizer v2.1.1 [INFO] [stderr] Compiling icu_properties v2.1.2 [INFO] [stderr] Compiling idna_adapter v1.2.1 [INFO] [stderr] Compiling idna v1.1.0 [INFO] [stderr] Compiling url v2.5.8 [INFO] [stderr] Compiling hyper v1.8.1 [INFO] [stderr] Compiling tokio-rustls v0.26.4 [INFO] [stderr] Compiling tower v0.5.3 [INFO] [stderr] Compiling tower-http v0.6.8 [INFO] [stderr] Compiling hyper-util v0.1.19 [INFO] [stderr] Compiling toml v0.8.23 [INFO] [stderr] Compiling hyper-rustls v0.27.7 [INFO] [stderr] Compiling reqwest v0.12.28 [INFO] [stderr] Compiling spotify-cli v0.5.0 (/opt/rustwide/workdir) [INFO] [stderr] Finished `dev` profile [unoptimized + debuginfo] target(s) in 59.40s [INFO] running `Command { std: "docker" "inspect" "d753f699f43510dc045e777479b94d71a3a1b0530217b3e614e67c3ffe502adf", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "d753f699f43510dc045e777479b94d71a3a1b0530217b3e614e67c3ffe502adf", kill_on_drop: false }` [INFO] [stdout] d753f699f43510dc045e777479b94d71a3a1b0530217b3e614e67c3ffe502adf [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-2-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-2-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "RUSTDOCFLAGS=--cap-lints=forbid" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:98afbf2d16093dec2546ff8915fddc74e65664aa03fc460b3712b1c2c54a33e4" "/opt/rustwide/cargo-home/bin/cargo" "+7704328ba5ae8d6ce0ac303c9d5a1a1605906766" "test" "--frozen" "--no-run" "--message-format=json", kill_on_drop: false }` [INFO] [stdout] 05f9e4b00427d4c46861b4b43aac84f5060c430ab134d6f00e9dd513710688f7 [INFO] running `Command { std: "docker" "start" "-a" "05f9e4b00427d4c46861b4b43aac84f5060c430ab134d6f00e9dd513710688f7", kill_on_drop: false }` [INFO] [stderr] Compiling futures-macro v0.3.31 [INFO] [stderr] Compiling tokio-util v0.7.18 [INFO] [stderr] Compiling serde_json v1.0.149 [INFO] [stderr] Compiling num-traits v0.2.19 [INFO] [stderr] Compiling matchers v0.2.0 [INFO] [stderr] Compiling regex v1.12.2 [INFO] [stderr] Compiling getrandom v0.3.4 [INFO] [stderr] Compiling rustix v1.1.3 [INFO] [stderr] Compiling num_cpus v1.17.0 [INFO] [stderr] Compiling assert_cmd v2.1.2 [INFO] [stderr] Compiling deadpool-runtime v0.1.4 [INFO] [stderr] Compiling bstr v1.12.1 [INFO] [stderr] Compiling wait-timeout v0.2.1 [INFO] [stderr] Compiling deadpool v0.12.3 [INFO] [stderr] Compiling h2 v0.4.13 [INFO] [stderr] Compiling futures-util v0.3.31 [INFO] [stderr] Compiling float-cmp v0.10.0 [INFO] [stderr] Compiling predicates v3.1.3 [INFO] [stderr] Compiling tempfile v3.24.0 [INFO] [stderr] Compiling tracing-subscriber v0.3.22 [INFO] [stderr] Compiling assert-json-diff v2.0.2 [INFO] [stderr] Compiling hyper v1.8.1 [INFO] [stderr] Compiling tower v0.5.3 [INFO] [stderr] Compiling futures-executor v0.3.31 [INFO] [stderr] Compiling futures v0.3.31 [INFO] [stderr] Compiling hyper-util v0.1.19 [INFO] [stderr] Compiling tower-http v0.6.8 [INFO] [stderr] Compiling hyper-rustls v0.27.7 [INFO] [stderr] Compiling wiremock v0.6.5 [INFO] [stderr] Compiling reqwest v0.12.28 [INFO] [stderr] Compiling spotify-cli v0.5.0 (/opt/rustwide/workdir) [INFO] [stderr] Finished `test` profile [unoptimized + debuginfo] target(s) in 53.77s [INFO] running `Command { std: "docker" "inspect" "05f9e4b00427d4c46861b4b43aac84f5060c430ab134d6f00e9dd513710688f7", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "05f9e4b00427d4c46861b4b43aac84f5060c430ab134d6f00e9dd513710688f7", kill_on_drop: false }` [INFO] [stdout] 05f9e4b00427d4c46861b4b43aac84f5060c430ab134d6f00e9dd513710688f7 [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-2-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-2-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "RUSTDOCFLAGS=--cap-lints=forbid" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:98afbf2d16093dec2546ff8915fddc74e65664aa03fc460b3712b1c2c54a33e4" "/opt/rustwide/cargo-home/bin/cargo" "+7704328ba5ae8d6ce0ac303c9d5a1a1605906766" "test" "--frozen", kill_on_drop: false }` [INFO] [stdout] 5ff99d3814517acf6a2ca467708237a02b3869443301bfbf28e00475fc93d708 [INFO] running `Command { std: "docker" "start" "-a" "5ff99d3814517acf6a2ca467708237a02b3869443301bfbf28e00475fc93d708", kill_on_drop: false }` [INFO] [stderr] Finished `test` profile [unoptimized + debuginfo] target(s) in 0.37s [INFO] [stderr] Running unittests src/lib.rs (/opt/rustwide/target/debug/deps/spotify_cli-0daa79e3495235c5) [INFO] [stdout] [INFO] [stdout] running 605 tests [INFO] [stdout] test cli::commands::search::filters::tests::extract_first_uri_falls_back_to_pins ... ok [INFO] [stdout] test cli::commands::search::filters::tests::extract_first_uri_returns_none_when_empty ... ok [INFO] [stdout] test cli::commands::search::filters::tests::extract_first_uri_tries_multiple_result_types ... ok [INFO] [stdout] test cli::commands::search::filters::tests::extract_first_uri_prioritizes_spotify_results ... ok [INFO] [stdout] test cli::commands::search::filters::tests::filter_exact_matches_case_insensitive ... ok [INFO] [stdout] test cli::commands::search::filters::tests::filter_exact_matches_filters_by_name ... ok [INFO] [stdout] test cli::commands::search::filters::tests::filter_exact_matches_handles_missing_name ... ok [INFO] [stdout] test cli::commands::search::filters::tests::filter_ghost_entries_handles_empty_items ... ok [INFO] [stdout] test cli::commands::search::filters::tests::filter_ghost_entries_handles_missing_result_type ... ok [INFO] [stdout] test cli::commands::search::filters::tests::filter_ghost_entries_preserves_valid_entries ... ok [INFO] [stdout] test cli::commands::search::filters::tests::filter_ghost_entries_removes_invalid_entries ... ok [INFO] [stdout] test cli::tests::parse_auth_login ... ok [INFO] [stdout] test cli::tests::parse_auth_login_force ... ok [INFO] [stdout] test cli::commands::search::filters::tests::extract_first_uri_from_spotify_when_pin_has_no_uri ... ok [INFO] [stdout] test cli::tests::parse_follow_artist ... ok [INFO] [stdout] test cli::tests::parse_player_volume ... ok [INFO] [stdout] test cli::tests::parse_info_alias ... ok [INFO] [stdout] test cli::commands::search::filters::tests::extract_first_uri_from_spotify_when_no_pins ... ok [INFO] [stdout] test cli::tests::parse_json_flag ... ok [INFO] [stdout] test cli::tests::parse_library_alias ... ok [INFO] [stdout] test cli::tests::parse_markets ... ok [INFO] [stdout] test cli::tests::parse_player_volume_invalid ... ok [INFO] [stdout] test cli::tests::parse_player_alias_p ... ok [INFO] [stdout] test cli::tests::parse_pin_add ... ok [INFO] [stdout] test cli::tests::parse_player_next ... ok [INFO] [stdout] test endpoints::search::tests::search_result_keys_are_plural ... ok [INFO] [stdout] test endpoints::search::tests::search_result_keys_count ... ok [INFO] [stdout] test endpoints::search::tests::search_types_count ... ok [INFO] [stdout] test cli::tests::parse_pin_add_with_tags ... ok [INFO] [stdout] test cli::tests::parse_verbose_multiple ... ok [INFO] [stdout] test cli::tests::parse_verbose_flag ... ok [INFO] [stdout] test cli::tests::parse_user_top ... ok [INFO] [stdout] test cli::tests::parse_player_volume_max ... ok [INFO] [stdout] test cli::tests::parse_search_with_options ... ok [INFO] [stdout] test endpoints::search::tests::search_types_has_expected_types ... ok [INFO] [stdout] test endpoints::search::tests::truncate_handles_empty_items ... ok [INFO] [stdout] test cli::tests::parse_player_repeat ... ok [INFO] [stdout] test cli::tests::parse_player_seek ... ok [INFO] [stdout] test cli::tests::parse_search_default ... ok [INFO] [stdout] test cli::tests::parse_user_top_default_range ... ok [INFO] [stdout] test endpoints::search::tests::truncate_handles_missing_keys ... ok [INFO] [stdout] test endpoints::search::tests::truncate_handles_single_item ... ok [INFO] [stdout] test endpoints::search::tests::truncate_search_results_works ... ok [INFO] [stdout] test cli::tests::parse_log_format ... ok [INFO] [stdout] test cli::tests::parse_search_alias_s ... ok [INFO] [stdout] test cli::tests::parse_playlist_list ... ok [INFO] [stdout] test http::api::tests::delete_request_works ... ok [INFO] [stdout] test cli::tests::parse_player_shuffle ... ok [INFO] [stdout] test http::api::tests::get_request_handles_404_not_found ... ok [INFO] [stdout] test http::api::tests::get_request_returns_json ... ok [INFO] [stdout] test http::auth::tests::auth_error_debug ... ok [INFO] [stdout] test http::auth::tests::auth_error_token_exchange_status ... ok [INFO] [stdout] test http::client::tests::http_error_api_user_message ... ok [INFO] [stdout] test http::auth::tests::spotify_auth_new ... ok [INFO] [stdout] test http::auth::tests::spotify_auth_url_building ... ok [INFO] [stdout] test http::client::tests::http_client_default ... ok [INFO] [stdout] test http::api::tests::get_request_handles_401_unauthorized ... ok [INFO] [stdout] test http::api::tests::handles_api_error_with_message ... ok [INFO] [stdout] test http::api::tests::post_request_sends_empty_body ... ok [INFO] [stdout] test http::api::tests::get_request_handles_204_no_content ... ok [INFO] [stdout] test http::client::tests::http_error_user_messages ... ok [INFO] [stdout] test http::auth::tests::spotify_auth_default ... ok [INFO] [stdout] test http::api::tests::url_building ... ok [INFO] [stdout] test http::client::tests::http_client_new ... ok [INFO] [stdout] test http::client::tests::http_error_display ... ok [INFO] [stdout] test http::client::tests::http_error_api_various_statuses ... ok [INFO] [stdout] test http::api::tests::put_request_works ... ok [INFO] [stdout] test http::auth::tests::auth_error_display ... ok [INFO] [stdout] test http::client::tests::http_error_display_for_all_variants ... ok [INFO] [stdout] test http::client::tests::http_error_is_debug ... ok [INFO] [stdout] test http::client::tests::http_error_status_codes ... ok [INFO] [stdout] test http::client::tests::http_error_retry_after ... ok [INFO] [stdout] test http::endpoints::tests::artist_endpoints ... ok [INFO] [stdout] test http::endpoints::tests::audiobook_endpoints ... ok [INFO] [stdout] test http::endpoints::tests::chapter_endpoints ... ok [INFO] [stdout] test http::endpoints::tests::browse_endpoints ... ok [INFO] [stdout] test http::endpoints::tests::episode_endpoints ... ok [INFO] [stdout] test http::endpoints::tests::follow_endpoints ... ok [INFO] [stdout] test http::endpoints::tests::markets_endpoint ... ok [INFO] [stdout] test http::endpoints::tests::player_endpoints ... ok [INFO] [stdout] test http::endpoints::tests::player_endpoints_with_params ... ok [INFO] [stdout] test http::endpoints::tests::playlist_endpoints ... ok [INFO] [stdout] test http::endpoints::tests::queue_add_encodes_uri ... ok [INFO] [stdout] test http::endpoints::tests::saved_audiobooks_contains_endpoint ... ok [INFO] [stdout] test http::endpoints::tests::saved_albums_endpoints ... ok [INFO] [stdout] test http::endpoints::tests::saved_audiobooks_ids_endpoint ... ok [INFO] [stdout] test http::endpoints::tests::saved_episodes_ids_endpoint ... ok [INFO] [stdout] test http::endpoints::tests::saved_episodes_contains_endpoint ... ok [INFO] [stdout] test http::endpoints::tests::saved_tracks_endpoints ... ok [INFO] [stdout] test http::client::tests::spotify_error_response_deserialization ... ok [INFO] [stdout] test http::endpoints::tests::saved_shows_contains_endpoint ... ok [INFO] [stdout] test http::endpoints::tests::album_endpoints ... ok [INFO] [stdout] test http::endpoints::tests::search_includes_market ... ok [INFO] [stdout] test http::endpoints::tests::show_endpoints ... ok [INFO] [stdout] test http::endpoints::tests::track_endpoints ... ok [INFO] [stdout] test http::endpoints::tests::user_endpoints ... ok [INFO] [stdout] test http::api::tests::post_json_sends_body ... ok [INFO] [stdout] test io::common::tests::extract_artist_names_empty_array ... ok [INFO] [stdout] test io::common::tests::extract_artist_names_missing ... ok [INFO] [stdout] test io::common::tests::extract_artist_names_multiple ... ok [INFO] [stdout] test io::common::tests::extract_artist_names_null ... ok [INFO] [stdout] test io::common::tests::extract_artist_names_single ... ok [INFO] [stdout] test http::endpoints::tests::saved_shows_ids_endpoint ... ok [INFO] [stdout] test http::endpoints::tests::user_playlist_endpoints ... ok [INFO] [stdout] test io::common::tests::format_duration_as_long ... ok [INFO] [stdout] test io::common::tests::format_duration_as_long_with_seconds ... ok [INFO] [stdout] test io::common::tests::format_duration_short_minutes_only ... ok [INFO] [stdout] test io::common::tests::format_duration_as_short ... ok [INFO] [stdout] test io::common::tests::format_duration_short_with_hours ... ok [INFO] [stdout] test io::common::tests::format_number_millions ... ok [INFO] [stdout] test io::common::tests::format_number_small ... ok [INFO] [stdout] test io::common::tests::format_number_thousands ... ok [INFO] [stdout] test io::common::tests::get_score_missing ... ok [INFO] [stdout] test io::common::tests::get_score_present ... ok [INFO] [stdout] test io::common::tests::get_score_non_numeric ... ok [INFO] [stdout] test io::common::tests::truncate_short_string ... ok [INFO] [stdout] test io::formatters::album::tests::format_album_detail_compilation ... ok [INFO] [stdout] test io::formatters::album::tests::format_album_detail_full ... ok [INFO] [stdout] test io::common::tests::truncate_long_string ... ok [INFO] [stdout] test http::endpoints::tests::search_encodes_query ... ok [INFO] [stdout] test io::common::tests::truncate_exact_length ... ok [INFO] [stdout] test io::formatters::album::tests::format_album_detail_no_uri ... ok [INFO] [stdout] test io::formatters::album::tests::format_album_detail_without_tracks ... ok [INFO] [stdout] test io::formatters::album::tests::format_album_detail_single ... ok [INFO] [stdout] test io::formatters::artist::tests::format_artist_detail_full ... ok [INFO] [stdout] test io::formatters::artist::tests::format_artist_detail_empty_genres ... ok [INFO] [stdout] test io::formatters::artist::tests::format_artist_detail_minimal ... ok [INFO] [stdout] test io::formatters::artist::tests::format_artist_detail_no_genres ... ok [INFO] [stdout] test io::formatters::artist::tests::format_top_artists_empty ... ok [INFO] [stdout] test io::formatters::audiobook::tests::format_audiobook_chapters_empty ... ok [INFO] [stdout] test io::formatters::artist::tests::format_top_artists_with_data ... ok [INFO] [stdout] test io::formatters::audiobook::tests::format_audiobook_chapters_no_chapter_number ... ok [INFO] [stdout] test io::formatters::artist::tests::format_top_artists_many_genres ... ok [INFO] [stdout] test io::formatters::audiobook::tests::format_audiobook_chapters_with_items ... ok [INFO] [stdout] test io::formatters::album::tests::format_album_detail_minimal ... ok [INFO] [stdout] test io::formatters::artist::tests::format_top_artists_minimal ... ok [INFO] [stdout] test io::formatters::audiobook::tests::format_audiobooks_empty ... ok [INFO] [stdout] test io::formatters::audiobook::tests::format_audiobooks_with_items ... ok [INFO] [stdout] test io::formatters::category::tests::format_categories_empty ... ok [INFO] [stdout] test io::formatters::audiobook::tests::format_audiobooks_wrapped ... ok [INFO] [stdout] test io::formatters::category::tests::format_categories_minimal ... ok [INFO] [stdout] test io::formatters::category::tests::format_categories_with_items ... ok [INFO] [stdout] test io::formatters::audiobook::tests::format_audiobook_detail_full ... ok [INFO] [stdout] test io::formatters::category::tests::format_category_detail_no_icons ... ok [INFO] [stdout] test io::formatters::audiobook::tests::format_audiobook_detail_no_authors ... ok [INFO] [stdout] test io::formatters::category::tests::format_category_detail_empty_icons ... ok [INFO] [stdout] test io::formatters::audiobook::tests::format_audiobook_detail_minimal ... ok [INFO] [stdout] test io::formatters::category::tests::format_category_detail_full ... ok [INFO] [stdout] test io::formatters::episode::tests::format_episode_detail_full ... ok [INFO] [stdout] test io::formatters::episode::tests::format_episode_detail_long_description ... ok [INFO] [stdout] test io::formatters::category::tests::format_category_detail_minimal ... ok [INFO] [stdout] test io::formatters::chapter::tests::format_chapter_detail_long_description ... ok [INFO] [stdout] test io::formatters::episode::tests::format_episode_detail_minimal ... ok [INFO] [stdout] test io::formatters::chapter::tests::format_chapter_detail_minimal ... ok [INFO] [stdout] test io::formatters::chapter::tests::format_chapter_detail_no_uri ... ok [INFO] [stdout] test io::formatters::chapter::tests::format_chapter_detail_full ... ok [INFO] [stdout] test io::formatters::episode::tests::format_episode_detail_not_explicit ... ok [INFO] [stdout] test io::formatters::episode::tests::format_episodes_empty ... ok [INFO] [stdout] test io::formatters::chapter::tests::format_chapter_detail_short_duration ... ok [INFO] [stdout] test io::formatters::episode::tests::format_episodes_minimal ... ok [INFO] [stdout] test io::formatters::episode::tests::format_episodes_with_items ... ok [INFO] [stdout] test io::formatters::library::tests::format_library_check_all_saved ... ok [INFO] [stdout] test io::formatters::library::tests::format_library_check_mixed ... ok [INFO] [stdout] test io::formatters::library::tests::format_library_check_empty ... ok [INFO] [stdout] test io::formatters::library::tests::format_library_check_non_bool ... ok [INFO] [stdout] test io::formatters::library::tests::format_library_check_none_saved ... ok [INFO] [stdout] test io::formatters::library::tests::format_saved_tracks_empty ... ok [INFO] [stdout] test io::formatters::library::tests::format_saved_tracks_more_than_twenty ... ok [INFO] [stdout] test io::formatters::library::tests::format_saved_tracks_no_track_field ... ok [INFO] [stdout] test io::formatters::library::tests::format_saved_tracks_with_items ... ok [INFO] [stdout] test io::formatters::pin::tests::format_pins_empty ... ok [INFO] [stdout] test io::formatters::pin::tests::format_pins_empty_tags_array ... ok [INFO] [stdout] test io::formatters::pin::tests::format_pins_multiple ... ok [INFO] [stdout] test io::formatters::player::tests::format_devices_without_volume ... ok [INFO] [stdout] test io::formatters::player::tests::format_queue_empty ... ok [INFO] [stdout] test io::formatters::pin::tests::format_pins_single_with_tags ... ok [INFO] [stdout] test io::formatters::player::tests::format_queue_large ... ok [INFO] [stdout] test io::formatters::player::tests::format_player_status_minimal ... ok [INFO] [stdout] test io::formatters::player::tests::format_devices_empty ... ok [INFO] [stdout] test io::formatters::pin::tests::format_pins_minimal_data ... ok [INFO] [stdout] test io::formatters::player::tests::format_player_status_paused ... ok [INFO] [stdout] test io::formatters::pin::tests::format_pins_single_without_tags ... ok [INFO] [stdout] test io::formatters::player::tests::format_devices_multiple ... ok [INFO] [stdout] test io::formatters::player::tests::format_player_status_playing ... ok [INFO] [stdout] test io::formatters::player::tests::format_devices_minimal ... ok [INFO] [stdout] test io::formatters::player::tests::format_player_status_with_shuffle_repeat ... ok [INFO] [stdout] test io::formatters::player::tests::format_queue_with_items ... ok [INFO] [stdout] test io::formatters::player::tests::format_queue_no_currently_playing ... ok [INFO] [stdout] test io::formatters::playlist::tests::format_playlist_detail_empty_description ... ok [INFO] [stdout] test io::formatters::playlist::tests::format_playlist_detail_full ... ok [INFO] [stdout] test io::formatters::playlist::tests::format_playlist_detail_minimal ... ok [INFO] [stdout] test io::formatters::playlist::tests::format_playlist_detail_no_tracks ... ok [INFO] [stdout] test io::formatters::playlist::tests::format_playlists_empty ... ok [INFO] [stdout] test io::formatters::playlist::tests::format_playlist_detail_many_tracks ... ok [INFO] [stdout] test io::formatters::playlist::tests::format_playlists_minimal_data ... ok [INFO] [stdout] test io::formatters::playlist::tests::format_playlists_with_items ... ok [INFO] [stdout] test io::formatters::search::tests::format_search_results_empty ... ok [INFO] [stdout] test io::formatters::search::tests::format_search_results_nested_spotify ... ok [INFO] [stdout] test io::formatters::search::tests::format_search_results_no_matches ... ok [INFO] [stdout] test io::formatters::search::tests::format_search_results_with_pins ... ok [INFO] [stdout] test io::formatters::search::tests::format_search_results_with_tracks ... ok [INFO] [stdout] test io::formatters::search::tests::format_spotify_search_albums ... ok [INFO] [stdout] test http::endpoints::tests::playlist_cover_image_endpoint ... ok [INFO] [stdout] test io::formatters::audiobook::tests::format_audiobook_detail_long_description ... ok [INFO] [stdout] test io::formatters::chapter::tests::format_chapter_detail_no_chapter_number ... ok [INFO] [stdout] test io::formatters::episode::tests::format_episodes_wrapped ... ok [INFO] [stdout] test io::formatters::search::tests::format_spotify_search_all_types ... ok [INFO] [stdout] test io::formatters::search::tests::format_spotify_search_artists ... ok [INFO] [stdout] test io::formatters::search::tests::format_spotify_search_empty ... ok [INFO] [stdout] test io::formatters::search::tests::format_spotify_search_playlists ... ok [INFO] [stdout] test io::formatters::search::tests::format_spotify_search_playlists_without_id ... ok [INFO] [stdout] test io::formatters::show::tests::format_show_detail_full ... ok [INFO] [stdout] test io::formatters::search::tests::format_spotify_search_tracks ... ok [INFO] [stdout] test io::formatters::show::tests::format_shows_empty ... ok [INFO] [stdout] test io::formatters::show::tests::format_show_episodes_minimal ... ok [INFO] [stdout] test io::formatters::show::tests::format_shows_with_items ... ok [INFO] [stdout] test io::formatters::show::tests::format_show_episodes_with_items ... ok [INFO] [stdout] test io::formatters::show::tests::format_shows_wrapped ... ok [INFO] [stdout] test io::formatters::track::tests::format_artist_top_tracks_minimal_data ... ok [INFO] [stdout] test io::formatters::show::tests::format_show_detail_long_description ... ok [INFO] [stdout] test io::formatters::track::tests::format_artist_top_tracks_empty ... ok [INFO] [stdout] test io::formatters::track::tests::format_play_history_empty ... ok [INFO] [stdout] test io::formatters::track::tests::format_artist_top_tracks_with_data ... ok [INFO] [stdout] test io::formatters::track::tests::format_play_history_more_than_ten ... ok [INFO] [stdout] test io::formatters::track::tests::format_top_tracks_empty ... ok [INFO] [stdout] test io::formatters::show::tests::format_show_detail_not_explicit ... ok [INFO] [stdout] test io::formatters::track::tests::format_top_tracks_with_data ... ok [INFO] [stdout] test io::formatters::track::tests::format_track_detail_full ... ok [INFO] [stdout] test io::formatters::show::tests::format_show_detail_minimal ... ok [INFO] [stdout] test io::formatters::track::tests::format_play_history_with_tracks ... ok [INFO] [stdout] test io::formatters::track::tests::format_track_detail_minimal ... ok [INFO] [stdout] test io::formatters::show::tests::format_show_episodes_empty ... ok [INFO] [stdout] test io::formatters::track::tests::format_track_detail_without_explicit ... ok [INFO] [stdout] test io::formatters::user::tests::format_user_profile_minimal ... ok [INFO] [stdout] test io::formatters::track::tests::format_track_detail_multiple_artists ... ok [INFO] [stdout] test io::formatters::user::tests::format_user_profile_full ... ok [INFO] [stdout] test io::formatters::user::tests::format_user_profile_without_country ... ok [INFO] [stdout] test io::formatters::user::tests::format_user_profile_large_followers ... ok [INFO] [stdout] test io::output::tests::all_error_kinds_as_str ... ok [INFO] [stdout] test io::output::tests::error_kind_display ... ok [INFO] [stdout] test io::formatters::user::tests::format_user_profile_without_email ... ok [INFO] [stdout] test io::output::tests::from_http_error_api_error ... ok [INFO] [stdout] test io::output::tests::from_http_error_api_includes_details ... ok [INFO] [stdout] test io::output::tests::from_http_error_bad_gateway ... ok [INFO] [stdout] test io::output::tests::from_http_error_not_found ... ok [INFO] [stdout] test io::output::tests::from_http_error_rate_limited ... ok [INFO] [stdout] test io::output::tests::from_http_error_unusual_status ... ok [INFO] [stdout] test io::output::tests::more_payload_kind_variants ... ok [INFO] [stdout] test io::output::tests::payload_included_when_present ... ok [INFO] [stdout] test io::output::tests::payload_kind_variants ... ok [INFO] [stdout] test io::output::tests::payload_skipped_when_none ... ok [INFO] [stdout] test io::output::tests::err_with_details_includes_details ... ok [INFO] [stdout] test io::output::tests::error_response_includes_error_detail ... ok [INFO] [stdout] test io::output::tests::error_kind_serializes_to_snake_case ... ok [INFO] [stdout] test io::output::tests::from_http_error_bad_request ... ok [INFO] [stdout] test io::output::tests::print_json_outputs_valid_json ... ok [INFO] [stdout] test io::output::tests::print_human_success_without_payload ... ok [INFO] [stdout] test io::output::tests::from_http_error_forbidden ... ok [INFO] [stdout] test io::output::tests::from_http_error_service_unavailable ... ok [INFO] [stdout] test io::output::tests::from_http_error_unauthorized ... ok [INFO] [stdout] test io::output::tests::print_human_error_with_details ... ok [INFO] [stdout] test io::output::tests::print_human_error_without_details ... ok [INFO] [stdout] test io::output::tests::print_human_success_with_payload ... ok [INFO] [stdout] test io::output::tests::print_human_with_typed_payload ... ok [INFO] [stdout] test io::output::tests::status_serialization ... ok [INFO] [stdout] test io::output::tests::error_response_has_no_payload_kind ... ok [INFO] [stdout] test io::output::tests::success_response_serializes ... ok [INFO] [stdout] test io::output::tests::success_typed_includes_payload_kind ... ok [INFO] [stdout] test io::registry::lists::tests::artist_top_tracks_formatter_matches ... ok [INFO] [stdout] test io::registry::lists::tests::formatter_names ... ok [INFO] [stdout] test io::registry::lists::tests::library_check_does_not_match_non_array ... ok [INFO] [stdout] test io::registry::lists::tests::library_check_does_not_match_non_boolean_array ... ok [INFO] [stdout] test io::registry::lists::tests::library_check_format_runs ... ok [INFO] [stdout] test io::output::tests::success_typed_serializes_payload_kind ... ok [INFO] [stdout] test io::registry::lists::tests::library_check_matches_boolean_array ... ok [INFO] [stdout] test io::output::tests::success_without_typed_has_no_payload_kind ... ok [INFO] [stdout] test io::registry::lists::tests::artist_top_tracks_format_runs ... ok [INFO] [stdout] test io::registry::lists::tests::library_check_does_not_match_empty_array ... ok [INFO] [stdout] test io::registry::lists::tests::playlist_formatter_supports_playlist_list ... ok [INFO] [stdout] test io::registry::lists::tests::playlists_matches_with_owner ... ok [INFO] [stdout] test io::registry::lists::tests::saved_tracks_does_not_match_without_added_at ... ok [INFO] [stdout] test io::registry::lists::tests::top_artists_format_runs ... ok [INFO] [stdout] test io::registry::lists::tests::top_artists_formatter_matches ... ok [INFO] [stdout] test io::registry::lists::tests::top_tracks_formatter_matches ... ok [INFO] [stdout] test io::registry::lists::tests::top_artists_formatter_supports_multiple_kinds ... ok [INFO] [stdout] test io::registry::media::tests::audiobook_chapters_format_runs ... ok [INFO] [stdout] test io::registry::media::tests::audiobook_detail_format_runs ... ok [INFO] [stdout] test io::registry::media::tests::audiobook_chapters_does_not_match_empty ... ok [INFO] [stdout] test io::registry::media::tests::chapter_detail_formatter_matches ... ok [INFO] [stdout] test io::registry::media::tests::audiobook_detail_formatter_matches ... ok [INFO] [stdout] test io::registry::media::tests::episode_detail_format_runs ... ok [INFO] [stdout] test io::registry::media::tests::chapter_detail_format_runs ... ok [INFO] [stdout] test io::registry::lists::tests::top_tracks_format_runs ... ok [INFO] [stdout] test io::registry::lists::tests::playlists_format_runs ... ok [INFO] [stdout] test io::registry::media::tests::episode_detail_formatter_matches ... ok [INFO] [stdout] test io::registry::media::tests::audiobook_chapters_formatter_matches ... ok [INFO] [stdout] test io::registry::media::tests::formatter_names ... ok [INFO] [stdout] test io::registry::media::tests::saved_audiobooks_does_not_match_empty ... ok [INFO] [stdout] test io::registry::lists::tests::saved_tracks_format_runs ... ok [INFO] [stdout] test io::registry::lists::tests::saved_tracks_formatter_matches ... ok [INFO] [stdout] test io::registry::lists::tests::playlists_formatter_matches ... ok [INFO] [stdout] test io::registry::media::tests::saved_audiobooks_format_runs ... ok [INFO] [stdout] test io::registry::media::tests::saved_episodes_formatter_matches ... ok [INFO] [stdout] test io::registry::media::tests::saved_shows_does_not_match_empty ... ok [INFO] [stdout] test io::registry::media::tests::saved_shows_formatter_matches ... ok [INFO] [stdout] test io::registry::media::tests::saved_shows_format_runs ... ok [INFO] [stdout] test io::registry::media::tests::show_episodes_does_not_match_with_artists ... ok [INFO] [stdout] test io::registry::media::tests::show_episodes_format_runs ... ok [INFO] [stdout] test io::registry::media::tests::show_episodes_formatter_matches ... ok [INFO] [stdout] test io::registry::player::tests::devices_formatter_matches ... ok [INFO] [stdout] test io::registry::player::tests::devices_format_runs ... ok [INFO] [stdout] test io::registry::player::tests::formatter_names ... ok [INFO] [stdout] test io::registry::media::tests::saved_audiobooks_formatter_matches ... ok [INFO] [stdout] test io::registry::player::tests::play_history_does_not_match_without_played_at ... ok [INFO] [stdout] test io::registry::media::tests::saved_episodes_format_runs ... ok [INFO] [stdout] test io::registry::media::tests::show_detail_format_runs ... ok [INFO] [stdout] test io::registry::media::tests::show_detail_formatter_matches ... ok [INFO] [stdout] test io::registry::player::tests::play_history_format_runs ... ok [INFO] [stdout] test io::registry::player::tests::player_status_does_not_match_without_item ... ok [INFO] [stdout] test io::registry::player::tests::player_status_formatter_supports_kind ... ok [INFO] [stdout] test io::registry::player::tests::player_status_matches_payload_with_item ... ok [INFO] [stdout] test io::registry::player::tests::queue_does_not_match_without_queue ... ok [INFO] [stdout] test io::registry::player::tests::queue_format_runs ... ok [INFO] [stdout] test io::registry::player::tests::queue_formatter_supports_kind ... ok [INFO] [stdout] test io::registry::player::tests::queue_matches_payload_with_currently_playing_and_queue ... ok [INFO] [stdout] test io::registry::resources::tests::album_detail_formatter_matches ... ok [INFO] [stdout] test io::registry::player::tests::play_history_formatter_matches ... ok [INFO] [stdout] test io::registry::resources::tests::album_detail_format_runs ... ok [INFO] [stdout] test io::registry::player::tests::player_status_format_runs ... ok [INFO] [stdout] test io::registry::resources::tests::artist_detail_format_runs ... ok [INFO] [stdout] test io::registry::player::tests::player_status_format_with_null_item ... ok [INFO] [stdout] test io::registry::resources::tests::artist_detail_formatter_matches ... ok [INFO] [stdout] test io::registry::resources::tests::artist_detail_supports_related_artists ... ok [INFO] [stdout] test io::registry::resources::tests::category_detail_does_not_match_with_owner ... ok [INFO] [stdout] test io::registry::resources::tests::category_detail_formatter_matches ... ok [INFO] [stdout] test io::registry::resources::tests::category_list_formatter_matches ... ok [INFO] [stdout] test io::registry::resources::tests::formatter_names ... ok [INFO] [stdout] test io::registry::resources::tests::playlist_detail_format_runs ... ok [INFO] [stdout] test io::registry::resources::tests::playlist_detail_formatter_matches ... ok [INFO] [stdout] test io::registry::resources::tests::track_detail_matches_payload ... ok [INFO] [stdout] test io::registry::resources::tests::track_formatter_supports_kind ... ok [INFO] [stdout] test io::registry::resources::tests::user_profile_formatter_matches ... ok [INFO] [stdout] test io::registry::resources::tests::user_profile_format_runs ... ok [INFO] [stdout] test io::registry::search::tests::combined_search_format_runs ... ok [INFO] [stdout] test io::registry::search::tests::combined_search_supports_kind ... ok [INFO] [stdout] test io::registry::search::tests::pins_format_runs ... ok [INFO] [stdout] test io::registry::search::tests::pins_format_handles_empty_array ... ok [INFO] [stdout] test io::registry::search::tests::spotify_search_format_runs ... ok [INFO] [stdout] test io::registry::search::tests::spotify_search_supports_kind ... ok [INFO] [stdout] test io::registry::search::tests::spotify_search_formatter_matches ... ok [INFO] [stdout] test io::registry::tests::formatter_registry_has_formatters ... ok [INFO] [stdout] test io::registry::tests::format_payload_works ... ok [INFO] [stdout] test io::registry::tests::global_registry_accessible ... ok [INFO] [stdout] test io::registry::tests::registry_format_with_kind_falls_back_to_payload_matching ... ok [INFO] [stdout] test io::registry::tests::default_supported_kinds_is_empty ... ok [INFO] [stdout] test io::registry::tests::registry_format_with_kind_uses_kind_matching ... ok [INFO] [stdout] test logging::tests::log_config_builder ... ok [INFO] [stdout] test logging::tests::log_config_clone ... ok [INFO] [stdout] test io::registry::resources::tests::category_detail_format_runs ... ok [INFO] [stdout] test io::registry::tests::registry_default_same_as_new ... ok [INFO] [stdout] test io::registry::resources::tests::category_list_format_runs ... ok [INFO] [stdout] test io::registry::search::tests::combined_search_formatter_matches ... ok [INFO] [stdout] test io::registry::tests::registry_format_with_unknown_prints_message ... ok [INFO] [stdout] test io::registry::resources::tests::track_detail_does_not_match_incomplete ... ok [INFO] [stdout] test io::registry::resources::tests::track_detail_format_runs ... ok [INFO] [stdout] test logging::tests::log_config_debug ... ok [INFO] [stdout] test io::registry::search::tests::formatter_names ... ok [INFO] [stdout] test io::registry::search::tests::pins_formatter_matches ... ok [INFO] [stdout] test logging::tests::log_config_format_method_is_chainable ... ok [INFO] [stdout] test logging::tests::log_config_new_sets_verbosity ... ok [INFO] [stdout] test logging::tests::log_format_copy ... ok [INFO] [stdout] test io::registry::search::tests::pins_supports_kind ... ok [INFO] [stdout] test logging::tests::log_config_default ... ok [INFO] [stdout] test io::registry::tests::format_payload_with_kind_works ... ok [INFO] [stdout] test logging::tests::log_format_display ... ok [INFO] [stdout] test logging::tests::log_format_eq ... ok [INFO] [stdout] test logging::tests::log_format_from_str_error_message ... ok [INFO] [stdout] test logging::tests::log_format_from_str ... ok [INFO] [stdout] test oauth::callback_server::tests::callback_error_display_denied ... ok [INFO] [stdout] test oauth::callback_server::tests::callback_error_display_server_start ... ok [INFO] [stdout] test oauth::callback_server::tests::callback_error_display_timeout ... ok [INFO] [stdout] test oauth::callback_server::tests::callback_path_constant ... ok [INFO] [stdout] test oauth::callback_server::tests::callback_result_state_can_be_none ... ok [INFO] [stdout] test oauth::callback_server::tests::callback_error_display_missing_code ... ok [INFO] [stdout] test oauth::callback_server::tests::callback_result_stores_code_and_state ... ok [INFO] [stdout] test oauth::callback_server::tests::can_customize_port ... ok [INFO] [stdout] test oauth::callback_server::tests::default_port_constant ... ok [INFO] [stdout] test oauth::callback_server::tests::chained_with_timeout ... ok [INFO] [stdout] test oauth::callback_server::tests::error_html_contains_message ... ok [INFO] [stdout] test oauth::callback_server::tests::success_html_contains_authenticated ... ok [INFO] [stdout] test oauth::callback_server::tests::with_timeout_sets_custom_timeout ... ok [INFO] [stdout] test oauth::flow::tests::default_scopes_contains_required_scopes ... ok [INFO] [stdout] test logging::tests::log_format_debug ... ok [INFO] [stdout] test oauth::flow::tests::default_scopes_count ... ok [INFO] [stdout] test logging::tests::log_format_default_is_pretty ... ok [INFO] [stdout] test oauth::flow::tests::build_auth_url_includes_pkce_challenge ... ok [INFO] [stdout] test oauth::flow::tests::build_auth_url_contains_required_params ... ok [INFO] [stdout] test oauth::callback_server::tests::default_timeout_is_five_minutes ... ok [INFO] [stdout] test oauth::callback_server::tests::redirect_uri_uses_correct_format ... ok [INFO] [stdout] test oauth::flow::tests::oauth_flow_chaining_works ... ok [INFO] [stdout] test oauth::flow::tests::oauth_flow_new_creates_with_defaults ... ok [INFO] [stdout] test oauth::flow::tests::oauth_error_display_callback ... ok [INFO] [stdout] test oauth::flow::tests::oauth_flow_with_port ... ok [INFO] [stdout] test oauth::flow::tests::oauth_flow_with_scopes ... ok [INFO] [stdout] test oauth::flow::tests::oauth_error_display_token_parse ... ok [INFO] [stdout] test oauth::flow::tests::oauth_error_from_callback_error ... ok [INFO] [stdout] test oauth::flow::tests::oauth_flow_port_updates_redirect_uri ... ok [INFO] [stdout] test oauth::callback_server::tests::callback_error_display_invalid_request ... ok [INFO] [stdout] test oauth::pkce::tests::challenge_is_base64url_encoded ... ok [INFO] [stdout] test oauth::pkce::tests::challenge_is_sha256_of_verifier ... ok [INFO] [stdout] test oauth::flow::tests::oauth_error_display_browser ... ok [INFO] [stdout] test oauth::pkce::tests::verifier_has_correct_length ... ok [INFO] [stdout] test oauth::token::tests::seconds_until_expiry_negative_for_expired ... ok [INFO] [stdout] test oauth::token::tests::seconds_until_expiry_is_positive_for_fresh_token ... ok [INFO] [stdout] test oauth::token::tests::token_expiring_soon_is_expired ... ok [INFO] [stdout] test oauth::token::tests::token_deserializes_from_json ... ok [INFO] [stdout] test rpc::dispatch::tests::test_dispatcher_default ... ok [INFO] [stdout] test rpc::protocol::tests::parse_notification ... ok [INFO] [stdout] test rpc::protocol::tests::parse_request_with_params ... ok [INFO] [stdout] test storage::config::tests::config_error_display ... ok [INFO] [stdout] test rpc::dispatch::tests::test_ping ... ok [INFO] [stdout] test rpc::dispatch::tests::test_player_transfer_missing_device ... ok [INFO] [stdout] test storage::config::tests::config_defaults_when_search_section_missing ... ok [INFO] [stdout] test oauth::pkce::tests::verifier_uses_valid_characters ... ok [INFO] [stdout] test oauth::token::tests::expired_token_is_expired ... ok [INFO] [stdout] test storage::config::tests::config_with_fuzzy_settings ... ok [INFO] [stdout] test rpc::dispatch::tests::test_unknown_method ... ok [INFO] [stdout] test rpc::dispatch::tests::test_version ... ok [INFO] [stdout] test rpc::protocol::tests::serialize_error_response ... ok [INFO] [stdout] test rpc::protocol::tests::serialize_notification ... ok [INFO] [stdout] test rpc::protocol::tests::serialize_success_response ... ok [INFO] [stdout] test oauth::token::tests::fresh_token_is_not_expired ... ok [INFO] [stdout] test storage::config::tests::search_config_default_values ... ok [INFO] [stdout] test storage::config::tests::config_with_search_settings ... ok [INFO] [stdout] test storage::config::tests::spotify_config_deserializes ... ok [INFO] [stdout] test storage::fuzzy::tests::case_insensitive_matching ... ok [INFO] [stdout] test storage::config::tests::token_storage_file_option ... ok [INFO] [stdout] test storage::fuzzy::tests::custom_config_values ... ok [INFO] [stdout] test storage::fuzzy::tests::contains_partial_match ... ok [INFO] [stdout] test storage::config::tests::token_storage_backend_default ... ok [INFO] [stdout] test storage::config::tests::fuzzy_config_default_values ... ok [INFO] [stdout] test storage::fuzzy::tests::exact_match_highest_score ... ok [INFO] [stdout] test storage::fuzzy::tests::levenshtein_basic ... ok [INFO] [stdout] test storage::config::tests::missing_client_id_fails ... ok [INFO] [stdout] test storage::config::tests::parse_valid_config ... ok [INFO] [stdout] test storage::config::tests::token_storage_keyring_option ... ok [INFO] [stdout] test oauth::token::tests::token_from_response_sets_fields ... ok [INFO] [stdout] test storage::config::tests::token_storage_defaults_to_keyring ... ok [INFO] [stdout] test oauth::token::tests::token_serializes_to_json ... ok [INFO] [stdout] test storage::fuzzy::tests::levenshtein_empty_strings ... ok [INFO] [stdout] test storage::fuzzy::tests::levenshtein_single_char ... ok [INFO] [stdout] test storage::fuzzy::tests::levenshtein_longer_strings ... ok [INFO] [stdout] test storage::fuzzy::tests::word_match_scoring ... ok [INFO] [stdout] test storage::fuzzy::tests::zero_score_for_unrelated ... ok [INFO] [stdout] test storage::keyring::tests::keyring_error_display ... ok [INFO] [stdout] test storage::pins::fuzzy::tests::multiple_tags_matching ... ok [INFO] [stdout] test storage::pins::fuzzy::tests::exact_match_returns_max_score ... ok [INFO] [stdout] test storage::keyring::tests::keyring_error_serialize ... ok [INFO] [stdout] test storage::paths::tests::unix_uses_xdg_config ... ok [INFO] [stdout] test storage::pins::fuzzy::tests::contains_adds_bonus ... ok [INFO] [stdout] test storage::paths::tests::token_file_is_json ... ok [INFO] [stdout] test storage::fuzzy::tests::no_match_scores_low ... ok [INFO] [stdout] test storage::pins::fuzzy::tests::empty_tags_still_works ... ok [INFO] [stdout] test storage::fuzzy::tests::similarity_bonus_applied ... ok [INFO] [stdout] test storage::pins::fuzzy::tests::exact_match_case_insensitive ... ok [INFO] [stdout] test oauth::token::tests::token_from_response_without_refresh_token ... ok [INFO] [stdout] test storage::fuzzy::tests::starts_with_scores_high ... ok [INFO] [stdout] test storage::paths::tests::config_file_is_toml ... ok [INFO] [stdout] test storage::pins::pin::tests::pin_uri_album ... ok [INFO] [stdout] test storage::paths::tests::config_dir_ends_with_app_name ... ok [INFO] [stdout] test storage::pins::fuzzy::tests::no_match_returns_low_score ... ok [INFO] [stdout] test storage::pins::fuzzy::tests::similar_aliases_get_levenshtein_bonus ... ok [INFO] [stdout] test storage::pins::fuzzy::tests::starts_with_adds_bonus ... ok [INFO] [stdout] test storage::pins::fuzzy::tests::tag_exact_match_adds_bonus ... ok [INFO] [stdout] test storage::pins::pin::tests::extract_id_from_plain_id ... ok [INFO] [stdout] test storage::pins::pin::tests::extract_id_from_spotify_uri ... ok [INFO] [stdout] test storage::pins::pin::tests::extract_id_from_spotify_url ... ok [INFO] [stdout] test storage::pins::fuzzy::tests::tag_contains_adds_bonus ... ok [INFO] [stdout] test storage::pins::fuzzy::tests::word_match_adds_bonus ... ok [INFO] [stdout] test storage::pins::pin::tests::extract_id_from_spotify_url_with_query ... ok [INFO] [stdout] test storage::pins::pin::tests::pin_new ... ok [INFO] [stdout] test storage::pins::pin::tests::pin_deserializes_from_json ... ok [INFO] [stdout] test storage::pins::pin::tests::pin_uri_playlist ... ok [INFO] [stdout] test storage::pins::pin::tests::pin_serializes_to_json ... ok [INFO] [stdout] test storage::pins::pin::tests::pin_uri_track ... ok [INFO] [stdout] test storage::pins::resource_type::tests::as_str_all_types ... ok [INFO] [stdout] test storage::pins::resource_type::tests::copy_trait ... ok [INFO] [stdout] test storage::pins::resource_type::tests::equality ... ok [INFO] [stdout] test storage::pins::resource_type::tests::from_str_case_insensitive ... ok [INFO] [stdout] test storage::pins::resource_type::tests::from_str_invalid ... ok [INFO] [stdout] test storage::pins::resource_type::tests::from_str_valid ... ok [INFO] [stdout] test storage::pins::resource_type::tests::serialize_deserialize ... ok [INFO] [stdout] test storage::pins::store::tests::pin_error_display ... ok [INFO] [stdout] test storage::pins::store::tests::pin_store_add_and_list ... ok [INFO] [stdout] test storage::token_store::tests::load_nonexistent_returns_not_found ... ok [INFO] [stdout] test storage::pins::store::tests::pin_store_fuzzy_search_by_tag ... ok [INFO] [stdout] test storage::pins::store::tests::pin_store_add_duplicate_fails ... ok [INFO] [stdout] test storage::token_store::tests::save_and_load_token ... ok [INFO] [stdout] test storage::token_store::tests::save_sets_secure_permissions ... ok [INFO] [stdout] test storage::pins::store::tests::pin_store_find_by_alias_not_found ... ok [INFO] [stdout] test storage::pins::store::tests::pin_store_find_by_alias ... ok [INFO] [stdout] test storage::token_store::tests::token_store_error_display ... ok [INFO] [stdout] test storage::unified_token::tests::exists_returns_false_when_empty ... ok [INFO] [stdout] test storage::unified_token::tests::unified_token_error_display ... ok [INFO] [stdout] test types::album::tests::album_full_deserializes ... ok [INFO] [stdout] test types::album::tests::album_artist_name ... ok [INFO] [stdout] test storage::pins::store::tests::pin_store_loads_existing_file ... ok [INFO] [stdout] test storage::pins::store::tests::pin_store_all ... ok [INFO] [stdout] test storage::unified_token::tests::file_backend_creates_successfully ... ok [INFO] [stdout] test types::album::tests::album_release_year ... ok [INFO] [stdout] test storage::pins::store::tests::pin_store_persistence ... ok [INFO] [stdout] test types::album::tests::album_simplified_deserializes ... ok [INFO] [stdout] test types::album::tests::album_image_url ... ok [INFO] [stdout] test types::album::tests::album_simplified_artist_name ... ok [INFO] [stdout] test storage::pins::store::tests::pin_store_fuzzy_search ... ok [INFO] [stdout] test types::album::tests::album_simplified_artist_name_none ... ok [INFO] [stdout] test types::album::tests::album_release_year_none ... ok [INFO] [stdout] test storage::pins::store::tests::pin_store_list_with_filter ... ok [INFO] [stdout] test types::album::tests::album_simplified_image_url ... ok [INFO] [stdout] test storage::token_store::tests::delete_nonexistent_is_ok ... ok [INFO] [stdout] test types::album::tests::album_simplified_image_url_none ... ok [INFO] [stdout] test types::album::tests::album_type_deserializes ... ok [INFO] [stdout] test types::album::tests::saved_album_deserializes ... ok [INFO] [stdout] test types::artist::tests::artist_image_url_returns_none_when_no_images ... ok [INFO] [stdout] test types::artist::tests::artist_simplified_deserializes ... ok [INFO] [stdout] test types::artist::tests::followed_artists_response_deserializes ... ok [INFO] [stdout] test types::artist::tests::artist_full_deserializes ... ok [INFO] [stdout] test storage::token_store::tests::exists_returns_false_when_no_token ... ok [INFO] [stdout] test types::artist::tests::artist_image_url_returns_first_image ... ok [INFO] [stdout] test types::artist::tests::artist_top_tracks_response_deserializes ... ok [INFO] [stdout] test storage::token_store::tests::exists_returns_true_after_save ... ok [INFO] [stdout] test storage::pins::store::tests::pin_store_remove_not_found ... ok [INFO] [stdout] test storage::pins::store::tests::pin_store_remove_by_id ... ok [INFO] [stdout] test types::artist::tests::related_artists_response_deserializes ... ok [INFO] [stdout] test types::common::tests::copyright_deserializes ... ok [INFO] [stdout] test types::common::tests::cursored_deserializes ... ok [INFO] [stdout] test storage::pins::store::tests::pin_store_remove_by_alias ... ok [INFO] [stdout] test types::common::tests::cursors_deserializes ... ok [INFO] [stdout] test types::common::tests::external_ids_deserializes ... ok [INFO] [stdout] test types::common::tests::external_urls_deserializes ... ok [INFO] [stdout] test types::playback::tests::device_type_display_known_types ... ok [INFO] [stdout] test types::playback::tests::device_deserializes ... ok [INFO] [stdout] test types::playback::tests::device_type_display_unknown ... ok [INFO] [stdout] test types::common::tests::followers_deserializes ... ok [INFO] [stdout] test types::common::tests::image_deserializes ... ok [INFO] [stdout] test types::common::tests::image_deserializes_with_null_dimensions ... ok [INFO] [stdout] test types::common::tests::linked_from_deserializes ... ok [INFO] [stdout] test types::common::tests::paginated_deserializes ... ok [INFO] [stdout] test types::common::tests::paginated_with_next_prev ... ok [INFO] [stdout] test types::common::tests::restrictions_deserializes ... ok [INFO] [stdout] test types::common::tests::resume_point_deserializes ... ok [INFO] [stdout] test types::playback::tests::play_history_deserializes ... ok [INFO] [stdout] test types::playback::tests::playback_state_device_name ... ok [INFO] [stdout] test types::playback::tests::playback_state_duration_str_no_item ... ok [INFO] [stdout] test types::playback::tests::playback_actions_deserializes ... ok [INFO] [stdout] test types::playback::tests::playback_state_progress_str_zero ... ok [INFO] [stdout] test types::playback::tests::playback_context_deserializes ... ok [INFO] [stdout] test types::playback::tests::playback_state_duration_str ... ok [INFO] [stdout] test types::playback::tests::playback_state_track_name ... ok [INFO] [stdout] test types::playback::tests::queue_response_deserializes ... ok [INFO] [stdout] test types::playlist::tests::category_playlists_deserializes ... ok [INFO] [stdout] test types::playlist::tests::playlist_image_url_none_when_empty ... ok [INFO] [stdout] test types::playlist::tests::playlist_full_deserializes ... ok [INFO] [stdout] test types::playback::tests::playback_state_track_name_none ... ok [INFO] [stdout] test types::playlist::tests::playlist_image_url_returns_first ... ok [INFO] [stdout] test types::playlist::tests::playlist_simplified_deserializes ... ok [INFO] [stdout] test types::playlist::tests::playlist_owner_name_none_without_owner ... ok [INFO] [stdout] test types::playlist::tests::playlist_simplified_image_url ... ok [INFO] [stdout] test types::playlist::tests::playlist_simplified_image_url_none_without_images ... ok [INFO] [stdout] test types::playlist::tests::playlist_owner_name_prefers_display_name ... ok [INFO] [stdout] test types::playback::tests::devices_response_deserializes ... ok [INFO] [stdout] test types::playback::tests::recently_played_cursors_deserializes ... ok [INFO] [stdout] test types::playback::tests::playback_state_deserializes ... ok [INFO] [stdout] test types::playlist::tests::playlist_track_count_from_tracks ... ok [INFO] [stdout] test types::playback::tests::playback_state_progress_str ... ok [INFO] [stdout] test types::playlist::tests::playlist_simplified_track_count_zero_when_none ... ok [INFO] [stdout] test types::playlist::tests::playlist_track_count_zero_without_tracks ... ok [INFO] [stdout] test types::playback::tests::recently_played_response_deserializes ... ok [INFO] [stdout] test types::playlist::tests::playlist_track_deserializes ... ok [INFO] [stdout] test types::playlist::tests::playlist_tracks_ref_deserializes ... ok [INFO] [stdout] test types::track::tests::saved_track_deserializes ... ok [INFO] [stdout] test types::track::tests::track_simplified_artist_name ... ok [INFO] [stdout] test types::track::tests::track_full_deserializes ... ok [INFO] [stdout] test types::track::tests::track_simplified_artist_name_none ... ok [INFO] [stdout] test types::track::tests::track_image_url ... ok [INFO] [stdout] test types::track::tests::track_album_name ... ok [INFO] [stdout] test types::track::tests::track_album_name_none ... ok [INFO] [stdout] test types::track::tests::track_artist_name ... ok [INFO] [stdout] test types::track::tests::track_artist_names_empty ... ok [INFO] [stdout] test types::track::tests::track_artist_names_multiple ... ok [INFO] [stdout] test types::track::tests::track_simplified_deserializes ... ok [INFO] [stdout] test types::track::tests::track_duration_str ... ok [INFO] [stdout] test types::user::tests::user_private_image_url_none_when_empty ... ok [INFO] [stdout] test types::user::tests::user_private_image_url_returns_first ... ok [INFO] [stdout] test types::user::tests::user_private_is_premium_false_when_none ... ok [INFO] [stdout] test types::user::tests::user_public_deserializes ... ok [INFO] [stdout] test types::user::tests::user_public_image_url ... ok [INFO] [stdout] test types::user::tests::user_public_image_url_none_when_empty ... ok [INFO] [stdout] test types::user::tests::explicit_content_deserializes ... ok [INFO] [stdout] test types::track::tests::track_simplified_duration_str ... ok [INFO] [stdout] test types::user::tests::top_artists_response_deserializes ... ok [INFO] [stdout] test types::user::tests::top_tracks_response_deserializes ... ok [INFO] [stdout] test types::user::tests::user_private_deserializes ... ok [INFO] [stdout] test types::user::tests::user_private_is_premium_false_for_free ... ok [INFO] [stdout] test storage::token_store::tests::path_returns_correct_path ... ok [INFO] [stdout] [INFO] [stdout] test result: ok. 605 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.13s [INFO] [stdout] [INFO] [stderr] Running unittests src/main.rs (/opt/rustwide/target/debug/deps/spotify_cli-e48bebf827eee6af) [INFO] [stdout] [INFO] [stdout] running 0 tests [INFO] [stdout] [INFO] [stdout] test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s [INFO] [stdout] [INFO] [stderr] Running tests/cli_tests.rs (/opt/rustwide/target/debug/deps/cli_tests-cedef12b2b9b9ac8) [INFO] [stdout] [INFO] [stdout] running 32 tests [INFO] [stdout] test invalid_subcommand_fails ... ok [INFO] [stdout] test episode_help_shows_subcommands ... ok [INFO] [stdout] test info_help_shows_subcommands ... ok [INFO] [stdout] test category_help_shows_subcommands ... ok [INFO] [stdout] test follow_help_shows_subcommands ... ok [INFO] [stdout] test audiobook_help_shows_subcommands ... ok [INFO] [stdout] test info_artist_help_shows_views ... ok [INFO] [stdout] test help_displays_usage ... ok [INFO] [stdout] test album_help_shows_subcommands ... ok [INFO] [stdout] test help_shows_commands ... ok [INFO] [stdout] test markets_command_exists ... ok [INFO] [stdout] test pin_add_requires_arguments ... ok [INFO] [stdout] test player_help_shows_subcommands ... ok [INFO] [stdout] test player_repeat_help_shows_modes ... ok [INFO] [stdout] test playlist_help_shows_subcommands ... ok [INFO] [stdout] test search_help_shows_filters ... ok [INFO] [stdout] test pin_help_shows_subcommands ... ok [INFO] [stdout] test show_help_shows_subcommands ... ok [INFO] [stdout] test json_flag_is_global ... ok [INFO] [stdout] test player_volume_help_shows_range ... ok [INFO] [stdout] test library_help_shows_subcommands ... ok [INFO] [stdout] test auth_help_shows_subcommands ... ok [INFO] [stdout] test user_top_help_shows_options ... ok [INFO] [stdout] test user_help_shows_subcommands ... ok [INFO] [stdout] test verbose_flag_is_global ... ok [INFO] [stdout] test playlist_list_help_shows_pagination ... ok [INFO] [stdout] test search_help_shows_options ... ok [INFO] [stdout] test search_empty_query_shows_error ... ok [INFO] [stdout] test completions_bash_works ... ok [INFO] [stdout] test completions_fish_works ... ok [INFO] [stdout] test completions_zsh_works ... ok [INFO] [stderr] Running tests/command_tests.rs (/opt/rustwide/target/debug/deps/command_tests-df6c7bbaa09132c0) [INFO] [stdout] test subcommand_help_works ... ok [INFO] [stdout] [INFO] [stdout] test result: ok. 32 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.21s [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] running 51 tests [INFO] [stdout] test auth::refresh_token_without_new_refresh ... ok [INFO] [stdout] test albums::get_saved_albums_returns_list ... ok [INFO] [stdout] test albums::get_new_releases_returns_albums ... ok [INFO] [stdout] test albums::get_album_tracks_returns_tracks ... ok [INFO] [stdout] test artists::get_artist_returns_details ... ok [INFO] [stdout] test artists::get_artist_top_tracks_returns_tracks ... ok [INFO] [stdout] test auth::refresh_token_invalid_token ... ok [INFO] [stdout] test albums::get_album_not_found ... ok [INFO] [stdout] test auth::exchange_code_invalid_verifier ... ok [INFO] [stdout] test artists::get_artists_albums_returns_albums ... ok [INFO] [stdout] test auth::exchange_code_success ... ok [INFO] [stdout] test error_handling::not_found_error ... ok [INFO] [stdout] test error_handling::forbidden_error ... ok [INFO] [stdout] test albums::get_album_returns_album_details ... ok [INFO] [stdout] test auth::refresh_token_server_error ... ok [INFO] [stdout] test library::get_saved_tracks_returns_tracks ... ok [INFO] [stdout] test error_handling::api_error_with_message ... ok [INFO] [stdout] test player::pause_playback_success ... ok [INFO] [stdout] test player::set_volume_success ... ok [INFO] [stdout] test player::get_playback_state_returns_state ... ok [INFO] [stdout] test player::get_queue_returns_queue ... ok [INFO] [stdout] test player::start_playback_success ... ok [INFO] [stdout] test player::skip_previous_success ... ok [INFO] [stdout] test player::skip_next_success ... ok [INFO] [stdout] test player::start_playback_with_context ... ok [INFO] [stdout] test player::start_playback_with_uris ... ok [INFO] [stdout] test playlists::add_items_to_playlist_returns_snapshot ... ok [INFO] [stdout] test playlists::create_playlist_returns_new_playlist ... ok [INFO] [stdout] test playlists::get_playlist_returns_details ... ok [INFO] [stdout] test playlists::get_user_playlists_returns_list ... ok [INFO] [stdout] test search_tests::search_tracks_returns_results ... ok [INFO] [stdout] test search_tests::search_multiple_types_returns_results ... ok [INFO] [stdout] test playlists::create_public_playlist ... ok [INFO] [stdout] test library::check_saved_tracks_returns_booleans ... ok [INFO] [stdout] test player::get_devices_returns_list ... ok [INFO] [stdout] test tracks::get_track_not_found ... ok [INFO] [stdout] test player::get_playback_state_no_active_device ... ok [INFO] [stdout] test library::save_tracks_success ... ok [INFO] [stdout] test tracks::get_track_returns_details ... ok [INFO] [stdout] test user::get_top_artists_returns_list ... ok [INFO] [stdout] test user::get_current_user_returns_profile ... ok [INFO] [stdout] test library::remove_tracks_success ... ok [INFO] [stdout] test error_handling::unauthorized_error ... ok [INFO] [stdout] test user::get_top_tracks_returns_list ... ok [INFO] [stdout] test search_tests::search_with_no_results ... ok [INFO] [stdout] test library::get_saved_tracks_with_pagination ... ok [INFO] [stdout] test auth::refresh_token_returns_new_refresh_token ... ok [INFO] [stdout] test auth::refresh_token_success ... ok [INFO] [stdout] test player::get_recently_played_returns_history ... ok [INFO] [stdout] test auth::exchange_code_invalid_code ... ok [INFO] [stdout] test error_handling::rate_limited_error ... ok [INFO] [stdout] [INFO] [stdout] test result: ok. 51 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 15.06s [INFO] [stdout] [INFO] [stderr] Running tests/endpoint_tests.rs (/opt/rustwide/target/debug/deps/endpoint_tests-8986117ee3dd43ab) [INFO] [stdout] [INFO] [stdout] running 66 tests [INFO] [stdout] test album_endpoints::test_remove_saved_albums ... ok [INFO] [stdout] test artist_endpoints::test_get_artist ... ok [INFO] [stdout] test audiobook_endpoints::test_get_audiobook ... ok [INFO] [stdout] test audiobook_endpoints::test_get_audiobook_chapters ... ok [INFO] [stdout] test episode_endpoints::test_save_episodes ... ok [INFO] [stdout] test category_endpoints::test_get_categories ... ok [INFO] [stdout] test artist_endpoints::test_get_related_artists ... ok [INFO] [stdout] test artist_endpoints::test_get_artists_albums ... ok [INFO] [stdout] test category_endpoints::test_get_category_playlists ... ok [INFO] [stdout] test error_handling::test_forbidden_error ... ok [INFO] [stdout] test album_endpoints::test_get_album_tracks ... ok [INFO] [stdout] test error_handling::test_unauthorized_error ... ok [INFO] [stdout] test error_handling::test_server_error ... ok [INFO] [stdout] test error_handling::test_bad_request_error ... ok [INFO] [stdout] test library_endpoints::test_check_saved_tracks ... ok [INFO] [stdout] test library_endpoints::test_save_tracks ... ok [INFO] [stdout] test markets_endpoints::test_get_markets ... ok [INFO] [stdout] test player_endpoints::test_add_to_queue ... ok [INFO] [stdout] test player_endpoints::test_get_available_devices ... ok [INFO] [stdout] test player_endpoints::test_get_recently_played ... ok [INFO] [stdout] test category_endpoints::test_get_category ... ok [INFO] [stdout] test player_endpoints::test_pause_playback ... ok [INFO] [stdout] test album_endpoints::test_get_new_releases ... ok [INFO] [stdout] test audiobook_endpoints::test_save_audiobooks ... ok [INFO] [stdout] test episode_endpoints::test_get_episode ... ok [INFO] [stdout] test library_endpoints::test_get_saved_tracks ... ok [INFO] [stdout] test library_endpoints::test_remove_tracks ... ok [INFO] [stdout] test player_endpoints::test_set_repeat ... ok [INFO] [stdout] test player_endpoints::test_seek_to_position ... ok [INFO] [stdout] test album_endpoints::test_save_albums ... ok [INFO] [stdout] test player_endpoints::test_set_volume ... ok [INFO] [stdout] test player_endpoints::test_skip_previous ... ok [INFO] [stdout] test playlist_endpoints::test_follow_playlist ... ok [INFO] [stdout] test player_endpoints::test_set_shuffle ... ok [INFO] [stdout] test playlist_endpoints::test_create_playlist ... ok [INFO] [stdout] test playlist_endpoints::test_change_playlist_details ... ok [INFO] [stdout] test playlist_endpoints::test_get_current_user_playlists ... ok [INFO] [stdout] test playlist_endpoints::test_unfollow_playlist ... ok [INFO] [stdout] test player_endpoints::test_skip_next ... ok [INFO] [stdout] test playlist_endpoints::test_get_playlist ... ok [INFO] [stdout] test playlist_endpoints::test_remove_items_from_playlist ... ok [INFO] [stdout] test playlist_endpoints::test_add_items_to_playlist ... ok [INFO] [stdout] test player_endpoints::test_get_currently_playing ... ok [INFO] [stdout] test album_endpoints::test_get_album ... ok [INFO] [stdout] test player_endpoints::test_get_playback_state ... ok [INFO] [stdout] test show_endpoints::test_get_show ... ok [INFO] [stdout] test search_endpoints::test_search_multiple_types ... ok [INFO] [stdout] test artist_endpoints::test_get_artist_top_tracks ... ok [INFO] [stdout] test player_endpoints::test_get_playback_state_no_active_device ... ok [INFO] [stdout] test player_endpoints::test_get_queue ... ok [INFO] [stdout] test album_endpoints::test_check_saved_albums ... ok [INFO] [stdout] test track_endpoints::test_get_track_not_found ... ok [INFO] [stdout] test search_endpoints::test_search_tracks ... ok [INFO] [stdout] test track_endpoints::test_get_track ... ok [INFO] [stdout] test show_endpoints::test_remove_saved_shows ... ok [INFO] [stdout] test show_endpoints::test_save_shows ... ok [INFO] [stdout] test user_endpoints::test_follow_artists ... ok [INFO] [stdout] test user_endpoints::test_get_users_profile ... ok [INFO] [stdout] test user_endpoints::test_get_users_top_tracks ... ok [INFO] [stdout] test user_endpoints::test_get_current_user ... ok [INFO] [stdout] test user_endpoints::test_unfollow_artists ... ok [INFO] [stdout] test user_endpoints::test_get_followed_artists ... ok [INFO] [stdout] test user_endpoints::test_check_following ... ok [INFO] [stdout] test track_endpoints::test_get_several_tracks ... ok [INFO] [stdout] test show_endpoints::test_get_show_episodes ... ok [INFO] [stdout] test error_handling::test_rate_limit_error has been running for over 60 seconds [INFO] [stdout] test error_handling::test_rate_limit_error ... ok [INFO] [stdout] [INFO] [stdout] test result: ok. 66 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 90.06s [INFO] [stdout] [INFO] [stderr] Running tests/integration_test.rs (/opt/rustwide/target/debug/deps/integration_test-69e61122c34a5192) [INFO] [stdout] [INFO] [stdout] running 42 tests [INFO] [stdout] test test_error_kind_string_representation ... ok [INFO] [stdout] test test_error_response_serialization ... ok [INFO] [stdout] test test_extract_id_from_url_with_params ... ok [INFO] [stdout] test test_error_with_details_serialization ... ok [INFO] [stdout] test test_album_deserialization ... ok [INFO] [stdout] test test_artist_deserialization ... ok [INFO] [stdout] test test_extract_id_from_url ... ok [INFO] [stdout] test test_device_deserialization ... ok [INFO] [stdout] test test_extract_id_passthrough ... ok [INFO] [stdout] test test_album_release_year_formats ... ok [INFO] [stdout] test test_extract_id_from_uri ... ok [INFO] [stdout] test test_extract_id_various_uri_formats ... ok [INFO] [stdout] test test_extract_id_various_url_formats ... ok [INFO] [stdout] test test_fuzzy_contains_bonus ... ok [INFO] [stdout] test test_fuzzy_similarity_threshold ... ok [INFO] [stdout] test test_fuzzy_starts_with_bonus ... ok [INFO] [stdout] test test_levenshtein_empty_string ... ok [INFO] [stdout] test test_fuzzy_word_match ... ok [INFO] [stdout] test test_levenshtein_identical_strings ... ok [INFO] [stdout] test test_levenshtein_multiple_operations ... ok [INFO] [stdout] test test_levenshtein_single_char_diff ... ok [INFO] [stdout] test test_pin_uri_for_each_type ... ok [INFO] [stdout] test test_pin_uri_generation ... ok [INFO] [stdout] test test_resource_type_from_str ... ok [INFO] [stdout] test test_playback_state_deserialization ... ok [INFO] [stdout] test test_response_status_variants ... ok [INFO] [stdout] test test_response_json_format ... ok [INFO] [stdout] test test_playback_state_progress_formatting ... ok [INFO] [stdout] test test_search_filters_empty ... ok [INFO] [stdout] test test_resource_type_from_str_invalid ... ok [INFO] [stdout] test test_search_filters_tags ... ok [INFO] [stdout] test test_search_filters_with_artist ... ok [INFO] [stdout] test test_search_filters_multiple ... ok [INFO] [stdout] test test_success_response_serialization ... ok [INFO] [stdout] test test_fuzzy_exact_match_case_insensitive ... ok [INFO] [stdout] test test_fuzzy_no_match_low_score ... ok [INFO] [stdout] test test_track_deserialization ... ok [INFO] [stdout] test test_track_duration_formatting ... ok [INFO] [stdout] test test_success_with_payload_serialization ... ok [INFO] [stdout] test test_pin_creation ... ok [INFO] [stdout] test test_resource_type_as_str ... ok [INFO] [stdout] test test_search_filters_all_fields ... ok [INFO] [stdout] [INFO] [stdout] test result: ok. 42 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.01s [INFO] [stdout] [INFO] [stderr] Running tests/rpc_tests.rs (/opt/rustwide/target/debug/deps/rpc_tests-51031ea824581448) [INFO] [stdout] [INFO] [stdout] running 21 tests [INFO] [stdout] test test_error_codes_values ... ok [INFO] [stdout] test test_server_config_custom_path ... ok [INFO] [stdout] test test_rpc_response_from_success_with_payload ... ok [INFO] [stdout] test test_rpc_request_with_params ... ok [INFO] [stdout] test test_rpc_notification_no_id ... ok [INFO] [stdout] test test_rpc_response_from_success ... ok [INFO] [stdout] test test_server_config_default ... ok [INFO] [stdout] test test_rpc_response_from_error ... ok [INFO] [stdout] test test_rpc_notification_serialization ... ok [INFO] [stdout] test test_rpc_notification_without_params ... ok [INFO] [stdout] test test_rpc_response_error_serialization ... ok [INFO] [stdout] test test_rpc_response_success_serialization ... ok [INFO] [stdout] test test_server_socket_path ... ok [INFO] [stdout] test test_server_event_sender ... ok [INFO] [stdout] test test_rpc_request_parsing ... ok [INFO] [stdout] test test_server_multiple_requests ... ok [INFO] [stdout] test test_server_ping_pong ... ok [INFO] [stdout] test test_server_version ... ok [INFO] [stdout] test test_server_parse_error ... ok [INFO] [stdout] test test_server_unknown_method ... ok [INFO] [stdout] test test_server_notification_no_response ... ok [INFO] [stdout] [INFO] [stdout] test result: ok. 21 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.17s [INFO] [stdout] [INFO] [stderr] Doc-tests spotify_cli [INFO] [stdout] [INFO] [stdout] running 7 tests [INFO] [stdout] test src/cli/commands/macros.rs - cli::commands::macros::resource_check (line 167) ... ignored [INFO] [stdout] test src/cli/commands/macros.rs - cli::commands::macros::resource_get (line 8) ... ignored [INFO] [stdout] test src/cli/commands/macros.rs - cli::commands::macros::resource_list (line 43) ... ignored [INFO] [stdout] test src/cli/commands/macros.rs - cli::commands::macros::resource_list_with_id (line 74) ... ignored [INFO] [stdout] test src/cli/commands/macros.rs - cli::commands::macros::resource_remove (line 137) ... ignored [INFO] [stdout] test src/cli/commands/macros.rs - cli::commands::macros::resource_save (line 107) ... ignored [INFO] [stdout] test src/oauth/mod.rs - oauth (line 15) ... ignored [INFO] [stdout] [INFO] [stdout] test result: ok. 0 passed; 0 failed; 7 ignored; 0 measured; 0 filtered out; finished in 0.00s [INFO] [stdout] [INFO] [stdout] all doctests ran in 0.40s; merged doctests compilation took 0.40s [INFO] running `Command { std: "docker" "inspect" "5ff99d3814517acf6a2ca467708237a02b3869443301bfbf28e00475fc93d708", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "5ff99d3814517acf6a2ca467708237a02b3869443301bfbf28e00475fc93d708", kill_on_drop: false }` [INFO] [stdout] 5ff99d3814517acf6a2ca467708237a02b3869443301bfbf28e00475fc93d708