Place beets behind Arc Mutex in tests
This commit is contained in:
parent
49931ea0ad
commit
15c8baadf5
@ -19,11 +19,11 @@ pub trait DatabaseJsonBackend {
|
||||
|
||||
/// A JSON file database.
|
||||
pub struct DatabaseJson {
|
||||
backend: Box<dyn DatabaseJsonBackend>,
|
||||
backend: Box<dyn DatabaseJsonBackend + Send>,
|
||||
}
|
||||
|
||||
impl DatabaseJson {
|
||||
pub fn new(backend: Box<dyn DatabaseJsonBackend>) -> Self {
|
||||
pub fn new(backend: Box<dyn DatabaseJsonBackend + Send>) -> Self {
|
||||
DatabaseJson { backend }
|
||||
}
|
||||
}
|
||||
|
@ -91,7 +91,7 @@ pub trait BeetsExecutor {
|
||||
|
||||
/// Struct for interacting with the music library via beets.
|
||||
pub struct Beets {
|
||||
executor: Box<dyn BeetsExecutor>,
|
||||
executor: Box<dyn BeetsExecutor + Send>,
|
||||
}
|
||||
|
||||
trait LibraryPrivate {
|
||||
@ -106,7 +106,7 @@ trait LibraryPrivate {
|
||||
}
|
||||
|
||||
impl Beets {
|
||||
pub fn new(executor: Box<dyn BeetsExecutor>) -> Beets {
|
||||
pub fn new(executor: Box<dyn BeetsExecutor + Send>) -> Beets {
|
||||
Beets { executor }
|
||||
}
|
||||
}
|
||||
|
@ -1,4 +1,4 @@
|
||||
use std::fs;
|
||||
use std::{fs, path::PathBuf};
|
||||
|
||||
use musichoard::{
|
||||
database::{
|
||||
@ -7,10 +7,14 @@ use musichoard::{
|
||||
},
|
||||
Artist,
|
||||
};
|
||||
use once_cell::sync::Lazy;
|
||||
use tempfile::NamedTempFile;
|
||||
|
||||
use crate::COLLECTION;
|
||||
|
||||
static DATABASE_TEST_FILE: Lazy<PathBuf> =
|
||||
Lazy::new(|| fs::canonicalize("./tests/files/database/database.json").unwrap());
|
||||
|
||||
#[test]
|
||||
fn write() {
|
||||
let file = NamedTempFile::new().unwrap();
|
||||
@ -21,8 +25,7 @@ fn write() {
|
||||
let write_data = COLLECTION.to_owned();
|
||||
database.write(&write_data).unwrap();
|
||||
|
||||
let expected_path = fs::canonicalize("./tests/files/database/database.json").unwrap();
|
||||
let expected = fs::read_to_string(expected_path).unwrap();
|
||||
let expected = fs::read_to_string(&*DATABASE_TEST_FILE).unwrap();
|
||||
let actual = fs::read_to_string(file.path()).unwrap();
|
||||
|
||||
assert_eq!(actual, expected);
|
||||
@ -30,9 +33,7 @@ fn write() {
|
||||
|
||||
#[test]
|
||||
fn read() {
|
||||
let file_path = fs::canonicalize("./tests/files/database/database.json").unwrap();
|
||||
|
||||
let backend = DatabaseJsonFile::new(&file_path);
|
||||
let backend = DatabaseJsonFile::new(&*DATABASE_TEST_FILE);
|
||||
let database = DatabaseJson::new(Box::new(backend));
|
||||
|
||||
let mut read_data: Vec<Artist> = vec![];
|
||||
|
@ -1,4 +1,9 @@
|
||||
use std::fs;
|
||||
use std::{
|
||||
fs,
|
||||
sync::{Arc, Mutex},
|
||||
};
|
||||
|
||||
use once_cell::sync::Lazy;
|
||||
|
||||
use musichoard::{
|
||||
library::{
|
||||
@ -10,11 +15,22 @@ use musichoard::{
|
||||
|
||||
use crate::COLLECTION;
|
||||
|
||||
static BEETS_EMPTY_CONFIG: Lazy<Arc<Mutex<Beets>>> =
|
||||
Lazy::new(|| Arc::new(Mutex::new(Beets::new(Box::new(SystemExecutor::default())))));
|
||||
|
||||
static BEETS_TEST_CONFIG: Lazy<Arc<Mutex<Beets>>> = Lazy::new(|| {
|
||||
Arc::new(Mutex::new(Beets::new(Box::new(
|
||||
SystemExecutor::default().config(Some(
|
||||
&fs::canonicalize("./tests/files/library/config.yml").unwrap(),
|
||||
)),
|
||||
))))
|
||||
});
|
||||
|
||||
#[test]
|
||||
fn test_no_config_list() {
|
||||
let executor = SystemExecutor::default();
|
||||
let beets_arc = BEETS_EMPTY_CONFIG.clone();
|
||||
let beets = &mut beets_arc.lock().unwrap();
|
||||
|
||||
let mut beets = Beets::new(Box::new(executor));
|
||||
let output = beets.list(&Query::default()).unwrap();
|
||||
|
||||
let expected: Vec<Artist> = vec![];
|
||||
@ -23,11 +39,9 @@ fn test_no_config_list() {
|
||||
|
||||
#[test]
|
||||
fn test_full_list() {
|
||||
let executor = SystemExecutor::default().config(Some(
|
||||
&fs::canonicalize("./tests/files/library/config.yml").unwrap(),
|
||||
));
|
||||
let beets_arc = BEETS_TEST_CONFIG.clone();
|
||||
let beets = &mut beets_arc.lock().unwrap();
|
||||
|
||||
let mut beets = Beets::new(Box::new(executor));
|
||||
let output = beets.list(&Query::default()).unwrap();
|
||||
|
||||
let expected: Vec<Artist> = COLLECTION.to_owned();
|
||||
@ -36,11 +50,9 @@ fn test_full_list() {
|
||||
|
||||
#[test]
|
||||
fn test_album_artist_query() {
|
||||
let executor = SystemExecutor::default().config(Some(
|
||||
&fs::canonicalize("./tests/files/library/config.yml").unwrap(),
|
||||
));
|
||||
let beets_arc = BEETS_TEST_CONFIG.clone();
|
||||
let beets = &mut beets_arc.lock().unwrap();
|
||||
|
||||
let mut beets = Beets::new(Box::new(executor));
|
||||
let output = beets
|
||||
.list(&Query::default().album_artist(QueryOption::Include(String::from("Аркона"))))
|
||||
.unwrap();
|
||||
@ -51,11 +63,9 @@ fn test_album_artist_query() {
|
||||
|
||||
#[test]
|
||||
fn test_album_title_query() {
|
||||
let executor = SystemExecutor::default().config(Some(
|
||||
&fs::canonicalize("./tests/files/library/config.yml").unwrap(),
|
||||
));
|
||||
let beets_arc = BEETS_TEST_CONFIG.clone();
|
||||
let beets = &mut beets_arc.lock().unwrap();
|
||||
|
||||
let mut beets = Beets::new(Box::new(executor));
|
||||
let output = beets
|
||||
.list(&Query::default().album_title(QueryOption::Include(String::from("Slovo"))))
|
||||
.unwrap();
|
||||
@ -66,11 +76,9 @@ fn test_album_title_query() {
|
||||
|
||||
#[test]
|
||||
fn test_exclude_query() {
|
||||
let executor = SystemExecutor::default().config(Some(
|
||||
&fs::canonicalize("./tests/files/library/config.yml").unwrap(),
|
||||
));
|
||||
let beets_arc = BEETS_TEST_CONFIG.clone();
|
||||
let beets = &mut beets_arc.lock().unwrap();
|
||||
|
||||
let mut beets = Beets::new(Box::new(executor));
|
||||
let output = beets
|
||||
.list(&Query::default().album_artist(QueryOption::Exclude(String::from("Аркона"))))
|
||||
.unwrap();
|
||||
|
Loading…
Reference in New Issue
Block a user