[WIP] music platform user data scraper
teal-fm atproto
31
fork

Configure Feed

Select the types of activity you want to include in your feed.

Add test for generateUploadHash

+60
+60
service/applemusic/applemusic_test.go
··· 1 + package applemusic 2 + 3 + import ( 4 + "strings" 5 + "testing" 6 + ) 7 + 8 + // Helper to create AppleRecentTrack for testing 9 + func makeTestTrack(name, album, artist string) *AppleRecentTrack { 10 + track := &AppleRecentTrack{} 11 + track.Attributes.Name = name 12 + track.Attributes.AlbumName = album 13 + track.Attributes.ArtistName = artist 14 + return track 15 + } 16 + 17 + func TestGenerateUploadHash(t *testing.T) { 18 + tests := []struct { 19 + name string 20 + track *AppleRecentTrack 21 + wantHash string 22 + }{ 23 + { 24 + name: "basic track", 25 + track: makeTestTrack("Test Song", "Test Album", "Test Artist"), 26 + wantHash: "am_uploaded_ec50bb20ebeddc6f04cb65bcff156fed3c59d7e311e3d3efbbea506c3f8ad5ae", 27 + }, 28 + { 29 + name: "track with different data", 30 + track: makeTestTrack("Collaboration", "Best Hits", "Artist One"), 31 + wantHash: "am_uploaded_c387e87af520fd4dae9b9cb872bd9cfbc8f7a88ca1b49d874dc1045183ba43c3", 32 + }, 33 + { 34 + name: "track with empty album", 35 + track: makeTestTrack("Single Track", "", "Solo Artist"), 36 + wantHash: "am_uploaded_f73402f47a46c5ff050b64a86d5a1fcbaa20a734a8963f458dca81be290731f7", 37 + }, 38 + } 39 + 40 + for _, tt := range tests { 41 + t.Run(tt.name, func(t *testing.T) { 42 + got := generateUploadHash(tt.track) 43 + 44 + // The hash should be prefixed with "am_uploaded_" so that it's clear it's an uploaded Apple Music track 45 + if !strings.HasPrefix(got, "am_uploaded_") { 46 + t.Errorf("generateUploadHash() = %v, want prefix 'am_uploaded_'", got) 47 + } 48 + 49 + if got != tt.wantHash { 50 + t.Errorf("generateUploadHash() = %v, want %v", got, tt.wantHash) 51 + } 52 + 53 + // Hash is deterministic -- same track will return same hash 54 + got2 := generateUploadHash(tt.track) 55 + if got != got2 { 56 + t.Errorf("generateUploadHash() is not deterministic: first=%v, second=%v", got, got2) 57 + } 58 + }) 59 + } 60 + }