carbone-sdk-rust 1.0.0

Generate documents with Carbone, using templates and JSON data-set. Create invoices, reports, certificates, contracts, financial statements, documents like Word files, Excel sheets, CSVs, PowerPoint slides, and more. The template can be a DOCX, PPTX, XLSX, CSV, XML, HTML and many formats.
Documentation
use carbone_sdk_rust::config::Config;
use carbone_sdk_rust::errors::CarboneError;
use carbone_sdk_rust::types::ApiVersion;

#[cfg(test)]
mod tests {

    use super::*;
    use carbone_sdk_rust::config::CARBONE_API_URL;
    use carbone_sdk_rust::config::CARBONE_API_VERSION;
    use std::str::FromStr;

    #[test]
    fn test_clone() -> Result<(), CarboneError> {
        let config: Config = Default::default();

        let cloned = config.clone();

        assert_eq!(config, cloned);

        Ok(())
    }

    #[test]
    fn test_api_url_not_given() -> Result<(), CarboneError> {
        let api_version = ApiVersion::new("2".to_string())?;

        let result = Config::new("".to_string(), 6, api_version);

        let expected_error =
            "api_url: Validation error: url [{\"value\": String(\"\")}]".to_string();

        assert!(result.is_err());
        assert_eq!(expected_error, result.unwrap_err().to_string());

        Ok(())
    }

    #[test]
    fn test_default() -> Result<(), CarboneError> {
        let config: Config = Default::default();

        let timeout: u64 = 60;
        let api_url = CARBONE_API_URL.to_string();
        let api_version = ApiVersion::new(CARBONE_API_VERSION.to_string())?;

        assert_eq!(config.api_timeout, timeout);
        assert_eq!(config.api_url, api_url);
        assert_eq!(config.api_version, api_version);

        Ok(())
    }

    #[test]
    fn test_from_str() -> Result<(), CarboneError> {
        let config = Config::from_str(
            r#"{
            "apiTimeout": 4,
            "apiUrl": "http://127.0.0.1",
            "apiVersion" : "2"
        }"#,
        )?;

        let api_version = ApiVersion::new("2".to_string())?;
        let expected = Config::new("http://127.0.0.1".to_string(), 4, api_version)?;

        assert_eq!(expected, config);

        Ok(())
    }

    #[test]
    fn test_from_str_bad_format_given() {
        let result = Config::from_str(
            r#"{
            "apiTimeout": 4,
            "apiUr" "http://127.0.0.1",
            "apiVersion" : "2"
        }"#,
        );

        let expected_error =
            "CarboneSDK FromStr JsonParseError: expected `:` at line 3 column 21".to_string();

        assert!(result.is_err());
        assert_eq!(expected_error, result.unwrap_err().to_string());
    }

    #[test]
    fn test_from_file() -> Result<(), CarboneError> {
        let config = Config::from_file("tests/config.test.json")?;

        let api_version = ApiVersion::new("2".to_string())?;
        let expected = Config::new("http://127.0.0.1:57780".to_string(), 4, api_version)?;

        assert_eq!(expected, config);

        Ok(())
    }

    #[test]
    fn test_from_file_wrong_path_given() -> Result<(), CarboneError> {
        let result = Config::from_file("tests/bad/path/config.test.json");

        let expected_error =
            "Carbone SDK error: file \"tests/bad/path/config.test.json\" not found".to_string();

        assert!(result.is_err());
        assert_eq!(expected_error, result.unwrap_err().to_string());

        Ok(())
    }
}