package importer import ( "testing" "git.fabledsword.com/bvandeusen/minstrel/internal/release" ) func TestPlanUpgrade_ReplacesOnlyWhatItBetters(t *testing.T) { plan := []Placement{ {File: 0, Dest: "/music/A/B (2001)/A - B - 01 - One.flac", Disc: 1, Track: 1, Recording: "rec-1"}, {File: 1, Dest: "/music/A/B (2001)/A - B - 02 - Two.mp3", Disc: 1, Track: 2}, {File: 2, Dest: "/music/A/B (2001)/A - B - 03 - Three.flac", Disc: 1, Track: 3}, {File: 3, Dest: "/music/A/B (2001)/A - B - 04 - Four.flac", Disc: 1, Track: 4}, {File: 4, Dest: "/music/A/B (2001)/A - B - 05 - Five.flac", Disc: 1, Track: 5}, } newTiers := []release.Tier{release.TierLossless, release.TierLossyHigh, release.TierLossless, release.TierLossless, release.TierLossyLow} olds := []OldTrack{ // Matched by recording though its number is wrong: a 192 MP3. {Path: "/music/A/B/01 One.mp3", Recording: "rec-1", Disc: 1, Track: 9, Format: "mp3", Bytes: 4_800_000, Ms: 200_000}, // Same path as the new file, a 320 MP3: the new 320 is no better. {Path: "/music/A/B (2001)/A - B - 02 - Two.mp3", Disc: 1, Track: 2, Format: "mp3", Bytes: 8_000_000, Ms: 200_000}, // Already lossless: kept. {Path: "/music/A/B/03 Three.flac", Disc: 1, Track: 3, Format: "flac", Bytes: 22_000_000, Ms: 200_000}, // A video rip, even though lossless: replaced. {Path: "/music/A/B/04 Four (Official Video).flac", Disc: 0, Track: 4, Format: "flac", Bytes: 22_000_000, Ms: 200_000, Rip: true}, } steps := planUpgrade(plan, newTiers, olds) want := []struct { action string old int }{ {stepReplace, 0}, {stepKeep, 1}, {stepKeep, 2}, {stepReplace, 3}, {stepPlace, -1}, } for i, w := range want { if steps[i].Action != w.action || steps[i].Old != w.old { t.Errorf("placement %d: %s old %d, want %s old %d", i, steps[i].Action, steps[i].Old, w.action, w.old) } } } func TestPlanUpgrade_OverwritesAWorseFileOnItsOwnPath(t *testing.T) { dest := "/music/A/B (2001)/A - B - 01 - One.mp3" steps := planUpgrade( []Placement{{File: 0, Dest: dest, Disc: 1, Track: 1}}, []release.Tier{release.TierLossyHigh}, []OldTrack{{Path: dest, Disc: 1, Track: 1, Format: "mp3", Bytes: 3_200_000, Ms: 200_000}}, // 128 ) if steps[0].Action != stepOverwrite || steps[0].Old != 0 { t.Errorf("got %+v", steps[0]) } }