Files
k-mood/crates/domain/tests/song/song_test.rs
Gabriel Kaszewski 23d052278a
All checks were successful
CI / ci (push) Successful in 19m38s
changes
2026-08-26 20:58:14 +02:00

45 lines
1.3 KiB
Rust

use domain::song::{RecordingId, Song};
#[test]
fn a_song_needs_only_a_title_and_an_artist() {
let song = Song::new("Paranoid Android", "Radiohead", None, None).unwrap();
assert_eq!(song.title().value(), "Paranoid Android");
assert_eq!(song.artist().value(), "Radiohead");
assert!(song.album().is_none());
assert!(song.recording_id().is_none());
}
#[test]
fn a_song_records_its_album_and_external_identity_when_known() {
let recording = RecordingId::new("f5c7e7a2-0000-4000-8000-000000000001").unwrap();
let song = Song::new(
"Paranoid Android",
"Radiohead",
Some("OK Computer".into()),
Some(recording),
)
.unwrap();
assert_eq!(song.album().map(|a| a.value()), Some("OK Computer"));
assert!(song.recording_id().is_some());
}
#[test]
fn a_song_without_a_title_or_artist_is_rejected() {
assert!(Song::new("", "Radiohead", None, None).is_err());
assert!(Song::new("Paranoid Android", " ", None, None).is_err());
}
#[test]
fn a_recording_id_that_is_not_a_uuid_is_rejected() {
assert!(RecordingId::new("not-a-musicbrainz-id").is_err());
}
#[test]
fn a_blank_album_is_treated_as_absent() {
let song = Song::new("Airbag", "Radiohead", Some(" ".into()), None).unwrap();
assert!(song.album().is_none());
}