use rstest::*;
use open_lark::service::im::v1::message::*;
use open_lark::core::validation::*;
#[cfg(test)]
mod validation_integration_tests {
use super::*;
#[test]
fn test_create_message_request_body_builder_validates_uuid_length() {
let long_uuid = "a".repeat(100);
let body = CreateMessageRequestBody::builder()
.receive_id("ou_test")
.msg_type("text")
.content(r#"{"text":"test"}"#)
.uuid(&long_uuid)
.build();
assert_eq!(body.uuid.unwrap().len(), 50);
assert_eq!(body.uuid.unwrap(), &long_uuid[..50]);
}
#[test]
fn test_create_message_request_body_builder_validates_required_fields() {
let body = CreateMessageRequestBody::builder()
.receive_id("") .msg_type("") .content("") .build();
assert_eq!(body.receive_id, "");
assert_eq!(body.msg_type, "");
assert_eq!(body.content, "");
}
#[test]
fn test_create_message_request_body_builder_validates_text_message_size() {
let large_content = r#"{"text":""#.to_owned() + &"a".repeat(160 * 1024) + r#""}"#;
let body = CreateMessageRequestBody::builder()
.receive_id("ou_test")
.msg_type("text")
.content(&large_content)
.build();
assert!(body.content.len() > 150 * 1024);
}
#[test]
fn test_create_message_request_body_builder_validates_post_message_size() {
let large_content = r#"{"post":{"zh_cn":{"title":""#.to_owned() + &"a".repeat(35 * 1024) + r#""}}}"#;
let body = CreateMessageRequestBody::builder()
.receive_id("ou_test")
.msg_type("post")
.content(&large_content)
.build();
assert!(body.content.len() > 30 * 1024);
}
#[test]
fn test_validation_functions_directly() {
let long_string = "a".repeat(100);
let validated = validate_string_length(long_string.clone(), 50, "test");
assert_eq!(validated.len(), 50);
assert_eq!(validated, &long_string[..50]);
assert!(!openlark_core::Validatable::is_empty_trimmed(&"non-empty"));
assert!(openlark_core::Validatable::is_empty_trimmed(&""));
assert!(validate_content_size("small content", 100, "test"));
assert!(!validate_content_size("a".repeat(200), 100, "test"));
}
#[test]
fn test_validation_result_enum() {
let valid = ValidationResult::Valid;
assert!(valid.is_valid());
assert!(valid.is_strictly_valid());
assert!(valid.error().is_none());
let warning = ValidationResult::Warning("test warning".to_string());
assert!(warning.is_valid());
assert!(!warning.is_strictly_valid());
assert_eq!(warning.error(), Some("test warning"));
let invalid = ValidationResult::Invalid("test error".to_string());
assert!(!invalid.is_valid());
assert!(!invalid.is_strictly_valid());
assert_eq!(invalid.error(), Some("test error"));
}
}