#[cfg(feature = "macros")]
mod macro_tests {
use hexser::prelude::*;
#[test]
fn test_hex_aggregate_derive() {
#[derive(HexAggregate, HexEntity)]
struct TestAggregate {
id: String,
value: i32,
}
let agg = TestAggregate {
id: String::from("test"),
value: 42,
};
assert!(agg.check_invariants().is_ok());
}
#[test]
fn test_hex_domain_derive() {
#[derive(HexDomain)]
struct TestDomain {
name: String,
}
let info = TestDomain::node_info();
assert_eq!(info.layer, hexser::graph::Layer::Domain);
}
#[test]
fn test_hex_adapter_derive() {
#[derive(HexAdapter)]
struct TestAdapter;
let info = TestAdapter::node_info();
assert_eq!(info.layer, hexser::graph::Layer::Adapter);
}
#[test]
fn test_derive_macros_compile() {
#[derive(HexDomain)]
struct DomainItem;
#[derive(HexAdapter)]
struct AdapterItem;
#[derive(HexEntity)]
struct EntityItem {
id: String,
}
assert!(true);
}
#[test]
fn test_hex_entity_derive_alias() {
#[derive(HexEntity)]
struct User {
id: String,
email: String,
}
let user = User {
id: String::from("user-001"),
email: String::from("test@example.com"),
};
let _id_type: <User as hexser::HexEntity>::Id = user.id;
assert!(true);
}
#[test]
fn test_hex_entity_derive_with_custom_id_type() {
#[derive(HexEntity)]
struct Order {
id: u64,
total: f64,
}
let order = Order {
id: 12345,
total: 99.99,
};
let id: <Order as hexser::domain::HexEntity>::Id = order.id;
assert_eq!(id, 12345);
}
#[test]
fn test_hex_value_item_derive_default_validation() {
#[derive(HexValueItem, Clone)]
struct Email(String);
let email = Email(String::from("test@example.com"));
assert!(email.validate().is_ok());
}
#[test]
fn test_hex_value_item_derive_custom_validation() {
#[derive(Clone)]
struct ValidatedEmail(String);
impl hexser::domain::HexValueItem for ValidatedEmail {
fn validate(&self) -> hexser::HexResult<()> {
if self.0.contains('@') {
Ok(())
} else {
Err(hexser::Hexserror::validation("Email must contain @"))
}
}
}
let valid = ValidatedEmail(String::from("test@example.com"));
assert!(valid.validate().is_ok());
let invalid = ValidatedEmail(String::from("invalid"));
assert!(invalid.validate().is_err());
}
#[test]
fn test_hex_entity_works_with_qualified_path() {
#[derive(hexser::HexEntity)]
struct QualifiedEntity {
id: String,
}
#[derive(HexEntity)]
struct PreludeEntity {
id: String,
}
let e1 = QualifiedEntity {
id: String::from("1"),
};
let e2 = PreludeEntity {
id: String::from("2"),
};
let _: <QualifiedEntity as hexser::domain::HexEntity>::Id = e1.id;
let _: <PreludeEntity as hexser::domain::HexEntity>::Id = e2.id;
assert!(true);
}
}