#![forbid(unsafe_code)]
use include_dir::{include_dir, Dir};
pub static FIXTURES: Dir<'static> = include_dir!("$CARGO_MANIFEST_DIR/fixtures");
pub fn fixture_bytes(path: &str) -> Option<&'static [u8]> {
FIXTURES.get_file(path).map(|f| f.contents())
}
pub fn fixture_str(path: &str) -> Option<&'static str> {
FIXTURES.get_file(path).and_then(|f| f.contents_utf8())
}
pub const COMMONMETA_SCHEMA_V1_0: &str = include_str!("../schemas/commonmeta_v1.0.json");
pub const COMMONMETA_FIXTURE_JOURNAL_ARTICLE: &str =
include_str!("../fixtures/commonmeta/journal_article.json");
pub fn schema(version: &str) -> Option<&'static str> {
match version {
"1.0" => Some(COMMONMETA_SCHEMA_V1_0),
_ => None,
}
}
pub fn fixture(name: &str) -> Option<&'static str> {
match name {
"journal_article" => Some(COMMONMETA_FIXTURE_JOURNAL_ARTICLE),
_ => None,
}
}
#[cfg(test)]
mod tests {
use super::{fixture, schema};
#[test]
fn known_version_is_available() {
assert!(schema("1.0").is_some());
}
#[test]
fn unknown_version_is_none() {
assert!(schema("nope").is_none());
}
#[test]
fn known_fixture_is_available() {
assert!(fixture("journal_article").is_some());
}
#[test]
fn unknown_fixture_is_none() {
assert!(fixture("nope").is_none());
}
#[test]
fn embedded_fixtures_are_available() {
use super::{fixture_bytes, fixture_str, FIXTURES};
assert!(fixture_str("commonmeta/journal_article.json").is_some());
assert!(fixture_bytes("orcid/0000-0002-0068-716X.xml").is_some());
let commonmeta = FIXTURES.get_dir("commonmeta").expect("commonmeta dir");
assert!(commonmeta.files().count() > 0);
assert!(fixture_str("nope/missing.json").is_none());
}
}