Documentation
use crate::entity::note::Note;
use crate::repository::Repository;

pub fn execute<R: Repository>(repo: &R) -> Result<impl Iterator<Item = Note> + '_, R::Error> {
    repo.list()
}

#[cfg(test)]
mod tests {
    use super::*;
    use crate::repository::InMemoryRepository;

    #[test]
    fn it_should_list_all_created_notes() {
        let mut repo = InMemoryRepository::new();

        let first_note = Note::new("My Title", Some("Lorem Ipsum."), None).unwrap();
        let second_note = Note::new("Another Title", None, None).unwrap();
        let third_note = Note::new("Note with Tags", None, Some(&vec!["tag1".to_owned()])).unwrap();

        let expected = [first_note.clone(), second_note.clone(), third_note.clone()];

        repo.insert(first_note).unwrap();
        repo.insert(second_note).unwrap();
        repo.insert(third_note).unwrap();

        let res = repo.list().unwrap().collect::<Vec<_>>();

        assert_eq!(expected.len(), res.len());
        assert!(expected.iter().all(|note| res.contains(note)));
    }
}