github.com/derat/nup@v0.0.0-20230418113745-15592ba7c620/cmd/nup/client/files/override_test.go (about) 1 // Copyright 2023 Daniel Erat. 2 // All rights reserved. 3 4 package files 5 6 import ( 7 "testing" 8 "time" 9 10 "github.com/derat/nup/cmd/nup/client" 11 "github.com/derat/nup/server/db" 12 "github.com/google/go-cmp/cmp" 13 ) 14 15 func TestApplyMetadataOverride(t *testing.T) { 16 orig := db.Song{ 17 Filename: "some-song.mp3", 18 Artist: "Old Artist", 19 Title: "Old Title", 20 Album: "Old Album", 21 AlbumArtist: "Old AlbumArtist", 22 DiscSubtitle: "Old DiscSubtitle", 23 AlbumID: "Old AlbumID", 24 RecordingID: "Old RecordingID", 25 Track: 1, 26 Disc: 2, 27 Date: time.Date(2023, 4, 26, 1, 2, 0, 0, time.UTC), 28 } 29 updated := db.Song{ 30 Filename: "some-song.mp3", 31 Artist: "New Artist", 32 Title: "New Title", 33 Album: "New Album", 34 AlbumArtist: "New AlbumArtist", 35 DiscSubtitle: "New DiscSubtitle", 36 AlbumID: "New AlbumID", 37 RecordingID: "New RecordingID", 38 OrigAlbumID: orig.AlbumID, 39 OrigRecordingID: orig.RecordingID, 40 Track: 3, 41 Disc: 4, 42 Date: time.Date(2021, 1, 2, 3, 4, 0, 0, time.UTC), 43 } 44 45 cfg := &client.Config{MetadataDir: t.TempDir()} 46 47 // Nothing should happen if the override file is missing. 48 got := orig 49 if err := applyMetadataOverride(cfg, &got); err != nil { 50 t.Fatal("applyMetadataOverride with no override failed:", err) 51 } else if diff := cmp.Diff(orig, got); diff != "" { 52 t.Error("applyMetadataOverride with no override modified song:\n" + diff) 53 } 54 55 // Update all of the fields via the override file. 56 if err := writeMetadataOverride(cfg, orig.Filename, genMetadataOverride(&orig, &updated)); err != nil { 57 t.Fatal(err) 58 } 59 60 got = orig 61 if err := applyMetadataOverride(cfg, &got); err != nil { 62 t.Fatal("applyMetadataOverride with full override failed:", err) 63 } else if diff := cmp.Diff(updated, got); diff != "" { 64 t.Error("applyMetadataOverride with full override updated song incorrectly:\n" + diff) 65 } 66 67 // Nothing should happen if the override file contains an empty object. 68 if err := writeMetadataOverride(cfg, orig.Filename, &MetadataOverride{}); err != nil { 69 t.Fatal(err) 70 } 71 got = orig 72 if err := applyMetadataOverride(cfg, &got); err != nil { 73 t.Fatal("applyMetadataOverride with empty override failed:", err) 74 } else if diff := cmp.Diff(orig, got); diff != "" { 75 t.Error("applyMetadataOverride with empty override modified song:\n" + diff) 76 } 77 }