Formatting
This commit is contained in:
@@ -2,11 +2,11 @@ use chrono::Utc;
|
||||
use sea_orm::ActiveValue::Set;
|
||||
|
||||
use shanty_db::{Database, queries};
|
||||
use shanty_tag::error::TagResult;
|
||||
use shanty_tag::provider::{
|
||||
ArtistSearchResult, DiscographyEntry, MetadataProvider, RecordingDetails, RecordingMatch,
|
||||
ReleaseMatch, ReleaseRef,
|
||||
};
|
||||
use shanty_tag::error::TagResult;
|
||||
use shanty_tag::{TagConfig, run_tagging};
|
||||
|
||||
/// A mock metadata provider for testing without hitting MusicBrainz.
|
||||
@@ -64,15 +64,25 @@ impl MetadataProvider for MockProvider {
|
||||
Ok(vec![])
|
||||
}
|
||||
|
||||
async fn get_artist_releases(&self, _artist_mbid: &str, _limit: u32) -> TagResult<Vec<DiscographyEntry>> {
|
||||
async fn get_artist_releases(
|
||||
&self,
|
||||
_artist_mbid: &str,
|
||||
_limit: u32,
|
||||
) -> TagResult<Vec<DiscographyEntry>> {
|
||||
Ok(vec![])
|
||||
}
|
||||
|
||||
async fn get_release_tracks(&self, _release_mbid: &str) -> TagResult<Vec<shanty_tag::provider::ReleaseTrack>> {
|
||||
async fn get_release_tracks(
|
||||
&self,
|
||||
_release_mbid: &str,
|
||||
) -> TagResult<Vec<shanty_tag::provider::ReleaseTrack>> {
|
||||
Ok(vec![])
|
||||
}
|
||||
|
||||
async fn get_artist_release_groups(&self, _artist_mbid: &str) -> TagResult<Vec<shanty_tag::provider::ReleaseGroupEntry>> {
|
||||
async fn get_artist_release_groups(
|
||||
&self,
|
||||
_artist_mbid: &str,
|
||||
) -> TagResult<Vec<shanty_tag::provider::ReleaseGroupEntry>> {
|
||||
Ok(vec![])
|
||||
}
|
||||
}
|
||||
@@ -83,7 +93,12 @@ async fn test_db() -> Database {
|
||||
.expect("failed to create test database")
|
||||
}
|
||||
|
||||
async fn insert_untagged_track(db: &Database, file_path: &str, title: Option<&str>, artist: Option<&str>) -> i32 {
|
||||
async fn insert_untagged_track(
|
||||
db: &Database,
|
||||
file_path: &str,
|
||||
title: Option<&str>,
|
||||
artist: Option<&str>,
|
||||
) -> i32 {
|
||||
let now = Utc::now().naive_utc();
|
||||
let active = shanty_db::entities::track::ActiveModel {
|
||||
file_path: Set(file_path.to_string()),
|
||||
@@ -103,7 +118,8 @@ async fn test_tag_track_with_match() {
|
||||
let db = test_db().await;
|
||||
let provider = MockProvider;
|
||||
|
||||
let track_id = insert_untagged_track(&db, "/music/time.mp3", Some("Time"), Some("Pink Floyd")).await;
|
||||
let track_id =
|
||||
insert_untagged_track(&db, "/music/time.mp3", Some("Time"), Some("Pink Floyd")).await;
|
||||
|
||||
let config = TagConfig {
|
||||
dry_run: false,
|
||||
@@ -111,13 +127,17 @@ async fn test_tag_track_with_match() {
|
||||
confidence: 0.8,
|
||||
};
|
||||
|
||||
let stats = run_tagging(db.conn(), &provider, &config, Some(track_id)).await.unwrap();
|
||||
let stats = run_tagging(db.conn(), &provider, &config, Some(track_id))
|
||||
.await
|
||||
.unwrap();
|
||||
assert_eq!(stats.tracks_processed, 1);
|
||||
assert_eq!(stats.tracks_matched, 1);
|
||||
assert_eq!(stats.tracks_updated, 1);
|
||||
|
||||
// Verify the track was updated
|
||||
let track = queries::tracks::get_by_id(db.conn(), track_id).await.unwrap();
|
||||
let track = queries::tracks::get_by_id(db.conn(), track_id)
|
||||
.await
|
||||
.unwrap();
|
||||
assert_eq!(track.musicbrainz_id.as_deref(), Some("rec-123"));
|
||||
assert_eq!(track.title.as_deref(), Some("Time"));
|
||||
assert_eq!(track.artist.as_deref(), Some("Pink Floyd"));
|
||||
@@ -126,9 +146,14 @@ async fn test_tag_track_with_match() {
|
||||
assert_eq!(track.genre.as_deref(), Some("Progressive Rock"));
|
||||
|
||||
// Verify artist was created with MusicBrainz ID
|
||||
let artist = queries::artists::find_by_name(db.conn(), "Pink Floyd").await.unwrap();
|
||||
let artist = queries::artists::find_by_name(db.conn(), "Pink Floyd")
|
||||
.await
|
||||
.unwrap();
|
||||
assert!(artist.is_some());
|
||||
assert_eq!(artist.unwrap().musicbrainz_id.as_deref(), Some("artist-456"));
|
||||
assert_eq!(
|
||||
artist.unwrap().musicbrainz_id.as_deref(),
|
||||
Some("artist-456")
|
||||
);
|
||||
}
|
||||
|
||||
#[tokio::test]
|
||||
@@ -136,7 +161,13 @@ async fn test_tag_track_no_match() {
|
||||
let db = test_db().await;
|
||||
let provider = MockProvider;
|
||||
|
||||
let track_id = insert_untagged_track(&db, "/music/unknown.mp3", Some("Unknown Song"), Some("Nobody")).await;
|
||||
let track_id = insert_untagged_track(
|
||||
&db,
|
||||
"/music/unknown.mp3",
|
||||
Some("Unknown Song"),
|
||||
Some("Nobody"),
|
||||
)
|
||||
.await;
|
||||
|
||||
let config = TagConfig {
|
||||
dry_run: false,
|
||||
@@ -144,12 +175,16 @@ async fn test_tag_track_no_match() {
|
||||
confidence: 0.8,
|
||||
};
|
||||
|
||||
let stats = run_tagging(db.conn(), &provider, &config, Some(track_id)).await.unwrap();
|
||||
let stats = run_tagging(db.conn(), &provider, &config, Some(track_id))
|
||||
.await
|
||||
.unwrap();
|
||||
assert_eq!(stats.tracks_processed, 1);
|
||||
assert_eq!(stats.tracks_skipped, 1);
|
||||
|
||||
// Track should be unchanged
|
||||
let track = queries::tracks::get_by_id(db.conn(), track_id).await.unwrap();
|
||||
let track = queries::tracks::get_by_id(db.conn(), track_id)
|
||||
.await
|
||||
.unwrap();
|
||||
assert!(track.musicbrainz_id.is_none());
|
||||
}
|
||||
|
||||
@@ -158,7 +193,8 @@ async fn test_dry_run_does_not_update() {
|
||||
let db = test_db().await;
|
||||
let provider = MockProvider;
|
||||
|
||||
let track_id = insert_untagged_track(&db, "/music/time.mp3", Some("Time"), Some("Pink Floyd")).await;
|
||||
let track_id =
|
||||
insert_untagged_track(&db, "/music/time.mp3", Some("Time"), Some("Pink Floyd")).await;
|
||||
|
||||
let config = TagConfig {
|
||||
dry_run: true,
|
||||
@@ -166,12 +202,16 @@ async fn test_dry_run_does_not_update() {
|
||||
confidence: 0.8,
|
||||
};
|
||||
|
||||
let stats = run_tagging(db.conn(), &provider, &config, Some(track_id)).await.unwrap();
|
||||
let stats = run_tagging(db.conn(), &provider, &config, Some(track_id))
|
||||
.await
|
||||
.unwrap();
|
||||
assert_eq!(stats.tracks_matched, 1);
|
||||
assert_eq!(stats.tracks_updated, 0); // dry run
|
||||
|
||||
// Track should be unchanged
|
||||
let track = queries::tracks::get_by_id(db.conn(), track_id).await.unwrap();
|
||||
let track = queries::tracks::get_by_id(db.conn(), track_id)
|
||||
.await
|
||||
.unwrap();
|
||||
assert!(track.musicbrainz_id.is_none());
|
||||
}
|
||||
|
||||
@@ -189,7 +229,9 @@ async fn test_tag_all_untagged() {
|
||||
confidence: 0.8,
|
||||
};
|
||||
|
||||
let stats = run_tagging(db.conn(), &provider, &config, None).await.unwrap();
|
||||
let stats = run_tagging(db.conn(), &provider, &config, None)
|
||||
.await
|
||||
.unwrap();
|
||||
assert_eq!(stats.tracks_processed, 2);
|
||||
assert_eq!(stats.tracks_matched, 1); // only Pink Floyd matched
|
||||
assert_eq!(stats.tracks_skipped, 1);
|
||||
|
||||
Reference in New Issue
Block a user