bacnet-server 0.11.0

BACnet server: APDU dispatch and service handlers
Documentation
use super::*;

use bacnet_objects::schedule::ScheduleObject;
use bacnet_objects::traits::BACnetObject;
use bacnet_types::constructed::BACnetObjectPropertyReference;

#[tokio::test]
async fn live_schedule_retains_actual_life_safety_status_delta() {
    let mut schedule = ScheduleObject::new(1, "schedule", PropertyValue::Boolean(false)).unwrap();
    schedule.add_object_property_reference(BACnetObjectPropertyReference::new(
        point_oid(),
        PropertyIdentifier::OUT_OF_SERVICE.to_raw(),
    ));
    schedule
        .write_property(
            PropertyIdentifier::SCHEDULE_DEFAULT,
            None,
            PropertyValue::Boolean(true),
            None,
        )
        .unwrap();

    let mut db = life_safety_db();
    db.add(Box::new(schedule)).unwrap();
    let db = Arc::new(RwLock::new(db));

    let changes = crate::schedule::tick_schedules_with_life_safety_cov(&db, 0).await;

    assert_eq!(
        changes,
        vec![crate::life_safety_cov::LifeSafetyCovChange {
            object_identifier: point_oid(),
            changed_properties: vec![PropertyIdentifier::STATUS_FLAGS],
        }]
    );
    assert_eq!(
        db.read()
            .await
            .get(&point_oid())
            .unwrap()
            .read_property(PropertyIdentifier::OUT_OF_SERVICE, None)
            .unwrap(),
        PropertyValue::Boolean(true)
    );
}