use fake::Fake;
use crate::system::resources::project::Project;
use crate::result::{Error, ResourceError};
use fake::locales::EN;
use fake::faker::filesystem::raw::DirPath;
use super::*;
use crate::types::ResourceId;
#[test]
fn register_project_should_work() {
let prj = create_project();
let rid = prj.rid.clone();
register_project(prj).expect("register__project should work");
let projects = load_projects().expect("load_projects should work");
let mut prjs = projects.projects;
prjs.retain(|p| p.rid == rid);
assert_eq!(
1, prjs.len(),
"zero or more than one matching project found"
);
}
#[test]
fn register_project_should_error_if_id_already_exists(){
let prj0 = create_project();
let prj1 = prj0.clone();
register_project(prj0).expect("register_project should work");
match register_project(prj1) {
Err(Error::ResourceError(ResourceError::DuplicateId(_))) => {}, res => panic!("Unexpected result. Expected duplicate id error found {:?}", res),
};
}
#[test]
fn deregister_project_should_work() {
let prj = create_project();
register_project(prj.clone()).expect("register_project should work");
deregister_project(&prj.rid).expect("deregister_project should work");
let projects = load_projects().expect("load_projects should work");
let mut prjs = projects.projects.clone();
prjs.retain(|p| p.rid == prj.rid);
assert_eq!(
0, prjs.len(),
"project not removed"
);
}
#[test]
fn deregister_project_should_exit_silently_if_project_did_not_exist() {
let prj = create_project();
deregister_project(&prj.rid).expect("deregister_project should work");
}
#[test]
fn project_by_id_should_work() {
let prj = create_project();
let rid = prj.rid.clone();
register_project(prj).expect("register_project should work");
let found_prj = project_by_id(&rid).expect("project should be found").unwrap();
assert_eq!(
rid, found_prj.rid,
"resource ids should match"
);
deregister_project(&rid).expect("deregister_project should work");
}
#[test]
fn project_by_id_should_return_none_if_project_does_not_exist() {
let prj = create_project();
let prj = project_by_id(&prj.rid).expect("should not error");
assert_eq!(
None, prj,
"project should be none"
);
}
#[test]
fn project_by_id_should_error_if_multiple_projects_exist() {
let prj0 = create_project();
let prj1 = prj0.clone();
let rid = prj0.rid.clone();
let mut projects = load_projects().expect("load_projects should work");
projects.projects.push(prj0);
projects.projects.push(prj1);
projects.save().expect("saving projects should work");
drop(projects);
match project_by_id(&rid) {
Err(Error::ResourceError(ResourceError::DuplicateId(eid))) => {
assert_eq!(
rid, eid,
"incorrect resource id"
)
},
_ => panic!("project_by_id did not error"),
};
deregister_project(&rid).expect("deregister_project should work");
}
fn create_project() -> Project {
let rid = ResourceId::new();
let path = DirPath(EN).fake();
Project::new(rid, path)
}