use crate::*;
#[test]
fn a_spec_on_a_remote_prefix_is_refused() {
let asked = [
OpenOptions {
spec_name: Some("vendor.feed".into()),
..OpenOptions::default()
},
OpenOptions {
spec_file: Some(PathBuf::from("l2feed.toml")),
..OpenOptions::default()
},
];
for url in [
"s3://bucket/days/",
"gs://bucket/days/*.l2",
"abfss://c@acct.dfs.core.windows.net/days/",
] {
for options in &asked {
let e = App::build_lazyframe_from_paths_with(
&crate::config::CloudConfig::default(),
&[PathBuf::from(url)],
options,
&mut ReadReport::default(),
&crate::formats::Registry::default(),
)
.err()
.unwrap_or_else(|| panic!("{url} opened"));
assert!(
e.to_string()
.contains("not a prefix or a glob; name the object"),
"{url}: {e}"
);
}
}
assert!(App::refuse_spec_in_place(Path::new("/data/day.l2"), &asked[0]).is_ok());
assert!(
App::refuse_spec_in_place(Path::new("s3://bucket/day.l2"), &OpenOptions::default()).is_ok()
);
}
#[test]
fn refusals_name_the_file() {
let dir = tempfile::tempdir().unwrap();
let data = dir.path().join("a.csv");
std::fs::write(&data, "a\n1\n").unwrap();
let spec = dir.path().join("bad.toml");
std::fs::write(&spec, "name = \"acme.l2\"\n[records]\nfields = 3\n").unwrap();
let open = |options: &OpenOptions| {
let e = App::build_lazyframe_from_paths_with(
&crate::config::CloudConfig::default(),
std::slice::from_ref(&data),
options,
&mut ReadReport::default(),
&crate::formats::Registry::default(),
)
.err()
.expect("refused");
crate::error_display::user_message_from_report(&e, Some(&data))
};
let table = open(&OpenOptions {
table: Some("x".into()),
..OpenOptions::default()
});
eprintln!("{table}");
crate::formats::readers::bad_input::assert_shape(&table, &data);
assert!(table.contains("--table picks one from"), "{table}");
let spec_said = open(&OpenOptions {
spec_file: Some(spec.clone()),
..OpenOptions::default()
});
eprintln!("{spec_said}");
crate::formats::readers::bad_input::assert_shape(&spec_said, &spec);
assert!(spec_said.contains(":3:"), "{spec_said}");
}