use std::{fs, path::PathBuf}; use once_cell::sync::Lazy; use tempfile::NamedTempFile; use musichoard::{ collection::{artist::Artist, Collection}, database::{ json::{backend::JsonDatabaseFileBackend, JsonDatabase}, IDatabase, }, }; use crate::testlib::COLLECTION; pub static DATABASE_TEST_FILE: Lazy = Lazy::new(|| fs::canonicalize("./tests/files/database/database.json").unwrap()); fn expected() -> Collection { let mut expected = COLLECTION.to_owned(); for artist in expected.iter_mut() { artist.albums.clear(); } expected } // FIXME: Re-add save test. #[test] fn load() { let backend = JsonDatabaseFileBackend::new(&*DATABASE_TEST_FILE); let database = JsonDatabase::new(backend); let read_data: Vec = database.load().unwrap(); let expected = expected(); assert_eq!(read_data, expected); } #[test] fn reverse() { // Saving is non-deterministic due to HashMap, but regardless of how the data ends up being // saved, loading it again should always yield the exact same data as was input. let file = NamedTempFile::new().unwrap(); let backend = JsonDatabaseFileBackend::new(file.path()); let mut database = JsonDatabase::new(backend); let write_data = COLLECTION.to_owned(); database.save(&write_data).unwrap(); let read_data: Vec = database.load().unwrap(); // Album data is not saved into database. let expected = expected(); assert_eq!(read_data, expected); }