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  }