use mpdclient::{Entity, Tag};
use crate::common::setup_mpd;
mod common;
#[test]
fn list_all() -> eyre::Result<()> {
setup_mpd(
|setup| {
setup.song("song")?;
setup.song("song2")?;
setup.directory()?;
setup.song("dir/song")
},
|conn| {
let db = conn.database();
let list = db.list_all(None)?.receive_all()?;
assert_eq!(list.len(), 4);
let Entity::Song(song) = list.iter().find(|e| matches!(e, Entity::Song(_))).unwrap()
else {
unreachable!()
};
assert!(song.tag(Tag::Title).next().is_none());
Ok(())
},
)
}
#[test]
fn list_all_dir() -> eyre::Result<()> {
setup_mpd(
|setup| {
setup.song("song")?;
setup.song("song2")?;
setup.directory()?;
setup.song("dir/song")?;
setup.song("dir/text.txt")
},
|conn| {
let db = conn.database();
let list = db.list_all(Some("dir"))?.receive_all()?;
assert_eq!(list.len(), 3);
let Entity::Song(song) = list.iter().find(|e| matches!(e, Entity::Song(_))).unwrap()
else {
unreachable!()
};
assert!(song.tag(Tag::Title).next().is_none());
Ok(())
},
)
}
#[test]
fn list_all_meta() -> eyre::Result<()> {
setup_mpd(
|setup| {
setup.song("song")?;
setup.song("song2")?;
setup.directory()?;
setup.song("dir/song")
},
|conn| {
let db = conn.database();
let list = db.list_all_meta(None)?.receive_all()?;
assert_eq!(list.len(), 4);
let Entity::Song(song) = list.iter().find(|e| matches!(e, Entity::Song(_))).unwrap()
else {
unreachable!()
};
assert_eq!(song.tag(Tag::Title).next().unwrap(), "Silence");
Ok(())
},
)
}
#[test]
fn list_meta() -> eyre::Result<()> {
setup_mpd(
|setup| {
setup.song("song")?;
setup.song("song2")?;
setup.directory()?;
setup.song("dir/song")
},
|conn| {
let db = conn.database();
let list = db.list_meta(None)?.receive_all()?;
assert_eq!(list.len(), 3);
let Entity::Song(song) = list.iter().find(|e| matches!(e, Entity::Song(_))).unwrap()
else {
unreachable!()
};
assert_eq!(song.tag(Tag::Title).next().unwrap(), "Silence");
Ok(())
},
)
}
#[test]
fn list_files() -> eyre::Result<()> {
setup_mpd(
|setup| {
setup.song_copy("song")?;
setup.song("song2")?;
setup.directory()
},
|conn| {
let database = conn.database();
let list = database.list_files(None)?.receive_all()?;
assert_eq!(list.len(), 2);
assert!(matches!(list[0], Entity::Directory(_)));
Ok(())
},
)
}
#[test]
fn list_files_dir() -> eyre::Result<()> {
setup_mpd(
|setup| {
setup.directory()?;
setup.song("dir/song")?;
setup.song_copy("dir/song2")
},
|conn| {
let database = conn.database();
let list = database.list_files(Some("dir"))?.receive_all()?;
assert_eq!(list.len(), 1);
assert!(matches!(list[0], Entity::Song(_)));
let Entity::Song(song) = &list[0] else {
unreachable!()
};
assert_eq!(song.uri(), "song2.mp3");
Ok(())
},
)
}
#[test]
fn update() -> eyre::Result<()> {
setup_mpd(
|_| Ok(()),
|conn| {
assert!(conn.database().update(None)? >= 1);
Ok(())
},
)
}
#[test]
fn rescan() -> eyre::Result<()> {
setup_mpd(
|_| Ok(()),
|conn| {
assert!(conn.database().rescan(None)? >= 1);
Ok(())
},
)
}