rustvello-mongo 0.1.3

MongoDB backend implementations for Rustvello
Documentation
use chrono::Utc;
use rustvello_core::error::RustvelloError;
use rustvello_proto::identifiers::RunnerId;
use rustvello_proto::status::{InvocationStatus, InvocationStatusRecord};

use super::{deserialize_record, serialize_record, CC_COL, HEARTBEAT_COL, STATUS_COL, WAITERS_COL};

#[test]
fn serialize_deserialize_record_roundtrip() {
    let record = InvocationStatusRecord {
        status: InvocationStatus::Running,
        timestamp: Utc::now(),
        runner_id: Some(RunnerId::new()),
    };
    let json = serialize_record(&record).unwrap();
    let decoded = deserialize_record(&json).unwrap();
    assert_eq!(decoded.status, record.status);
    assert!(decoded.runner_id.is_some());
}

#[test]
fn deserialize_bad_json_returns_serialization_error() {
    let result = deserialize_record("{invalid}");
    assert!(result.is_err());
    assert!(matches!(
        result.unwrap_err(),
        RustvelloError::Serialization { .. }
    ));
}

#[test]
fn collection_names_are_distinct() {
    let cols = [STATUS_COL, WAITERS_COL, CC_COL, HEARTBEAT_COL];
    for (i, a) in cols.iter().enumerate() {
        for (j, b) in cols.iter().enumerate() {
            if i != j {
                assert_ne!(a, b, "collection names at {i} and {j} collide");
            }
        }
    }
}