1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
#[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(())
    }
}