use crate::staticfiles::vendor::asset::AppVendorAsset;
pub fn registered_assets_for_app(app_label: &str) -> Vec<AppVendorAsset> {
inventory::iter::<AppVendorAsset>()
.copied()
.filter(|a| a.app_label == app_label)
.collect()
}
pub fn all_registered_assets() -> Vec<AppVendorAsset> {
inventory::iter::<AppVendorAsset>().copied().collect()
}
#[cfg(test)]
mod tests {
use super::*;
use rstest::rstest;
inventory::submit! {
AppVendorAsset {
app_label: "__registry_test_app__",
url: "https://example.test/file.js",
target: "vendor/file.js",
sha256: "",
}
}
#[rstest]
fn registered_assets_for_app_returns_only_matching_label() {
let entries = registered_assets_for_app("__registry_test_app__");
assert_eq!(entries.len(), 1, "expected exactly one matching entry");
assert_eq!(entries[0].url, "https://example.test/file.js");
assert_eq!(entries[0].target, "vendor/file.js");
}
#[rstest]
fn registered_assets_for_app_returns_empty_for_unknown_label() {
let entries = registered_assets_for_app("__no_such_app_anywhere__");
assert!(entries.is_empty(), "expected empty, got {:?}", entries);
}
#[rstest]
fn all_registered_assets_includes_synthetic_entry() {
let all = all_registered_assets();
assert!(
all.iter().any(|a| a.app_label == "__registry_test_app__"),
"all_registered_assets must include synthetic entry"
);
}
}