#![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_0RC1: &str = include_str!("../schemas/commonmeta_v1.0rc1.json");
pub const COMMONMETA_SCHEMA_V1_0RC2: &str = include_str!("../schemas/commonmeta_v1.0rc2.json");
pub const COMMONMETA_SCHEMA_V1_0RC3: &str = include_str!("../schemas/commonmeta_v1.0rc3.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.0rc1" => Some(COMMONMETA_SCHEMA_V1_0RC1),
"1.0rc2" => Some(COMMONMETA_SCHEMA_V1_0RC2),
"1.0rc3" => Some(COMMONMETA_SCHEMA_V1_0RC3),
_ => 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.0rc1").is_some());
assert!(schema("1.0rc2").is_some());
assert!(schema("1.0rc3").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());
}
}