mirror of
https://github.com/zarzet/SpotiFLAC-Mobile.git
synced 2026-08-26 21:02:28 +02:00
182 lines
4.8 KiB
Go
182 lines
4.8 KiB
Go
package gobackend
|
|
|
|
import "testing"
|
|
|
|
func TestNormalizeLooseTitle_Separators(t *testing.T) {
|
|
got := normalizeLooseTitle("Doctor / Cops")
|
|
if got != "doctor cops" {
|
|
t.Fatalf("expected doctor cops, got %q", got)
|
|
}
|
|
|
|
got = normalizeLooseTitle("Doctor _ Cops")
|
|
if got != "doctor cops" {
|
|
t.Fatalf("expected doctor cops, got %q", got)
|
|
}
|
|
}
|
|
|
|
func TestNormalizeLooseTitle_EmojiAndSymbols(t *testing.T) {
|
|
got := normalizeLooseTitle("Music Of The Spheres 🌎✨")
|
|
if got != "music of the spheres" {
|
|
t.Fatalf("expected music of the spheres, got %q", got)
|
|
}
|
|
}
|
|
|
|
func TestTrackMatchesRequest_SongLinkBypassesArtistAndTitle(t *testing.T) {
|
|
req := DownloadRequest{
|
|
TrackName: "Ringišpil",
|
|
ArtistName: "Djordje Balasevic",
|
|
}
|
|
resolved := resolvedTrackInfo{
|
|
Title: "Completely Different Title",
|
|
ArtistName: "Totally Different Artist",
|
|
SkipNameVerification: true,
|
|
}
|
|
|
|
if !trackMatchesRequest(req, resolved, "test") {
|
|
t.Fatal("expected SongLink-resolved track to bypass artist/title verification")
|
|
}
|
|
}
|
|
|
|
func TestTrackMatchesRequest_SongLinkStillChecksDuration(t *testing.T) {
|
|
req := DownloadRequest{
|
|
TrackName: "Ringišpil",
|
|
ArtistName: "Djordje Balasevic",
|
|
DurationMS: 180000,
|
|
}
|
|
resolved := resolvedTrackInfo{
|
|
Title: "Completely Different Title",
|
|
ArtistName: "Totally Different Artist",
|
|
Duration: 240,
|
|
SkipNameVerification: true,
|
|
}
|
|
|
|
if trackMatchesRequest(req, resolved, "test") {
|
|
t.Fatal("expected SongLink-resolved track with large duration mismatch to be rejected")
|
|
}
|
|
}
|
|
|
|
func TestTrackMatchesRequestRejectsDifferentAlbumWithoutExactISRC(t *testing.T) {
|
|
req := DownloadRequest{
|
|
TrackName: "Bewafa",
|
|
ArtistName: "Imran Khan",
|
|
AlbumName: "Unforgettable",
|
|
ISRC: "GBUM70901234",
|
|
}
|
|
resolved := resolvedTrackInfo{
|
|
Title: "Bewafa",
|
|
ArtistName: "Imran Khan, Tarandeep Singh",
|
|
AlbumName: "Bewafa",
|
|
ISRC: "QZXYZ2600001",
|
|
}
|
|
|
|
if trackMatchesRequest(req, resolved, "test") {
|
|
t.Fatal("expected same-title cover from a different album to be rejected")
|
|
}
|
|
}
|
|
|
|
func TestTrackMatchesRequestAcceptsDifferentEditionWithExactISRC(t *testing.T) {
|
|
req := DownloadRequest{
|
|
TrackName: "Song",
|
|
AlbumName: "Original Album",
|
|
ISRC: "USRC17607839",
|
|
}
|
|
resolved := resolvedTrackInfo{
|
|
Title: "Song",
|
|
AlbumName: "Deluxe Collection",
|
|
ISRC: "usrc17607839",
|
|
}
|
|
|
|
if !trackMatchesRequest(req, resolved, "test") {
|
|
t.Fatal("expected an exact ISRC match to accept another release edition")
|
|
}
|
|
}
|
|
|
|
func TestTrackMatchesRequestAcceptsSameTrackFromDifferentRelease(t *testing.T) {
|
|
req := DownloadRequest{
|
|
TrackName: "Crossing Field",
|
|
ArtistName: "LiSA",
|
|
AlbumName: "Crossing Field - EP",
|
|
DurationMS: 233000,
|
|
}
|
|
resolved := resolvedTrackInfo{
|
|
Title: "Crossing Field",
|
|
ArtistName: "LiSA",
|
|
AlbumName: "LANDSPACE",
|
|
Duration: 233,
|
|
}
|
|
|
|
if !trackMatchesRequest(req, resolved, "test") {
|
|
t.Fatal("expected the same track to be accepted across release albums")
|
|
}
|
|
}
|
|
|
|
func TestTrackMatchesRequestRejectsAlbumMismatchForDifferentVersion(t *testing.T) {
|
|
req := DownloadRequest{
|
|
TrackName: "Song (Live)",
|
|
ArtistName: "Artist",
|
|
AlbumName: "Live at the Theatre",
|
|
}
|
|
resolved := resolvedTrackInfo{
|
|
Title: "Song",
|
|
ArtistName: "Artist",
|
|
AlbumName: "Studio Album",
|
|
}
|
|
|
|
if trackMatchesRequest(req, resolved, "test") {
|
|
t.Fatal("expected an album mismatch to reject a different track version")
|
|
}
|
|
}
|
|
|
|
func TestTrackMatchesRequestRejectsConflictingISRCDespiteStrongNames(t *testing.T) {
|
|
req := DownloadRequest{
|
|
TrackName: "Song",
|
|
ArtistName: "Artist",
|
|
AlbumName: "Original Album",
|
|
ISRC: "USAAA2600001",
|
|
}
|
|
resolved := resolvedTrackInfo{
|
|
Title: "Song",
|
|
ArtistName: "Artist",
|
|
AlbumName: "Other Album",
|
|
ISRC: "USAAA2600002",
|
|
}
|
|
|
|
if trackMatchesRequest(req, resolved, "test") {
|
|
t.Fatal("expected conflicting ISRCs to keep album verification strict")
|
|
}
|
|
}
|
|
|
|
func TestTrackMatchesRequestRejectsDurationMismatchAcrossReleases(t *testing.T) {
|
|
req := DownloadRequest{
|
|
TrackName: "Crossing Field",
|
|
ArtistName: "LiSA",
|
|
AlbumName: "Crossing Field - EP",
|
|
DurationMS: 233000,
|
|
}
|
|
resolved := resolvedTrackInfo{
|
|
Title: "Crossing Field",
|
|
ArtistName: "LiSA",
|
|
AlbumName: "LANDSPACE",
|
|
Duration: 280,
|
|
}
|
|
|
|
if trackMatchesRequest(req, resolved, "test") {
|
|
t.Fatal("expected a large duration mismatch to reject another recording")
|
|
}
|
|
}
|
|
|
|
func TestTitlesMatch_SeparatorVariants(t *testing.T) {
|
|
if !titlesMatch("Doctor / Cops", "Doctor _ Cops") {
|
|
t.Fatal("expected tidal titlesMatch to accept / vs _ variant")
|
|
}
|
|
}
|
|
|
|
func TestTitlesMatch_EmojiStrict(t *testing.T) {
|
|
if titlesMatch("🪐", "Higher Power") {
|
|
t.Fatal("expected emoji title not to match unrelated textual title")
|
|
}
|
|
if !titlesMatch("🪐", "🪐") {
|
|
t.Fatal("expected identical emoji titles to match")
|
|
}
|
|
}
|