#[cfg(test)]
pub mod tests {
use crate::objects::object::{ObjectScope, ObjectType};
use crate::persistence::project::Project;
use crate::tests::{one_object_of_each_type, INFO, NAME};
use crate::types::location::FolderPosition;
#[test]
fn object_creation() -> Result<(), Box<dyn std::error::Error>> {
let project = Project::open_in_memory()?;
let _ = one_object_of_each_type(&project);
Ok(())
}
#[test]
fn object_exists() -> Result<(), Box<dyn std::error::Error>> {
let project = Project::open_in_memory()?;
let objects = one_object_of_each_type(&project);
for object in objects {
assert!(object.exists()?);
}
Ok(())
}
#[test]
fn object_deletion() -> Result<(), Box<dyn std::error::Error>> {
let project = Project::open_in_memory()?;
let objects = one_object_of_each_type(&project);
for object in objects {
assert!(object.exists()?);
let cloned = object.clone();
object.delete()?;
assert!(!cloned.exists()?);
}
Ok(())
}
#[test]
fn object_location_fetching() -> Result<(), Box<dyn std::error::Error>> {
let project = Project::open_in_memory()?;
let objects = one_object_of_each_type(&project);
for object in objects {
let location = object.location()?;
assert!(location.parent.is_none());
assert_eq!(
location.position,
if object.object_type().is_folder_type() {
1
} else {
0
}
);
}
Ok(())
}
#[test]
fn object_location_changing() -> Result<(), Box<dyn std::error::Error>> {
let project = Project::open_in_memory()?;
let objects = one_object_of_each_type(&project);
for mut object in objects {
let new_parent = project.get_objects(object.object_type().folder_type().to_bitset())?
[0]
.to_folder()?;
object.set_location(Some(new_parent.clone()), FolderPosition::EndOfFolder)?;
let location = object.location()?;
assert_eq!(location.parent, Some(new_parent.clone()));
assert_eq!(
location.position,
if object.object_type().is_folder_type() {
1
} else {
0
}
);
}
Ok(())
}
#[test]
fn object_name_and_information_fetching() -> Result<(), Box<dyn std::error::Error>> {
let project = Project::open_in_memory()?;
let objects = one_object_of_each_type(&project);
for object in objects {
assert_eq!(object.name()?, NAME);
assert_eq!(object.information()?, INFO);
}
Ok(())
}
#[test]
fn object_name_and_information_changing() -> Result<(), Box<dyn std::error::Error>> {
let project = Project::open_in_memory()?;
let objects = one_object_of_each_type(&project);
for mut object in objects {
let new = "new";
object.set_name(new)?;
object.set_information(new)?;
assert_eq!(object.name()?, new);
assert_eq!(object.information()?, new);
}
Ok(())
}
#[test]
fn object_scope() -> Result<(), Box<dyn std::error::Error>> {
let project = Project::open_in_memory()?;
let objects = one_object_of_each_type(&project);
for object in objects {
match (object.object_type(), object.scope()?) {
(ObjectType::Blueprint, ObjectScope::Blueprints) => {}
(ObjectType::BlueprintFolder, ObjectScope::Blueprints) => {}
(ObjectType::Entity, ObjectScope::Entities) => {}
(ObjectType::EntityFolder, ObjectScope::Entities) => {}
(ObjectType::Property, ObjectScope::Property(_)) => {}
(ObjectType::PropertyFolder, ObjectScope::Property(_)) => {}
_ => panic!("invalid scope"),
}
}
Ok(())
}
}