libikarus 0.1.14

The core functionality of Ikarus wrapped neatly in a rust library
Documentation
#[cfg(test)]
pub mod tests {
    use crate::objects::entity::{EntityValue, ToggleValue};
    use crate::objects::property::{PropertyScope, PropertyType};
    use crate::persistence::project::Project;
    use crate::tests::{new_blueprint, new_entity, new_property};
    use std::collections::HashSet;

    #[test]
    pub fn property_type_fetching() -> Result<(), Box<dyn std::error::Error>> {
        let project = Project::open_in_memory()?;

        let blueprint = new_blueprint(&project);
        let entity = new_entity(&project, HashSet::from([&blueprint]));

        for scope in [
            PropertyScope::Blueprint(blueprint.clone()),
            PropertyScope::Entity(entity.clone()),
        ] {
            let property = new_property(&project, scope.clone(), PropertyType::Toggle, None, None);
            assert_eq!(property.r#type()?, PropertyType::Toggle);
            assert_eq!(
                property.settings()?,
                PropertyType::Toggle.default_settings()
            );
            assert_eq!(
                property.default_value()?,
                PropertyType::Toggle.default_value()
            );

            let property = new_property(&project, scope.clone(), PropertyType::Number, None, None);
            assert_eq!(property.r#type()?, PropertyType::Number);
            assert_eq!(
                property.settings()?,
                PropertyType::Number.default_settings()
            );
            assert_eq!(
                property.default_value()?,
                PropertyType::Number.default_value()
            );

            let property = new_property(&project, scope.clone(), PropertyType::Text, None, None);
            assert_eq!(property.r#type()?, PropertyType::Text);
            assert_eq!(property.settings()?, PropertyType::Text.default_settings());
            assert_eq!(
                property.default_value()?,
                PropertyType::Text.default_value()
            );
        }

        Ok(())
    }

    #[test]
    pub fn property_default_value_changing() -> Result<(), Box<dyn std::error::Error>> {
        let project = Project::open_in_memory()?;

        let blueprint = new_blueprint(&project);

        let property = new_property(
            &project,
            PropertyScope::Blueprint(blueprint.clone()),
            PropertyType::Toggle,
            None,
            None,
        );

        property.set_default_value(&EntityValue::Toggle(ToggleValue::True))?;

        assert_eq!(
            property.default_value()?,
            EntityValue::Toggle(ToggleValue::True)
        );

        Ok(())
    }
}