feat: jsonschema based test
This commit is contained in:
parent
88b687639e
commit
1ce0744b18
3 changed files with 1396 additions and 22 deletions
1315
Cargo.lock
generated
1315
Cargo.lock
generated
File diff suppressed because it is too large
Load diff
|
@ -14,3 +14,6 @@ authors = ["realaravinth <realaravinth@batsense.net>"]
|
||||||
[dependencies]
|
[dependencies]
|
||||||
serde = { version = "1.0.152", features = ["derive"] }
|
serde = { version = "1.0.152", features = ["derive"] }
|
||||||
serde_json = "1.0.91"
|
serde_json = "1.0.91"
|
||||||
|
|
||||||
|
[dev-dependencies]
|
||||||
|
jsonschema = "0.17.1"
|
||||||
|
|
100
tests/basic.rs
Normal file
100
tests/basic.rs
Normal file
|
@ -0,0 +1,100 @@
|
||||||
|
use std::fs;
|
||||||
|
use std::path::Path;
|
||||||
|
|
||||||
|
use jsonschema::JSONSchema;
|
||||||
|
use serde::Serialize;
|
||||||
|
use serde_json::json;
|
||||||
|
|
||||||
|
fn util<T: Serialize>(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);
|
||||||
|
}
|
Loading…
Reference in a new issue