From 4e6c3b4a2fa2c0c19ab9e1202c3f010883d32426 Mon Sep 17 00:00:00 2001 From: atlas Date: Fri, 9 Oct 2026 12:05:35 +0200 Subject: [PATCH] hive-forge: pr create --draft: extract draft_warning so the warning decision is tested --- hive-forge/src/verbs/pr_create.rs | 31 +++++++++++++++++++++---------- 1 file changed, 21 insertions(+), 10 deletions(-) diff --git a/hive-forge/src/verbs/pr_create.rs b/hive-forge/src/verbs/pr_create.rs index f427febc..18c16627 100644 --- a/hive-forge/src/verbs/pr_create.rs +++ b/hive-forge/src/verbs/pr_create.rs @@ -89,8 +89,8 @@ pub struct Args { /// token missing/invalid), an unresolved `--label` name, and any I/O /// error from writing the PR URL to stdout. pub fn run(client: &Client, args: Args) -> Result<()> { - if args.draft { - eprintln!("{DRAFT_WARNING}"); + if let Some(w) = draft_warning(&args) { + eprintln!("{w}"); } let body = body::resolve(args.body.as_deref(), args.body_file.as_deref())?.unwrap_or_default(); if args.agit { @@ -387,6 +387,10 @@ fn remote_content(line: &str) -> Option<&str> { const DRAFT_WARNING: &str = "warning: --draft is not supported by this forge; opening a normal PR"; +fn draft_warning(args: &Args) -> Option<&'static str> { + args.draft.then_some(DRAFT_WARNING) +} + fn is_remote_line(line: &str) -> bool { remote_content(line).is_some() } @@ -401,17 +405,24 @@ fn is_pr_hint_opener(line: &str) -> bool { #[cfg(test)] mod tests { use super::*; + use clap::Parser; + + #[derive(clap::Parser)] + struct Cli { + #[command(flatten)] + args: Args, + } #[test] - fn draft_flag_parses() { - #[derive(clap::Parser)] - struct Cli { - #[command(flatten)] - args: Args, - } - use clap::Parser; + fn draft_flag_yields_warning() { let cli = Cli::parse_from(["x", "--title", "t", "--head", "h", "--draft"]); - assert!(cli.args.draft); + assert_eq!(draft_warning(&cli.args), Some(DRAFT_WARNING)); + } + + #[test] + fn no_draft_flag_yields_no_warning() { + let cli = Cli::parse_from(["x", "--title", "t", "--head", "h"]); + assert_eq!(draft_warning(&cli.args), None); } #[test]