diff options
Diffstat (limited to 'tests/testsuite/logout.rs')
-rw-r--r-- | tests/testsuite/logout.rs | 91 |
1 files changed, 91 insertions, 0 deletions
diff --git a/tests/testsuite/logout.rs b/tests/testsuite/logout.rs new file mode 100644 index 0000000..92b6f42 --- /dev/null +++ b/tests/testsuite/logout.rs @@ -0,0 +1,91 @@ +//! Tests for the `cargo logout` command. + +use cargo_test_support::install::cargo_home; +use cargo_test_support::registry::TestRegistry; +use cargo_test_support::{cargo_process, registry}; +use std::fs; + +#[cargo_test] +fn gated() { + registry::init(); + cargo_process("logout") + .masquerade_as_nightly_cargo(&["cargo-logout"]) + .with_status(101) + .with_stderr( + "\ +[ERROR] the `cargo logout` command is unstable, pass `-Z unstable-options` to enable it +See https://github.com/rust-lang/cargo/issues/8933 for more information about \ +the `cargo logout` command. +", + ) + .run(); +} + +/// Checks whether or not the token is set for the given token. +fn check_config_token(registry: Option<&str>, should_be_set: bool) { + let credentials = cargo_home().join("credentials.toml"); + let contents = fs::read_to_string(&credentials).unwrap(); + let toml: toml::Table = contents.parse().unwrap(); + if let Some(registry) = registry { + assert_eq!( + toml.get("registries") + .and_then(|registries| registries.get(registry)) + .and_then(|registry| registry.get("token")) + .is_some(), + should_be_set + ); + } else { + assert_eq!( + toml.get("registry") + .and_then(|registry| registry.get("token")) + .is_some(), + should_be_set + ); + } +} + +fn simple_logout_test(registry: &TestRegistry, reg: Option<&str>, flag: &str) { + let msg = reg.unwrap_or("crates-io"); + check_config_token(reg, true); + let mut cargo = cargo_process(&format!("logout -Z unstable-options {}", flag)); + if reg.is_none() { + cargo.replace_crates_io(registry.index_url()); + } + cargo + .masquerade_as_nightly_cargo(&["cargo-logout"]) + .with_stderr(&format!( + "\ +[LOGOUT] token for `{}` has been removed from local storage +", + msg + )) + .run(); + check_config_token(reg, false); + + let mut cargo = cargo_process(&format!("logout -Z unstable-options {}", flag)); + if reg.is_none() { + cargo.replace_crates_io(registry.index_url()); + } + cargo + .masquerade_as_nightly_cargo(&["cargo-logout"]) + .with_stderr(&format!( + "\ +[LOGOUT] not currently logged in to `{}` +", + msg + )) + .run(); + check_config_token(reg, false); +} + +#[cargo_test] +fn default_registry() { + let registry = registry::init(); + simple_logout_test(®istry, None, ""); +} + +#[cargo_test] +fn other_registry() { + let registry = registry::alt_init(); + simple_logout_test(®istry, Some("alternative"), "--registry alternative"); +} |