use crate::domain::model::query::Queries;
use super::store::QueryStore;
pub fn list_queries(store: &dyn QueryStore) -> anyhow::Result<Queries> {
let mut qs = store.list()?;
qs.sort_by_name();
Ok(qs)
}
#[cfg(test)]
mod tests {
use super::*;
use crate::domain::model::query::{Query, QueryIdentifier, QueryScript};
struct StubStore {
listing: Queries,
}
impl QueryStore for StubStore {
fn list(&self) -> anyhow::Result<Queries> {
Ok(self.listing.clone())
}
}
fn nq(n: &str) -> Query {
Query::new(QueryIdentifier::new(n).unwrap(), QueryScript::new(""), None)
}
#[test]
fn list_sorts_alphabetically_even_when_store_returns_shuffled() {
let store = StubStore {
listing: [nq("charlie"), nq("alpha"), nq("bravo")]
.into_iter()
.collect(),
};
let qs = list_queries(&store).unwrap();
let names: Vec<&str> = qs.iter().map(|q| q.name.as_str()).collect();
assert_eq!(names, vec!["alpha", "bravo", "charlie"]);
}
#[test]
fn list_on_empty_store_returns_empty_collection() {
let store = StubStore {
listing: Queries::new(),
};
assert!(list_queries(&store).unwrap().is_empty());
}
}