#![cfg(feature = "database-sqlite")] #![cfg(feature = "library-beets")] mod database; mod library; mod testlib; use std::{fs, path::PathBuf}; use musichoard::{ external::{ database::sql::{backend::SqlDatabaseSqliteBackend, SqlDatabase}, library::beets::{executor::BeetsLibraryProcessExecutor, BeetsLibrary}, }, IMusicHoardBase, IMusicHoardDatabase, IMusicHoardLibrary, MusicHoard, }; use tempfile::NamedTempFile; use crate::testlib::COLLECTION; pub fn copy_file_into_temp>(path: P) -> NamedTempFile { let temp = NamedTempFile::new().unwrap(); fs::copy(path.into(), temp.path()).unwrap(); temp } #[test] fn merge_library_then_database() { // Acquired the lock on the beets config file. We need to own the underlying object so later we // create a new one. This is okay as the purpose of the lock is to prevent other tests to access // the same Beets library at the same time. let _arc = library::beets::BEETS_TEST_CONFIG.clone(); let _ = &mut _arc.lock().unwrap(); let executor = BeetsLibraryProcessExecutor::default() .config(Some(&*library::beets::BEETS_TEST_CONFIG_PATH)); let library = BeetsLibrary::new(executor); let file = copy_file_into_temp(&*database::sql::DATABASE_TEST_FILE); let backend = SqlDatabaseSqliteBackend::new(file.path()).unwrap(); let database = SqlDatabase::new(backend).unwrap(); let mut music_hoard = MusicHoard::new(database, library); music_hoard.rescan_library().unwrap(); music_hoard.reload_database().unwrap(); assert_eq!(music_hoard.get_collection(), &*COLLECTION); } #[test] fn merge_database_then_library() { // Acquired the lock on the beets config file. We need to own the underlying object so later we // create a new one. This is okay as the purpose of the lock is to prevent other tests to access // the same Beets library at the same time. let _arc = library::beets::BEETS_TEST_CONFIG.clone(); let _ = &mut _arc.lock().unwrap(); let executor = BeetsLibraryProcessExecutor::default() .config(Some(&*library::beets::BEETS_TEST_CONFIG_PATH)); let library = BeetsLibrary::new(executor); let file = copy_file_into_temp(&*database::sql::DATABASE_TEST_FILE); let backend = SqlDatabaseSqliteBackend::new(file.path()).unwrap(); let database = SqlDatabase::new(backend).unwrap(); let mut music_hoard = MusicHoard::new(database, library); music_hoard.reload_database().unwrap(); music_hoard.rescan_library().unwrap(); assert_eq!(music_hoard.get_collection(), &*COLLECTION); }