enigma-packet 0.1.0

Canonical message packet format + serialization for Enigma secure messaging
Documentation
use crate::tests::{
    attachment_chunk_message, attachment_end_message, attachment_init_message, text_message,
};
use crate::types::{AttachmentMeta, MessageMeta};
use crate::validate_message;

#[test]
fn validation_passes_for_text_message() {
    let message = text_message();
    assert!(validate_message(&message).is_ok());
}

#[test]
fn validation_rejects_empty_sender() {
    let mut message = text_message();
    message.sender.clear();
    assert!(validate_message(&message).is_err());
}

#[test]
fn validation_rejects_empty_receiver() {
    let mut message = text_message();
    message.receiver.clear();
    assert!(validate_message(&message).is_err());
}

#[test]
fn validation_rejects_attachment_init_payload() {
    let mut message = attachment_init_message();
    message.payload = vec![1];
    assert!(validate_message(&message).is_err());
}

#[test]
fn validation_rejects_chunk_count_mismatch() {
    let mut message = attachment_init_message();
    if let MessageMeta::AttachmentInit(meta) = &mut message.meta {
        meta.chunk_count = 3;
    }
    assert!(validate_message(&message).is_err());
}

#[test]
fn validation_rejects_chunk_payload_empty() {
    let mut message = attachment_chunk_message(0);
    message.payload.clear();
    assert!(validate_message(&message).is_err());
}

#[test]
fn validation_rejects_end_payload_non_empty() {
    let mut message = attachment_end_message();
    message.payload = vec![1];
    assert!(validate_message(&message).is_err());
}

#[test]
fn validation_rejects_file_kind_without_filename() {
    let mut message = attachment_init_message();
    if let MessageMeta::AttachmentInit(AttachmentMeta { filename, .. }) = &mut message.meta {
        *filename = None;
    }
    assert!(validate_message(&message).is_err());
}