Skip to main content

omni_dev/cli/atlassian/
mod.rs

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