use serde_json::json;
use tap_msg::didcomm::PlainMessage;
use tap_node::message::processor::{PlainMessageProcessor, ValidationPlainMessageProcessor};
fn create_test_message(
id: &str,
typ: &str,
from: Option<&str>,
to: Option<Vec<&str>>,
) -> PlainMessage {
let from_did = from.unwrap_or("did:example:default_sender").to_string();
let to_dids = to
.unwrap_or_else(|| vec!["did:example:default_recipient"])
.iter()
.map(|&s| s.to_string())
.collect();
PlainMessage {
id: id.to_string(),
typ: typ.to_string(),
type_: typ.to_string(),
body: json!({"test": "body"}),
from: from_did,
to: to_dids,
created_time: Some(chrono::Utc::now().timestamp() as u64),
expires_time: None,
thid: None,
pthid: None,
attachments: None,
from_prior: None,
extra_headers: Default::default(),
}
}
#[tokio::test]
async fn test_validation_processor_accepts_valid_messages() {
let processor = ValidationPlainMessageProcessor;
let message = create_test_message(
"test-123",
"https://tap.rsvp/schema/1.0#Transfer",
Some("did:example:sender"),
Some(vec!["did:example:recipient"]),
);
let result = processor.process_incoming(message).await;
assert!(result.is_ok());
let processed = result.unwrap();
assert!(processed.is_some());
}
#[tokio::test]
async fn test_validation_processor_rejects_empty_id() {
let processor = ValidationPlainMessageProcessor;
let message = create_test_message(
"", "https://tap.rsvp/schema/1.0#Transfer",
Some("did:example:sender"),
Some(vec!["did:example:recipient"]),
);
let result = processor.process_incoming(message).await;
assert!(result.is_ok());
let processed = result.unwrap();
assert!(processed.is_none());
}
#[tokio::test]
async fn test_validation_processor_rejects_empty_type() {
let processor = ValidationPlainMessageProcessor;
let message = create_test_message(
"test-123",
"", Some("did:example:sender"),
Some(vec!["did:example:recipient"]),
);
let result = processor.process_incoming(message).await;
assert!(result.is_ok());
let processed = result.unwrap();
assert!(processed.is_none());
}
#[tokio::test]
async fn test_validation_processor_rejects_invalid_from_did() {
let processor = ValidationPlainMessageProcessor;
let message = create_test_message(
"test-123",
"https://tap.rsvp/schema/1.0#Transfer",
Some("invalid-did-format"), Some(vec!["did:example:recipient"]),
);
let result = processor.process_incoming(message).await;
assert!(result.is_ok());
let processed = result.unwrap();
assert!(processed.is_none());
}
#[tokio::test]
async fn test_validation_processor_rejects_invalid_to_did() {
let processor = ValidationPlainMessageProcessor;
let message = create_test_message(
"test-123",
"https://tap.rsvp/schema/1.0#Transfer",
Some("did:example:sender"),
Some(vec!["invalid-did-format"]), );
let result = processor.process_incoming(message).await;
assert!(result.is_ok());
let processed = result.unwrap();
assert!(processed.is_none());
}
#[tokio::test]
async fn test_validation_processor_accepts_valid_did_formats() {
let processor = ValidationPlainMessageProcessor;
let message = create_test_message(
"test-123",
"https://tap.rsvp/schema/1.0#Transfer",
Some("did:key:z6MkhaXgBZDvotDkL5257faiztiGiC2QtKLGpbnnEGta2doK"),
Some(vec![
"did:key:z6MkiTBz1ymuepAQ4HEHYSF1H8quG5GLVVQR3djdX3mDooWp",
]),
);
let result = processor.process_incoming(message).await;
assert!(result.is_ok());
let processed = result.unwrap();
assert!(processed.is_some());
}