#![cfg(feature = "https-fetcher")]
use std::path::Path;
use lex_extension_host::{default_fetcher_registry, resolve_namespace_with, ResolverCache};
#[test]
#[ignore = "network: hits api.github.com — run with --ignored when you want to exercise the real https path"]
fn fetches_real_github_tarball_via_template_dispatch() {
let workspace = tempfile::tempdir().expect("workspace tempdir");
let cache_dir = tempfile::tempdir().expect("cache tempdir");
let cache = ResolverCache::new(cache_dir.path()).expect("init cache");
let registry = default_fetcher_registry();
let resolved = resolve_namespace_with(
"github:octocat/Hello-World",
workspace.path(),
®istry,
&cache,
)
.expect("github tarball should resolve via the template + https fetcher");
let entries: Vec<_> = std::fs::read_dir(&resolved.schema_dir)
.expect("schema dir readable")
.filter_map(|e| e.ok())
.collect();
assert!(
!entries.is_empty(),
"extracted github tarball should have at least one top-level entry"
);
let wrapper = entries
.iter()
.find(|e| e.path().is_dir())
.expect("github tarball wraps content in a single dir at root");
assert!(
wrapper
.file_name()
.to_string_lossy()
.starts_with("octocat-Hello-World-"),
"expected wrapper dir prefix `octocat-Hello-World-`, got: {:?}",
wrapper.file_name()
);
assert!(
find_file(&wrapper.path(), "README").is_some(),
"Hello-World repo has a README at its root"
);
}
fn find_file(root: &Path, name: &str) -> Option<std::path::PathBuf> {
let lower = name.to_ascii_lowercase();
for entry in std::fs::read_dir(root).ok()? {
let entry = entry.ok()?;
if entry
.file_name()
.to_string_lossy()
.to_ascii_lowercase()
.starts_with(&lower)
{
return Some(entry.path());
}
}
None
}