From 1257630019a100c7616eb12e658a3fa24dd6b384 Mon Sep 17 00:00:00 2001 From: Jon Seager Date: Fri, 6 Feb 2026 14:27:43 +0000 Subject: [PATCH] refactor(tests): add CLI test macros and deduplicate helpers - Add `define_cli_auth_test!` macro for authentication-required tests - Add `define_cli_list_test!` macro for unauthenticated list tests - Replace 18 auth tests and 5 list tests with macro invocations - Add `create_entity_cli()` generic, convert per-entity helpers to thin wrappers - Move `create_bag` and `create_gear` from brews_cli.rs to helpers.rs --- tests/cli/backup_cli.rs | 13 +---- tests/cli/bags_cli.rs | 60 ++++++------------- tests/cli/brews_cli.rs | 55 +----------------- tests/cli/cafes_cli.rs | 117 +++++++++++++------------------------- tests/cli/gear_cli.rs | 87 +++++++++------------------- tests/cli/helpers.rs | 97 ++++++++++++++++--------------- tests/cli/main.rs | 1 + tests/cli/roasters_cli.rs | 105 +++++++++++----------------------- tests/cli/roasts_cli.rs | 107 +++++++++++----------------------- tests/cli/test_macros.rs | 40 +++++++++++++ tests/cli/tokens_cli.rs | 31 +++------- 11 files changed, 250 insertions(+), 463 deletions(-) create mode 100644 tests/cli/test_macros.rs diff --git a/tests/cli/backup_cli.rs b/tests/cli/backup_cli.rs index 2194a90..e612ad1 100644 --- a/tests/cli/backup_cli.rs +++ b/tests/cli/backup_cli.rs @@ -1,4 +1,7 @@ use super::helpers::{create_token, run_brewlog}; +use crate::test_macros::define_cli_auth_test; + +define_cli_auth_test!(backup_requires_auth, &["backup"]); #[test] fn backup_produces_valid_json() { @@ -25,13 +28,3 @@ fn backup_produces_valid_json() { assert!(data["cafes"].is_array()); assert!(data["timeline_events"].is_array()); } - -#[test] -fn backup_requires_auth() { - let output = run_brewlog(&["backup"], &[]); - - assert!( - !output.status.success(), - "backup command should fail without auth" - ); -} diff --git a/tests/cli/bags_cli.rs b/tests/cli/bags_cli.rs index 5fc6396..20c9524 100644 --- a/tests/cli/bags_cli.rs +++ b/tests/cli/bags_cli.rs @@ -1,17 +1,23 @@ -use crate::helpers::{create_roast, create_roaster, create_token, run_brewlog, server_info}; +use crate::helpers::{create_roast, create_roaster, create_token, run_brewlog}; +use crate::test_macros::{define_cli_auth_test, define_cli_list_test}; use serde_json::Value; -#[test] -fn test_add_bag_requires_authentication() { - let _ = server_info(); - - let output = run_brewlog( - &["bag", "add", "--roast-id", "123", "--amount", "250.0"], - &[], - ); - - assert!(!output.status.success(), "bag add without auth should fail"); -} +define_cli_auth_test!( + test_add_bag_requires_authentication, + &["bag", "add", "--roast-id", "123", "--amount", "250.0"] +); +define_cli_auth_test!( + test_update_bag_requires_authentication, + &["bag", "update", "--id", "123", "--remaining", "100.0"] +); +define_cli_auth_test!( + test_delete_bag_requires_authentication, + &["bag", "delete", "--id", "123"] +); +define_cli_list_test!( + test_list_bags_works_without_authentication, + &["bag", "list"] +); #[test] fn test_add_bag_with_authentication() { @@ -44,21 +50,6 @@ fn test_add_bag_with_authentication() { assert!(bag["id"].is_i64()); } -#[test] -fn test_update_bag_requires_authentication() { - let _ = server_info(); - - let output = run_brewlog( - &["bag", "update", "--id", "123", "--remaining", "100.0"], - &[], - ); - - assert!( - !output.status.success(), - "bag update without auth should fail" - ); -} - #[test] fn test_update_bag_with_authentication() { let token = create_token("test-update-bag"); @@ -96,14 +87,6 @@ fn test_update_bag_with_authentication() { assert_eq!(updated_bag["closed"].as_bool(), Some(true)); } -#[test] -fn test_list_bags_works_without_authentication() { - let _ = server_info(); - // Listing without roast_id might return all or empty, but should succeed (200 OK) - let output = run_brewlog(&["bag", "list"], &[]); - assert!(output.status.success()); -} - #[test] fn test_list_bags_shows_added_bag() { let token = create_token("test-list-bags"); @@ -216,13 +199,6 @@ fn test_list_bags_shows_open_and_closed_bags() { ); } -#[test] -fn test_delete_bag_requires_authentication() { - let _ = server_info(); - let output = run_brewlog(&["bag", "delete", "--id", "123"], &[]); - assert!(!output.status.success()); -} - #[test] fn test_delete_bag_with_authentication() { let token = create_token("test-delete-bag"); diff --git a/tests/cli/brews_cli.rs b/tests/cli/brews_cli.rs index 5678a29..fabb10a 100644 --- a/tests/cli/brews_cli.rs +++ b/tests/cli/brews_cli.rs @@ -1,55 +1,6 @@ -use crate::helpers::{create_roast, create_roaster, create_token, run_brewlog}; - -fn create_bag(roast_id: &str, token: &str) -> String { - let output = run_brewlog( - &["bag", "add", "--roast-id", roast_id, "--amount", "250"], - &[("BREWLOG_TOKEN", token)], - ); - - if !output.status.success() { - panic!( - "Failed to create bag: {}", - String::from_utf8_lossy(&output.stderr) - ); - } - - let stdout = String::from_utf8_lossy(&output.stdout); - let bag: serde_json::Value = serde_json::from_str(&stdout).expect("Should output valid JSON"); - bag["id"] - .as_i64() - .expect("bag id should be numeric") - .to_string() -} - -fn create_gear(category: &str, make: &str, model: &str, token: &str) -> String { - let output = run_brewlog( - &[ - "gear", - "add", - "--category", - category, - "--make", - make, - "--model", - model, - ], - &[("BREWLOG_TOKEN", token)], - ); - - if !output.status.success() { - panic!( - "Failed to create gear: {}", - String::from_utf8_lossy(&output.stderr) - ); - } - - let stdout = String::from_utf8_lossy(&output.stdout); - let gear: serde_json::Value = serde_json::from_str(&stdout).expect("Should output valid JSON"); - gear["id"] - .as_i64() - .expect("gear id should be numeric") - .to_string() -} +use crate::helpers::{ + create_bag, create_gear, create_roast, create_roaster, create_token, run_brewlog, +}; #[test] fn brew_add_creates_brew_via_api() { diff --git a/tests/cli/cafes_cli.rs b/tests/cli/cafes_cli.rs index 6c1ce6c..0f113d8 100644 --- a/tests/cli/cafes_cli.rs +++ b/tests/cli/cafes_cli.rs @@ -1,33 +1,43 @@ -use crate::helpers::{create_cafe, create_token, run_brewlog, server_info}; +use crate::helpers::{create_cafe, create_token, run_brewlog}; +use crate::test_macros::{define_cli_auth_test, define_cli_list_test}; use serde_json::Value; -#[test] -fn test_add_cafe_requires_authentication() { - let _ = server_info(); - - let output = run_brewlog( - &[ - "cafe", - "add", - "--name", - "Test Cafe", - "--city", - "London", - "--country", - "UK", - "--latitude", - "51.5074", - "--longitude", - "-0.1278", - ], - &[], - ); - - assert!( - !output.status.success(), - "cafe add without auth should fail" - ); -} +define_cli_auth_test!( + test_add_cafe_requires_authentication, + &[ + "cafe", + "add", + "--name", + "Test Cafe", + "--city", + "London", + "--country", + "UK", + "--latitude", + "51.5074", + "--longitude", + "-0.1278" + ] +); +define_cli_auth_test!( + test_delete_cafe_requires_authentication, + &["cafe", "delete", "--id", "some-id"] +); +define_cli_auth_test!( + test_update_cafe_requires_authentication, + &[ + "cafe", + "update", + "--id", + "some-id", + "--name", + "Updated Name" + ] +); +define_cli_list_test!( + test_list_cafes_works_without_authentication, + &["cafe", "list"] +); #[test] fn test_add_cafe_with_authentication() { @@ -67,23 +77,6 @@ fn test_add_cafe_with_authentication() { assert!(cafe["id"].is_i64(), "Should have an ID"); } -#[test] -fn test_list_cafes_works_without_authentication() { - let _ = server_info(); - - let output = run_brewlog(&["cafe", "list"], &[]); - - assert!( - output.status.success(), - "cafe list should work without auth" - ); - - let stdout = String::from_utf8_lossy(&output.stdout); - let cafes: Value = serde_json::from_str(&stdout).expect("Should output valid JSON array"); - - assert!(cafes.is_array(), "Should return an array"); -} - #[test] fn test_list_cafes_shows_added_cafe() { let token = create_token("test-list-cafes"); @@ -112,37 +105,3 @@ fn test_list_cafes_shows_added_cafe() { .any(|c| c["id"].as_i64().unwrap().to_string() == cafe_id); assert!(found, "Should find the added cafe in the list"); } - -#[test] -fn test_delete_cafe_requires_authentication() { - let _ = server_info(); - - let output = run_brewlog(&["cafe", "delete", "--id", "some-id"], &[]); - - assert!( - !output.status.success(), - "cafe delete without auth should fail" - ); -} - -#[test] -fn test_update_cafe_requires_authentication() { - let _ = server_info(); - - let output = run_brewlog( - &[ - "cafe", - "update", - "--id", - "some-id", - "--name", - "Updated Name", - ], - &[], - ); - - assert!( - !output.status.success(), - "cafe update without auth should fail" - ); -} diff --git a/tests/cli/gear_cli.rs b/tests/cli/gear_cli.rs index b87f378..a91b9f4 100644 --- a/tests/cli/gear_cli.rs +++ b/tests/cli/gear_cli.rs @@ -1,29 +1,32 @@ -use crate::helpers::{create_token, run_brewlog, server_info}; +use crate::helpers::{create_token, run_brewlog}; +use crate::test_macros::{define_cli_auth_test, define_cli_list_test}; use serde_json::Value; -#[test] -fn test_add_gear_requires_authentication() { - let _ = server_info(); - - let output = run_brewlog( - &[ - "gear", - "add", - "--category", - "grinder", - "--make", - "Baratza", - "--model", - "Encore", - ], - &[], - ); - - assert!( - !output.status.success(), - "gear add without auth should fail" - ); -} +define_cli_auth_test!( + test_add_gear_requires_authentication, + &[ + "gear", + "add", + "--category", + "grinder", + "--make", + "Baratza", + "--model", + "Encore" + ] +); +define_cli_auth_test!( + test_update_gear_requires_authentication, + &["gear", "update", "--id", "123", "--make", "Updated"] +); +define_cli_auth_test!( + test_delete_gear_requires_authentication, + &["gear", "delete", "--id", "123"] +); +define_cli_list_test!( + test_list_gear_works_without_authentication, + &["gear", "list"] +); #[test] fn test_add_gear_with_authentication() { @@ -52,18 +55,6 @@ fn test_add_gear_with_authentication() { assert!(gear["id"].is_i64()); } -#[test] -fn test_list_gear_works_without_authentication() { - let _ = server_info(); - - let output = run_brewlog(&["gear", "list"], &[]); - - assert!( - output.status.success(), - "gear list should work without auth" - ); -} - #[test] fn test_list_gear_shows_added_gear() { let token = create_token("test-list-gear"); @@ -179,18 +170,6 @@ fn test_get_gear_by_id() { assert_eq!(retrieved_gear["model"], "EG-1"); } -#[test] -fn test_update_gear_requires_authentication() { - let _ = server_info(); - - let output = run_brewlog(&["gear", "update", "--id", "123", "--make", "Updated"], &[]); - - assert!( - !output.status.success(), - "gear update without auth should fail" - ); -} - #[test] fn test_update_gear_with_authentication() { let token = create_token("test-update-gear"); @@ -224,18 +203,6 @@ fn test_update_gear_with_authentication() { assert_eq!(updated_gear["model"], "Mini II"); } -#[test] -fn test_delete_gear_requires_authentication() { - let _ = server_info(); - - let output = run_brewlog(&["gear", "delete", "--id", "123"], &[]); - - assert!( - !output.status.success(), - "gear delete without auth should fail" - ); -} - #[test] fn test_delete_gear_with_authentication() { let token = create_token("test-delete-gear"); diff --git a/tests/cli/helpers.rs b/tests/cli/helpers.rs index 3803132..6a419f0 100644 --- a/tests/cli/helpers.rs +++ b/tests/cli/helpers.rs @@ -209,32 +209,33 @@ pub fn run_brewlog(args: &[&str], env: &[(&str, &str)]) -> std::process::Output cmd.output().expect("Failed to run brewlog command") } -/// Helper to create a roaster and return its ID -pub fn create_roaster(name: &str, token: &str) -> String { - let output = run_brewlog( - &["roaster", "add", "--name", name, "--country", "UK"], - &[("BREWLOG_TOKEN", token)], - ); - +/// Generic helper: run a CLI command with auth, assert success, parse JSON, extract ID. +fn create_entity_cli(args: &[&str], token: &str, label: &str) -> String { + let output = run_brewlog(args, &[("BREWLOG_TOKEN", token)]); if !output.status.success() { panic!( - "Failed to create roaster: {}", + "Failed to create {label}: {}", String::from_utf8_lossy(&output.stderr) ); } - let stdout = String::from_utf8_lossy(&output.stdout); - let roaster: serde_json::Value = - serde_json::from_str(&stdout).expect("Should output valid JSON"); - roaster["id"] + let value: serde_json::Value = serde_json::from_str(&stdout).expect("Should output valid JSON"); + value["id"] .as_i64() - .expect("roaster id should be numeric") + .unwrap_or_else(|| panic!("{label} id should be numeric")) .to_string() } -/// Helper to create a roast and return its ID +pub fn create_roaster(name: &str, token: &str) -> String { + create_entity_cli( + &["roaster", "add", "--name", name, "--country", "UK"], + token, + "roaster", + ) +} + pub fn create_roast(roaster_id: &str, name: &str, token: &str) -> String { - let output = run_brewlog( + create_entity_cli( &[ "roast", "add", @@ -253,25 +254,11 @@ pub fn create_roast(roaster_id: &str, name: &str, token: &str) -> String { "--tasting-notes", "Blackcurrant", ], - &[("BREWLOG_TOKEN", token)], - ); - - if !output.status.success() { - panic!( - "Failed to create roast: {}", - String::from_utf8_lossy(&output.stderr) - ); - } - - let stdout = String::from_utf8_lossy(&output.stdout); - let roast: serde_json::Value = serde_json::from_str(&stdout).expect("Should output valid JSON"); - roast["id"] - .as_i64() - .expect("roast id should be numeric") - .to_string() + token, + "roast", + ) } -/// Helper to create a cafe and return its ID pub fn create_cafe( name: &str, city: &str, @@ -280,7 +267,7 @@ pub fn create_cafe( longitude: &str, token: &str, ) -> String { - let output = run_brewlog( + create_entity_cli( &[ "cafe", "add", @@ -295,20 +282,32 @@ pub fn create_cafe( "--longitude", longitude, ], - &[("BREWLOG_TOKEN", token)], - ); - - if !output.status.success() { - panic!( - "Failed to create cafe: {}", - String::from_utf8_lossy(&output.stderr) - ); - } - - let stdout = String::from_utf8_lossy(&output.stdout); - let cafe: serde_json::Value = serde_json::from_str(&stdout).expect("Should output valid JSON"); - cafe["id"] - .as_i64() - .expect("cafe id should be numeric") - .to_string() + token, + "cafe", + ) +} + +pub fn create_bag(roast_id: &str, token: &str) -> String { + create_entity_cli( + &["bag", "add", "--roast-id", roast_id, "--amount", "250"], + token, + "bag", + ) +} + +pub fn create_gear(category: &str, make: &str, model: &str, token: &str) -> String { + create_entity_cli( + &[ + "gear", + "add", + "--category", + category, + "--make", + make, + "--model", + model, + ], + token, + "gear", + ) } diff --git a/tests/cli/main.rs b/tests/cli/main.rs index ab01bbc..23d2ca6 100644 --- a/tests/cli/main.rs +++ b/tests/cli/main.rs @@ -6,4 +6,5 @@ pub mod gear_cli; pub mod helpers; pub mod roasters_cli; pub mod roasts_cli; +pub mod test_macros; pub mod tokens_cli; diff --git a/tests/cli/roasters_cli.rs b/tests/cli/roasters_cli.rs index df31105..4dc487a 100644 --- a/tests/cli/roasters_cli.rs +++ b/tests/cli/roasters_cli.rs @@ -1,27 +1,37 @@ -use crate::helpers::{create_roaster, create_token, run_brewlog, server_info}; +use crate::helpers::{create_roaster, create_token, run_brewlog}; +use crate::test_macros::{define_cli_auth_test, define_cli_list_test}; use serde_json::Value; -#[test] -fn test_add_roaster_requires_authentication() { - let _ = server_info(); // Ensure server is started - - let output = run_brewlog( - &[ - "roaster", - "add", - "--name", - "Test Roasters", - "--country", - "UK", - ], - &[], - ); - - assert!( - !output.status.success(), - "roaster add without auth should fail" - ); -} +define_cli_auth_test!( + test_add_roaster_requires_authentication, + &[ + "roaster", + "add", + "--name", + "Test Roasters", + "--country", + "UK" + ] +); +define_cli_auth_test!( + test_delete_roaster_requires_authentication, + &["roaster", "delete", "--id", "some-id"] +); +define_cli_auth_test!( + test_update_roaster_requires_authentication, + &[ + "roaster", + "update", + "--id", + "some-id", + "--name", + "Updated Name" + ] +); +define_cli_list_test!( + test_list_roasters_works_without_authentication, + &["roaster", "list"] +); #[test] fn test_add_roaster_with_authentication() { @@ -54,23 +64,6 @@ fn test_add_roaster_with_authentication() { assert!(roaster["id"].is_i64(), "Should have an ID"); } -#[test] -fn test_list_roasters_works_without_authentication() { - let _ = server_info(); - - let output = run_brewlog(&["roaster", "list"], &[]); - - assert!( - output.status.success(), - "roaster list should work without auth" - ); - - let stdout = String::from_utf8_lossy(&output.stdout); - let roasters: Value = serde_json::from_str(&stdout).expect("Should output valid JSON array"); - - assert!(roasters.is_array(), "Should return an array"); -} - #[test] fn test_list_roasters_shows_added_roaster() { let token = create_token("test-list-roasters"); @@ -96,37 +89,3 @@ fn test_list_roasters_shows_added_roaster() { .any(|r| r["id"].as_i64().unwrap().to_string() == roaster_id); assert!(found, "Should find the added roaster in the list"); } - -#[test] -fn test_delete_roaster_requires_authentication() { - let _ = server_info(); - - let output = run_brewlog(&["roaster", "delete", "--id", "some-id"], &[]); - - assert!( - !output.status.success(), - "roaster delete without auth should fail" - ); -} - -#[test] -fn test_update_roaster_requires_authentication() { - let _ = server_info(); - - let output = run_brewlog( - &[ - "roaster", - "update", - "--id", - "some-id", - "--name", - "Updated Name", - ], - &[], - ); - - assert!( - !output.status.success(), - "roaster update without auth should fail" - ); -} diff --git a/tests/cli/roasts_cli.rs b/tests/cli/roasts_cli.rs index 607e783..aa6c863 100644 --- a/tests/cli/roasts_cli.rs +++ b/tests/cli/roasts_cli.rs @@ -1,35 +1,38 @@ -use crate::helpers::{create_roast, create_roaster, create_token, run_brewlog, server_info}; +use crate::helpers::{create_roast, create_roaster, create_token, run_brewlog}; +use crate::test_macros::{define_cli_auth_test, define_cli_list_test}; use serde_json::Value; -#[test] -fn test_add_roast_requires_authentication() { - let _ = server_info(); - - let output = run_brewlog( - &[ - "roast", - "add", - "--roaster-id", - "some-id", - "--name", - "Test Roast", - "--origin", - "Ethiopia", - "--region", - "Yirgacheffe", - "--producer", - "Local Coop", - "--process", - "Washed", - ], - &[], - ); - - assert!( - !output.status.success(), - "roast add without auth should fail" - ); -} +define_cli_auth_test!( + test_add_roast_requires_authentication, + &[ + "roast", + "add", + "--roaster-id", + "some-id", + "--name", + "Test Roast", + "--origin", + "Ethiopia", + "--region", + "Yirgacheffe", + "--producer", + "Local Coop", + "--process", + "Washed" + ] +); +define_cli_auth_test!( + test_update_roast_requires_authentication, + &["roast", "update", "--id", "123", "--name", "Updated"] +); +define_cli_auth_test!( + test_delete_roast_requires_authentication, + &["roast", "delete", "--id", "some-id"] +); +define_cli_list_test!( + test_list_roasts_works_without_authentication, + &["roast", "list"] +); #[test] fn test_add_roast_with_authentication() { @@ -78,23 +81,6 @@ fn test_add_roast_with_authentication() { assert!(roast["id"].is_i64(), "Should have an ID"); } -#[test] -fn test_list_roasts_works_without_authentication() { - let _ = server_info(); - - let output = run_brewlog(&["roast", "list"], &[]); - - assert!( - output.status.success(), - "roast list should work without auth" - ); - - let stdout = String::from_utf8_lossy(&output.stdout); - let roasts: Value = serde_json::from_str(&stdout).expect("Should output valid JSON array"); - - assert!(roasts.is_array(), "Should return an array"); -} - #[test] fn test_list_roasts_shows_added_roast() { let token = create_token("test-list-roasts"); @@ -156,21 +142,6 @@ fn test_list_roasts_shows_added_roast() { ); } -#[test] -fn test_update_roast_requires_authentication() { - let _ = server_info(); - - let output = run_brewlog( - &["roast", "update", "--id", "123", "--name", "Updated"], - &[], - ); - - assert!( - !output.status.success(), - "roast update without auth should fail" - ); -} - #[test] fn test_update_roast_with_authentication() { let token = create_token("test-update-roast"); @@ -196,15 +167,3 @@ fn test_update_roast_with_authentication() { let updated_roast: Value = serde_json::from_slice(&output.stdout).unwrap(); assert_eq!(updated_roast["name"], "Updated Name"); } - -#[test] -fn test_delete_roast_requires_authentication() { - let _ = server_info(); - - let output = run_brewlog(&["roast", "delete", "--id", "some-id"], &[]); - - assert!( - !output.status.success(), - "roast delete without auth should fail" - ); -} diff --git a/tests/cli/test_macros.rs b/tests/cli/test_macros.rs new file mode 100644 index 0000000..330ef6f --- /dev/null +++ b/tests/cli/test_macros.rs @@ -0,0 +1,40 @@ +/// Generates a test that asserts a CLI command fails without authentication. +macro_rules! define_cli_auth_test { + ($name:ident, $args:expr) => { + #[test] + fn $name() { + let _ = crate::helpers::server_info(); + let output = crate::helpers::run_brewlog($args, &[]); + assert!( + !output.status.success(), + "{} should require authentication", + stringify!($name) + ); + } + }; +} + +/// Generates a test that asserts a CLI list command succeeds without +/// authentication and returns a valid JSON array. +macro_rules! define_cli_list_test { + ($name:ident, $args:expr) => { + #[test] + fn $name() { + let _ = crate::helpers::server_info(); + let output = crate::helpers::run_brewlog($args, &[]); + assert!( + output.status.success(), + "{} should succeed: {}", + stringify!($name), + String::from_utf8_lossy(&output.stderr) + ); + let stdout = String::from_utf8_lossy(&output.stdout); + let items: serde_json::Value = + serde_json::from_str(&stdout).expect("Should output valid JSON"); + assert!(items.is_array(), "Should return a JSON array"); + } + }; +} + +pub(crate) use define_cli_auth_test; +pub(crate) use define_cli_list_test; diff --git a/tests/cli/tokens_cli.rs b/tests/cli/tokens_cli.rs index 2866f01..c1455c6 100644 --- a/tests/cli/tokens_cli.rs +++ b/tests/cli/tokens_cli.rs @@ -1,16 +1,11 @@ -use crate::helpers::{create_token, run_brewlog, server_info}; +use crate::helpers::{create_token, run_brewlog}; +use crate::test_macros::define_cli_auth_test; -#[test] -fn test_list_tokens_requires_authentication() { - let _ = server_info(); - - let output = run_brewlog(&["token", "list"], &[]); - - assert!( - !output.status.success(), - "token list without auth should fail" - ); -} +define_cli_auth_test!(test_list_tokens_requires_authentication, &["token", "list"]); +define_cli_auth_test!( + test_revoke_token_requires_authentication, + &["token", "revoke", "--id", "1"] +); #[test] fn test_list_tokens_with_authentication() { @@ -30,18 +25,6 @@ fn test_list_tokens_with_authentication() { ); } -#[test] -fn test_revoke_token_requires_authentication() { - let _ = server_info(); - - let output = run_brewlog(&["token", "revoke", "--id", "1"], &[]); - - assert!( - !output.status.success(), - "token revoke without auth should fail" - ); -} - #[test] fn test_revoke_token_with_authentication() { let token = create_token("test-revoke-token");