mirror of
https://github.com/zarzet/SpotiFLAC-Mobile.git
synced 2026-07-07 05:07:59 +02:00
101 lines
3.0 KiB
Go
101 lines
3.0 KiB
Go
package gobackend
|
|
|
|
import "testing"
|
|
|
|
func TestCrossExtensionShareUsesAlbumCollectionItems(t *testing.T) {
|
|
ext := &loadedExtension{
|
|
Manifest: &ExtensionManifest{
|
|
Capabilities: map[string]interface{}{
|
|
"shareUrlTemplates": map[string]interface{}{
|
|
"album": "https://music.apple.com/us/album/{id}",
|
|
},
|
|
},
|
|
},
|
|
}
|
|
tracks := []ExtTrackMetadata{
|
|
{
|
|
ID: "1440783617",
|
|
Name: "Nevermind",
|
|
Artists: "Nirvana",
|
|
ItemType: "album",
|
|
},
|
|
}
|
|
|
|
best := bestAlbumTrack(tracks, "Nevermind", "Nirvana")
|
|
if best == nil {
|
|
t.Fatal("expected album collection item to match")
|
|
}
|
|
if url := resolveCollectionShareURL(ext, "album", best); url != "https://music.apple.com/us/album/1440783617" {
|
|
t.Fatalf("album share URL = %q", url)
|
|
}
|
|
}
|
|
|
|
func TestCrossExtensionShareUsesArtistCollectionItems(t *testing.T) {
|
|
ext := &loadedExtension{
|
|
Manifest: &ExtensionManifest{
|
|
Capabilities: map[string]interface{}{
|
|
"shareUrlTemplates": map[string]interface{}{
|
|
"artist": "https://music.youtube.com/browse/{id}",
|
|
},
|
|
},
|
|
},
|
|
}
|
|
tracks := []ExtTrackMetadata{
|
|
{
|
|
ID: "UCrPe3hLA51968GwxHSZ1llw",
|
|
Name: "Nirvana",
|
|
ItemType: "artist",
|
|
},
|
|
}
|
|
|
|
best := bestArtistTrack(tracks, "Nirvana")
|
|
if best == nil {
|
|
t.Fatal("expected artist collection item to match")
|
|
}
|
|
if url := resolveCollectionShareURL(ext, "artist", best); url != "https://music.youtube.com/browse/UCrPe3hLA51968GwxHSZ1llw" {
|
|
t.Fatalf("artist share URL = %q", url)
|
|
}
|
|
}
|
|
|
|
func TestCrossExtensionShareCacheKeyIsProviderOrderStable(t *testing.T) {
|
|
apple := &extensionProviderWrapper{
|
|
extension: &loadedExtension{
|
|
ID: "apple",
|
|
SourceDir: "/extensions/apple",
|
|
Manifest: &ExtensionManifest{DisplayName: "Apple Music"},
|
|
},
|
|
}
|
|
qobuz := &extensionProviderWrapper{
|
|
extension: &loadedExtension{
|
|
ID: "qobuz",
|
|
SourceDir: "/extensions/qobuz",
|
|
Manifest: &ExtensionManifest{DisplayName: "Qobuz"},
|
|
},
|
|
}
|
|
|
|
first := crossExtensionShareCacheKey("Nevermind", "Nirvana", "album", "spotify", []*extensionProviderWrapper{apple, qobuz})
|
|
second := crossExtensionShareCacheKey("Nevermind", "Nirvana", "album", "spotify", []*extensionProviderWrapper{qobuz, apple})
|
|
if first != second {
|
|
t.Fatalf("cache key should not depend on provider order:\n%s\n%s", first, second)
|
|
}
|
|
}
|
|
|
|
func TestCrossExtensionShareCacheableSkipsTransientErrors(t *testing.T) {
|
|
cacheable := []CrossExtensionShareResult{
|
|
{ExtensionID: "apple", Found: true, URL: "https://music.apple.com/us/album/1"},
|
|
{ExtensionID: "qobuz", Error: "album not found"},
|
|
{ExtensionID: "tidal", Error: "no results"},
|
|
}
|
|
if !crossExtensionShareResultsCacheable(cacheable) {
|
|
t.Fatal("expected found and deterministic not-found results to be cacheable")
|
|
}
|
|
|
|
transient := []CrossExtensionShareResult{
|
|
{ExtensionID: "apple", Found: true, URL: "https://music.apple.com/us/album/1"},
|
|
{ExtensionID: "qobuz", Error: "request failed: timeout"},
|
|
}
|
|
if crossExtensionShareResultsCacheable(transient) {
|
|
t.Fatal("expected transient extension errors to skip cache")
|
|
}
|
|
}
|