Skip to main content

omni_dev/cli/atlassian/
mod.rs

1//! Atlassian CLI commands for JIRA and Confluence.
2
3pub(crate) mod auth;
4pub(crate) mod confirm;
5pub mod confluence;
6pub(crate) mod convert;
7pub(crate) mod format;
8pub(crate) mod helpers;
9pub mod jira;
10
11use anyhow::Result;
12use clap::{Parser, Subcommand};
13
14/// Atlassian: JIRA and Confluence operations.
15#[derive(Parser)]
16pub struct AtlassianCommand {
17    /// The Atlassian subcommand to execute.
18    #[command(subcommand)]
19    pub command: AtlassianSubcommands,
20}
21
22/// Atlassian subcommands.
23#[derive(Subcommand)]
24pub enum AtlassianSubcommands {
25    /// JIRA issue management, search, agile boards, and more.
26    Jira(jira::JiraCommand),
27    /// Confluence page management, search, and more.
28    Confluence(confluence::ConfluenceCommand),
29    /// Converts between JFM markdown and ADF JSON.
30    Convert(convert::ConvertCommand),
31    /// Manages Atlassian Cloud credentials.
32    Auth(auth::AuthCommand),
33}
34
35impl AtlassianCommand {
36    /// Executes the Atlassian command.
37    pub async fn execute(self) -> Result<()> {
38        match self.command {
39            AtlassianSubcommands::Jira(cmd) => cmd.execute().await,
40            AtlassianSubcommands::Confluence(cmd) => cmd.execute().await,
41            AtlassianSubcommands::Convert(cmd) => cmd.execute(),
42            AtlassianSubcommands::Auth(cmd) => cmd.execute().await,
43        }
44    }
45}
46
47#[cfg(test)]
48mod tests {
49    use super::*;
50
51    #[test]
52    fn atlassian_subcommands_jira_variant() {
53        let cmd = AtlassianCommand {
54            command: AtlassianSubcommands::Jira(jira::JiraCommand {
55                command: jira::JiraSubcommands::Edit(jira::edit::EditCommand {
56                    key: "PROJ-1".to_string(),
57                }),
58            }),
59        };
60        assert!(matches!(cmd.command, AtlassianSubcommands::Jira(_)));
61    }
62
63    #[test]
64    fn atlassian_subcommands_confluence_variant() {
65        let cmd = AtlassianCommand {
66            command: AtlassianSubcommands::Confluence(confluence::ConfluenceCommand {
67                command: confluence::ConfluenceSubcommands::Edit(confluence::edit::EditCommand {
68                    id: "12345".to_string(),
69                }),
70            }),
71        };
72        assert!(matches!(cmd.command, AtlassianSubcommands::Confluence(_)));
73    }
74
75    #[test]
76    fn atlassian_subcommands_auth_variant() {
77        let cmd = AtlassianCommand {
78            command: AtlassianSubcommands::Auth(auth::AuthCommand {
79                command: auth::AuthSubcommands::Login(auth::LoginCommand),
80            }),
81        };
82        assert!(matches!(cmd.command, AtlassianSubcommands::Auth(_)));
83    }
84
85    #[test]
86    fn atlassian_subcommands_convert_variant() {
87        let cmd = AtlassianCommand {
88            command: AtlassianSubcommands::Convert(convert::ConvertCommand {
89                command: convert::ConvertSubcommands::FromAdf(convert::FromAdfCommand {
90                    file: None,
91                    strip_local_ids: false,
92                }),
93            }),
94        };
95        assert!(matches!(cmd.command, AtlassianSubcommands::Convert(_)));
96    }
97}