hyperlane-cli 0.1.10

A command-line tool for Hyperlane framework.
use std::str::FromStr;

use crate::*;

#[test]
fn test_template_config_new() {
    let config: TemplateConfig =
        TemplateConfig::new(TemplateType::Controller, "test".to_string(), None);
    assert_eq!(config.template_type, TemplateType::Controller);
    assert_eq!(config.component_name, "test");
    assert_eq!(config.model_sub_type, None);
    assert_eq!(config.base_directory, "./application");
}

#[test]
fn test_template_config_with_model_sub_type() {
    let config: TemplateConfig = TemplateConfig::new(
        TemplateType::Model,
        "test".to_string(),
        Some(ModelSubType::Request),
    );
    assert_eq!(config.template_type, TemplateType::Model);
    assert_eq!(config.model_sub_type, Some(ModelSubType::Request));
}

#[test]
fn test_template_config_clone() {
    let config: TemplateConfig =
        TemplateConfig::new(TemplateType::Service, "test".to_string(), None);
    let cloned: TemplateConfig = config.clone();
    assert_eq!(cloned.template_type, config.template_type);
    assert_eq!(cloned.component_name, config.component_name);
    assert_eq!(cloned.model_sub_type, config.model_sub_type);
    assert_eq!(cloned.base_directory, config.base_directory);
}

#[test]
fn test_template_config_debug() {
    let config: TemplateConfig =
        TemplateConfig::new(TemplateType::Controller, "test".to_string(), None);
    let debug_str: String = format!("{config:?}");
    assert!(debug_str.contains("Controller"));
    assert!(debug_str.contains("test"));
}

#[test]
fn test_template_error_display() {
    let error1: TemplateError = TemplateError::InvalidModelSubType("bad".to_string());
    assert!(error1.to_string().contains("bad"));

    let error2: TemplateError = TemplateError::DirectoryExists("/path".to_string());
    assert!(error2.to_string().contains("/path"));
}

#[test]
fn test_template_error_from_io() {
    let io_error: std::io::Error = std::io::Error::new(std::io::ErrorKind::NotFound, "test");
    let template_error: TemplateError = TemplateError::from(io_error);
    assert!(template_error.to_string().contains("IO error"));
}

#[test]
fn test_template_error_debug() {
    let error: TemplateError = TemplateError::InvalidModelSubType("test".to_string());
    let debug_str: String = format!("{error:?}");
    assert!(debug_str.contains("InvalidModelSubType"));
}

#[test]
fn test_template_type_equality() {
    assert_eq!(TemplateType::Controller, TemplateType::Controller);
    assert_ne!(TemplateType::Controller, TemplateType::Service);
}

#[test]
fn test_model_sub_type_equality() {
    assert_eq!(ModelSubType::Request, ModelSubType::Request);
    assert_ne!(ModelSubType::Request, ModelSubType::Response);
}

#[test]
fn test_template_type_debug() {
    let ty: TemplateType = TemplateType::Controller;
    let debug_str: String = format!("{ty:?}");
    assert_eq!(debug_str, "Controller");
}

#[test]
fn test_model_sub_type_debug() {
    let ty: ModelSubType = ModelSubType::Application;
    let debug_str: String = format!("{ty:?}");
    assert_eq!(debug_str, "Application");
}

#[test]
fn test_all_template_types() {
    let _ = TemplateType::Controller;
    let _ = TemplateType::Domain;
    let _ = TemplateType::Exception;
    let _ = TemplateType::Mapper;
    let _ = TemplateType::Model;
    let _ = TemplateType::Repository;
    let _ = TemplateType::Service;
    let _ = TemplateType::Utils;
    let _ = TemplateType::View;
}

#[test]
fn test_all_model_sub_types() {
    let _ = ModelSubType::Application;
    let _ = ModelSubType::Request;
    let _ = ModelSubType::Response;
}

#[test]
fn test_parse_template_type_valid() {
    assert_eq!(
        TemplateType::from_str("controller").ok(),
        Some(TemplateType::Controller)
    );
    assert_eq!(
        TemplateType::from_str("Controller").ok(),
        Some(TemplateType::Controller)
    );
    assert_eq!(
        TemplateType::from_str("CONTROLLER").ok(),
        Some(TemplateType::Controller)
    );
    assert_eq!(
        TemplateType::from_str("domain").ok(),
        Some(TemplateType::Domain)
    );
    assert_eq!(
        TemplateType::from_str("exception").ok(),
        Some(TemplateType::Exception)
    );
    assert_eq!(
        TemplateType::from_str("mapper").ok(),
        Some(TemplateType::Mapper)
    );
    assert_eq!(
        TemplateType::from_str("model").ok(),
        Some(TemplateType::Model)
    );
    assert_eq!(
        TemplateType::from_str("repository").ok(),
        Some(TemplateType::Repository)
    );
    assert_eq!(
        TemplateType::from_str("service").ok(),
        Some(TemplateType::Service)
    );
    assert_eq!(
        TemplateType::from_str("utils").ok(),
        Some(TemplateType::Utils)
    );
    assert_eq!(
        TemplateType::from_str("view").ok(),
        Some(TemplateType::View)
    );
}

#[test]
fn test_parse_template_type_invalid() {
    assert_eq!(TemplateType::from_str("invalid").ok(), None);
    assert_eq!(TemplateType::from_str("").ok(), None);
    assert_eq!(TemplateType::from_str("unknown").ok(), None);
}

#[test]
fn test_parse_model_sub_type_valid() {
    assert_eq!(
        ModelSubType::from_str("application").ok(),
        Some(ModelSubType::Application)
    );
    assert_eq!(
        ModelSubType::from_str("Application").ok(),
        Some(ModelSubType::Application)
    );
    assert_eq!(
        ModelSubType::from_str("APPLICATION").ok(),
        Some(ModelSubType::Application)
    );
    assert_eq!(
        ModelSubType::from_str("request").ok(),
        Some(ModelSubType::Request)
    );
    assert_eq!(
        ModelSubType::from_str("response").ok(),
        Some(ModelSubType::Response)
    );
}

#[test]
fn test_parse_model_sub_type_invalid() {
    assert_eq!(ModelSubType::from_str("invalid").ok(), None);
    assert_eq!(ModelSubType::from_str("").ok(), None);
    assert_eq!(ModelSubType::from_str("unknown").ok(), None);
}