44
crates/domain/tests/song/song_test.rs
Normal file
44
crates/domain/tests/song/song_test.rs
Normal file
@@ -0,0 +1,44 @@
|
||||
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());
|
||||
}
|
||||
Reference in New Issue
Block a user