Skip to main content

omni_dev/atlassian/
error.rs

1//! Error types for Atlassian operations.
2
3use thiserror::Error;
4
5/// Errors that can occur during Atlassian operations.
6#[derive(Error, Debug)]
7pub enum AtlassianError {
8    /// Atlassian credentials are not configured.
9    #[error("Atlassian credentials not configured. Run `omni-dev atlassian auth login`")]
10    CredentialsNotFound,
11
12    /// An Atlassian API request failed.
13    #[error("Atlassian API request failed: HTTP {status}: {body}")]
14    ApiRequestFailed {
15        /// HTTP status code.
16        status: u16,
17        /// Response body text.
18        body: String,
19    },
20
21    /// The JFM document is invalid or malformed.
22    #[error("Invalid JFM document: {0}")]
23    InvalidDocument(String),
24
25    /// An error occurred during ADF conversion.
26    #[error("ADF conversion error: {0}")]
27    ConversionError(String),
28}
29
30#[cfg(test)]
31mod tests {
32    use super::*;
33
34    #[test]
35    fn credentials_not_found_display() {
36        let err = AtlassianError::CredentialsNotFound;
37        assert!(err.to_string().contains("not configured"));
38    }
39
40    #[test]
41    fn api_request_failed_display() {
42        let err = AtlassianError::ApiRequestFailed {
43            status: 404,
44            body: "Not Found".to_string(),
45        };
46        let msg = err.to_string();
47        assert!(msg.contains("404"));
48        assert!(msg.contains("Not Found"));
49    }
50
51    #[test]
52    fn invalid_document_display() {
53        let err = AtlassianError::InvalidDocument("bad format".to_string());
54        assert!(err.to_string().contains("bad format"));
55    }
56
57    #[test]
58    fn conversion_error_display() {
59        let err = AtlassianError::ConversionError("oops".to_string());
60        assert!(err.to_string().contains("oops"));
61    }
62}