use musichoard::{ collection::{artist::Artist, Collection}, external::database::sql::{backend::SqlDatabaseSqliteBackend, SqlDatabase}, interface::database::IDatabase, }; use tempfile::NamedTempFile; use crate::{copy_file_into_temp, testlib::COLLECTION, COMPLETE_DB_TEST_FILE}; fn expected() -> Collection { let mut expected = COLLECTION.to_owned(); for artist in expected.iter_mut() { for album in artist.albums.iter_mut() { album.tracks.clear(); } } expected } #[test] fn reset() { let file = NamedTempFile::new().unwrap(); let backend = SqlDatabaseSqliteBackend::new(file.path()).unwrap(); let mut database = SqlDatabase::new(backend).unwrap(); database.reset().unwrap(); } #[test] fn save() { let file = NamedTempFile::new().unwrap(); let backend = SqlDatabaseSqliteBackend::new(file.path()).unwrap(); let mut database = SqlDatabase::new(backend).unwrap(); let write_data = COLLECTION.to_owned(); database.save(&write_data).unwrap(); } #[test] fn load() { let backend = SqlDatabaseSqliteBackend::new(&*COMPLETE_DB_TEST_FILE).unwrap(); let mut database = SqlDatabase::new(backend).unwrap(); let read_data: Vec = database.load().unwrap(); let expected = expected(); assert_eq!(read_data, expected); } #[test] fn reverse() { let file = NamedTempFile::new().unwrap(); let backend = SqlDatabaseSqliteBackend::new(file.path()).unwrap(); let mut database = SqlDatabase::new(backend).unwrap(); let write_data = COLLECTION.to_owned(); database.save(&write_data).unwrap(); let read_data: Vec = database.load().unwrap(); // Not all data is saved into database. let expected = expected(); assert_eq!(read_data, expected); } #[test] fn reverse_with_reset() { let file = copy_file_into_temp(&*COMPLETE_DB_TEST_FILE); let backend = SqlDatabaseSqliteBackend::new(file.path()).unwrap(); let mut database = SqlDatabase::new(backend).unwrap(); let expected: Vec = database.load().unwrap(); database.reset().unwrap(); database.save(&expected).unwrap(); let read_data: Vec = database.load().unwrap(); assert_eq!(read_data, expected); }