use std::fs; use std::path::Path; use jsonschema::JSONSchema; use serde::Serialize; use serde_json::json; fn util(instance: &T, schema_path: &Path) { let instance = json!(instance); let schema_str = fs::read_to_string(schema_path).unwrap(); let schema = serde_json::from_str(&schema_str).unwrap(); let compiled = JSONSchema::compile(&schema).expect("A valid schema"); let result = compiled.validate(&instance); if let Err(errors) = result { for error in errors { println!("Validation error: {}", error); println!("Instance path: {}", error.instance_path); } } assert!(compiled.is_valid(&instance)); } #[test] fn test_comment() { let schema_path = Path::new("./f3-schemas/comment.json"); let instance = f3_rs::Comment { created: "1963-06-19T08:30:06.283185Z".into(), updated: "1963-06-19T08:30:06.283185Z".into(), ..Default::default() }; util(&instance, schema_path); } #[test] fn test_issue() { let schema_path = Path::new("./f3-schemas/issue.json"); let instance = f3_rs::Issue { created: "1963-06-19T08:30:06.283185Z".into(), updated: "1963-06-19T08:30:06.283185Z".into(), ..Default::default() }; util(&instance, schema_path); } #[test] fn test_user() { let schema_path = Path::new("./f3-schemas/user.json"); let instance = f3_rs::User { ..Default::default() }; util(&instance, schema_path); } #[test] fn test_pr() { let schema_path = Path::new("./f3-schemas/pullrequest.json"); let instance = f3_rs::PullRequest { created: "1963-06-19T08:30:06.283185Z".into(), updated: "1963-06-19T08:30:06.283185Z".into(), ..Default::default() }; util(&instance, schema_path); } #[test] fn test_identities() { let schema_path = Path::new("./f3-schemas/identities.json"); let instance = f3_rs::Identities::default(); util(&instance, schema_path); } #[test] fn test_label() { let schema_path = Path::new("./f3-schemas/label.json"); let instance = f3_rs::Label::default(); util(&instance, schema_path); } #[test] fn test_object() { let schema_path = Path::new("./f3-schemas/object.json"); let instance = f3_rs::Object::default(); util(&instance, schema_path); } #[test] fn test_organization() { let schema_path = Path::new("./f3-schemas/organization.json"); let instance = f3_rs::Organization::default(); util(&instance, schema_path); } #[test] fn test_project() { let schema_path = Path::new("./f3-schemas/project.json"); let instance = f3_rs::Project { ..Default::default() }; util(&instance, schema_path); }