45 lines
1.3 KiB
Rust
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());
|
|
}
|