Complete unit tests
Some checks failed
Cargo CI / Build and Test (pull_request) Successful in 2m3s
Cargo CI / Lint (pull_request) Failing after 1m8s

This commit is contained in:
Wojciech Kozlowski 2025-01-03 17:37:12 +01:00
parent 3f6364e376
commit ccea27531f

View File

@ -301,7 +301,13 @@ impl Display for ArtistId {
#[cfg(test)] #[cfg(test)]
mod tests { mod tests {
use crate::{collection::album::AlbumId, core::testmod::FULL_COLLECTION}; use crate::{
collection::{
album::{AlbumId, AlbumMbRef},
musicbrainz::MbAlbumRef,
},
core::testmod::FULL_COLLECTION,
};
use super::*; use super::*;
@ -612,11 +618,16 @@ mod tests {
let mut left = Artist::new(ArtistId::new("Artist")); let mut left = Artist::new(ArtistId::new("Artist"));
let mut right = left.clone(); let mut right = left.clone();
left.albums.push(Album::new(AlbumId::new("AlbumTitle Title"))); left.albums
.push(Album::new(AlbumId::new("AlbumTitle Title")));
left.albums[0].meta.id.lib_id = AlbumLibId::Value(1); left.albums[0].meta.id.lib_id = AlbumLibId::Value(1);
right.albums.push(Album::new(AlbumId::new("alBum—tiTle 'title"))); right
right.albums.push(Album::new(AlbumId::new("AlbumTitle “Title”"))); .albums
.push(Album::new(AlbumId::new("alBum—tiTle 'title")));
right
.albums
.push(Album::new(AlbumId::new("AlbumTitle “Title”")));
// The first album will be merged, the second will be added. // The first album will be merged, the second will be added.
let mut expected = left.clone(); let mut expected = left.clone();
@ -626,4 +637,59 @@ mod tests {
let merged = left.merge(right); let merged = left.merge(right);
assert_eq!(expected, merged); assert_eq!(expected, merged);
} }
#[test]
fn merge_multiple_singletons() {
let mut left = Artist::new(ArtistId::new("Artist"));
let mut right = left.clone();
left.albums.push(Album::new(AlbumId::new("Singleton 1")));
left.albums.push(Album::new(AlbumId::new("Singleton 2")));
left.albums[0].meta.id.lib_id = AlbumLibId::Singleton;
left.albums[1].meta.id.lib_id = AlbumLibId::Singleton;
right.albums.push(Album::new(AlbumId::new("Singleton 1")));
right.albums.push(Album::new(AlbumId::new("Singleton 2")));
right.albums.push(Album::new(AlbumId::new("Singleton 3")));
right.albums[0].meta.id.lib_id = AlbumLibId::Singleton;
right.albums[2].meta.id.lib_id = AlbumLibId::Singleton;
// Expect first two albums to merge (including lib id) and the third to be added. However,
// the third one will lose its lib id due to no match in the primary.
let mut expected = left.clone();
expected.albums.push(right.albums.last().unwrap().clone());
expected.albums.last_mut().unwrap().meta.id.lib_id = AlbumLibId::None;
let merged = left.merge(right);
assert_eq!(expected, merged);
}
#[test]
fn merge_two_db_albums_to_one_lib_album_with_ids() {
let mut left = Artist::new(ArtistId::new("Artist"));
let mut right = left.clone();
let album = Album::new(AlbumId::new("Album"));
left.albums.push(album.clone());
left.albums[0].meta.id.lib_id = AlbumLibId::Value(1);
// In this test, one DB album has a lib id that matches that of the lib album. This is the
// one that we expect to merge while the second album should just be added.
right.albums.push(album.clone());
right.albums[0].meta.id.lib_id = AlbumLibId::Value(1);
right.albums[0].meta.id.mb_ref = AlbumMbRef::Some(
MbAlbumRef::from_uuid_str("00000000-0000-0000-0000-000000000000").unwrap(),
);
right.albums.push(album.clone());
right.albums[1].meta.id.mb_ref = AlbumMbRef::Some(
MbAlbumRef::from_uuid_str("11111111-1111-1111-1111-111111111111").unwrap(),
);
let expected = right.clone();
let merged = left.merge(right);
assert_eq!(expected, merged);
}
} }