ckan_geoconnex_bulk_runner/tests/validate_jsonld.rs

97 lines
3 KiB
Rust

use anyhow::{Result, bail};
#[cfg(feature = "local")]
use ckan_geoconnex_bulk_runner::schema::get_dataset_schema;
use ckan_geoconnex_bulk_runner::schema::get_location_schema;
use serde_json::json;
#[cfg(feature = "local")]
use std::{
fs::File,
io::{BufRead, BufReader},
};
#[test]
#[cfg(feature = "local")]
fn validate_sciencebase_dump() -> Result<()> {
let file_path = "./tests/sciencebase_jsonld_dump_202605-06.jsonl";
if !std::fs::exists(file_path)? {
bail!("File path {file_path} does not exist.")
}
let dataset_json_schema = get_dataset_schema();
// Read JSONL file line-by-line
let file = File::open(file_path)?;
let reader = BufReader::new(file);
let mut line_number = 0;
for line in reader.lines() {
let jsonld: serde_json::Value = serde_json::from_str(line?.as_str())?;
if let Err(e) = jsonschema::validate(&dataset_json_schema, &jsonld) {
println!("Error during validation on line {line_number}:");
println!("JSON-LD:");
println!("{jsonld:#?}");
bail!("{e}");
} else {
println!("Successfully validated line {line_number}.");
line_number = line_number + 1;
}
}
Ok(())
}
#[test]
fn validate_usgs_location_jsonld() -> Result<()> {
let usgs_location_jsonld = json!({
"@context": {
"@vocab": "https://schema.org/",
"gsp": "http://www.opengis.net/ont/geosparql#",
"hyf": "https://www.opengis.net/def/schema/hy_features/hyf/",
"locType": "https://api.waterdata.usgs.gov/ogcapi/v0/collections/site-types/items/"
},
"@type": [
"Place",
"hyf:HY_HydrometricFeature",
"hyf:HY_HydroLocation",
"locType:ST-CA"
],
"@id": "https://geoconnex.us/usgs/monitoring-location/USGS-253937080285200",
"name": "BLACKCREEKCANALWESTOFSOUTHMIAMI FLA",
"identifier": {
"@type": "PropertyValue",
"propertyID": "USGS site identifier",
"value": "253937080285200"
},
"url": "https://api.waterdata.usgs.gov/ogcapi/v0/collections/monitoring-locations/items/USGS-253937080285200",
"provider": {
"@type": "GovernmentOrganization",
"name": "U.S. Geological Survey"
},
"geo": {
"@type": "GeoCoordinates",
"latitude": 25.6606597832648,
"longitude": -80.4808896071386
},
"gsp:hasGeometry": {
"@type": "http://www.opengis.net/ont/sf#Point",
"gsp:asWKT": {
"@type": "gsp:wktLiteral",
"@value": "POINT (-80.4808896071386 25.6606597832648)"
},
"gsp:crs": {
"@id": "http://www.opengis.net/def/crs/OGC/1.3/CRS84"
}
}
});
let location_json_schema = get_location_schema();
if let Err(e) = jsonschema::validate(&location_json_schema, &usgs_location_jsonld) {
println!("Error during validation:");
bail!("{e}");
} else {
println!("Successfully validated.");
}
Ok(())
}