From 89a5fdc4e50b141e8ea5f167214908ab240bea20 Mon Sep 17 00:00:00 2001 From: ari melody Date: Fri, 31 Jul 2026 05:14:19 +0100 Subject: [PATCH] refreshed release model tests: 100% coverage! --- model/release_test.go | 292 ++++++++++++++++++++---------------------- 1 file changed, 142 insertions(+), 150 deletions(-) diff --git a/model/release_test.go b/model/release_test.go index b0ddaf5..fc0e221 100644 --- a/model/release_test.go +++ b/model/release_test.go @@ -1,157 +1,149 @@ package model import ( - "testing" - "time" + "strings" + "testing" + "time" + + "gotest.tools/v3/assert" ) -func Test_Release_DescriptionHTML(t *testing.T) { - release := Release{ - Description: "this is\na test\ndescription!", - } +func Test_Release(t *testing.T) { + t.Run("prints correct description HTML", func(t *testing.T) { + release := Release{ + Description: "this is\na test\ndescription!", + } - // descriptions are set by privileged users, - // so we'll allow HTML injection here - want := "this is
a test
description!" - got := release.GetDescriptionHTML() - if want != string(got) { - t.Errorf(`release description incorrectly formatted (want "%s", got "%s")`, want, got) - } -} - -func Test_Release_ReleaseDate(t *testing.T) { - release := Release{ - ReleaseDate: time.Date(2025, time.July, 26, 16, 0, 0, 0, time.UTC), - } - - want := "2025-07-26T16:00" - got := release.TextReleaseDate() - if want != got { - t.Errorf(`release date incorrectly formatted (want "%s", got "%s")`, want, got) - } - - want = "26 July 2025" - got = release.PrintReleaseDate() - if want != got { - t.Errorf(`release date (print) incorrectly formatted (want "%s", got "%s")`, want, got) - } -} - -func Test_Release_Artwork(t *testing.T) { - want := "testartwork.png" - release := Release{ Artwork: want } - - got := release.GetArtwork() - if want != got { - t.Errorf(`correct value not returned when artwork is populated (want "%s", got "%s")`, want, got) - } - - release = Release{} - - want = "/img/default-cover-art.png" - got = release.GetArtwork() - if want != got { - t.Errorf(`default value not returned when artwork is empty (want "%s", got "%s")`, want, got) - } -} - -func Test_Release_IsSingle(t *testing.T) { - release := Release{ - Tracks: []*Track{}, - } - - if release.IsSingle() { - t.Errorf("IsSingle() == true when no tracks are present") - } - - release.Tracks = append(release.Tracks, &Track{}) - if !release.IsSingle() { - t.Errorf("IsSingle() == false when one track is present") - } - - release.Tracks = append(release.Tracks, &Track{}) - if release.IsSingle() { - t.Errorf("IsSingle() == true when >1 tracks are present") - } -} - -func Test_Release_IsReleased(t *testing.T) { - release := Release { - ReleaseDate: time.Now(), - } - - if !release.IsReleased() { - t.Errorf("IsRelease() == false when release date in the past") - } - - release.ReleaseDate = time.Now().Add(time.Hour) - if release.IsReleased() { - t.Errorf("IsRelease() == true when release date in the future") - } -} - -func Test_Release_PrintArtists(t *testing.T) { - artist1 := "ari melody" - artist2 := "aridoodle" - artist3 := "idk" - artist4 := "guest" - - release := Release { - Credits: []*Credit{ - { Artist: Artist{ Name: artist1 }, Primary: true }, - { Artist: Artist{ Name: artist2 }, Primary: true }, - { Artist: Artist{ Name: artist3 }, Primary: false }, - { Artist: Artist{ Name: artist4 }, Primary: true }, - }, - } - - { - want := []string{ artist1, artist2, artist4 } - got := release.GetUniqueArtistNames(true) - if len(want) != len(got) { - t.Errorf(`len(GetUniqueArtistNames) (primary only) == %d, want %d`, len(got), len(want)) - } - for i := range got { - if want[i] != got[i] { - t.Errorf(`GetUniqueArtistNames[%d] (primary only) == %s, want %s`, i, got[i], want[i]) - } - } - - want = []string{ artist1, artist2, artist3, artist4 } - got = release.GetUniqueArtistNames(false) - if len(want) != len(got) { - t.Errorf(`len(GetUniqueArtistNames) == %d, want %d`, len(got), len(want)) - } - for i := range got { - if want[i] != got[i] { - t.Errorf(`GetUniqueArtistNames[%d] == %s, want %s`, i, got[i], want[i]) - } - } - } - - { - want := "ari melody, aridoodle & guest" - got := release.PrintArtists(true, true) - if want != got { - t.Errorf(`PrintArtists (primary only, ampersand) == "%s", want "%s"`, want, got) - } - - want = "ari melody, aridoodle, guest" - got = release.PrintArtists(true, false) - if want != got { - t.Errorf(`PrintArtists (primary only) == "%s", want "%s"`, want, got) - } - - want = "ari melody, aridoodle, idk & guest" - got = release.PrintArtists(false, true) - if want != got { - t.Errorf(`PrintArtists (all, ampersand) == "%s", want "%s"`, want, got) - } - - want = "ari melody, aridoodle, idk, guest" - got = release.PrintArtists(false, false) - if want != got { - t.Errorf(`PrintArtists (all) == "%s", want "%s"`, want, got) - } - } + // descriptions are set by privileged users, + // so we'll allow HTML injection here + assert.Equal( + t, + string(release.GetDescriptionHTML()), + "this is
a test
description!", + ) + }) + + t.Run("prints correct release date", func(t *testing.T) { + release := Release{ + ReleaseDate: time.Date(2025, time.July, 26, 16, 0, 0, 0, time.UTC), + } + + assert.Equal(t, release.TextReleaseDate(), "2025-07-26T16:00") + assert.Equal(t, release.PrintReleaseDate(), "26 July 2025") + }) + + t.Run("returns correct artwork", func(t *testing.T) { + artwork := "testartwork.png" + release := Release{ Artwork: artwork } + assert.Equal(t, release.GetArtwork(), artwork) + }) + + t.Run("returns placeholder artwork when empty", func(t *testing.T) { + release := Release{} + assert.Equal(t, release.GetArtwork(), "/img/default-cover-art.png") + }) + + t.Run("singles", func(t *testing.T) { + release := Release{ + Tracks: []*Track{}, + } + + t.Run("false when no tracks are present", func(t *testing.T) { + assert.Equal(t, release.IsSingle(), false) + }) + + release.Tracks = append(release.Tracks, &Track{}) + t.Run("true when one track is present", func(t *testing.T) { + assert.Equal(t, release.IsSingle(), true) + }) + + release.Tracks = append(release.Tracks, &Track{}) + t.Run("false when >1 tracks are present", func(t *testing.T) { + assert.Equal(t, release.IsSingle(), false) + }) + }) + + t.Run("released", func(t *testing.T) { + release := Release { + ReleaseDate: time.Now(), + } + + t.Run("true when release date in the past", func(t *testing.T) { + assert.Equal(t, release.IsReleased(), true) + }) + + release.ReleaseDate = time.Now().Add(time.Hour) + t.Run("false when release date in the future", func(t *testing.T) { + assert.Equal(t, release.IsReleased(), false) + }) + }) + + t.Run("printing artists", func(t *testing.T) { + artist1 := "ari melody" + artist2 := "aridoodle" + artist3 := "idk" + artist4 := "guest" + + release := Release{} + t.Run("prints \"Unknown Artist\" when release has no credits", func(t *testing.T) { + assert.Equal(t, release.PrintArtists(false, true), "Unknown Artist") + }) + + release.Credits = append( + release.Credits, + &Credit{ Artist: Artist{ Name: artist1 }, Primary: true }, + ) + t.Run("prints ONLY first artist name when release has one credit", func(t *testing.T) { + assert.Equal(t, release.PrintArtists(false, true), artist1) + }) + + release.Credits = append(release.Credits, []*Credit{ + { Artist: Artist{ Name: artist2 }, Primary: true }, + { Artist: Artist{ Name: artist3 }, Primary: false }, + { Artist: Artist{ Name: artist4 }, Primary: true }, + }...) + t.Run("can get only unique primary artist names", func(t *testing.T) { + assert.Equal( + t, + strings.Join(release.GetUniqueArtistNames(true), " "), + strings.Join([]string{ artist1, artist2, artist4 }, " "), + ) + }) + t.Run("can get only unique artist names", func(t *testing.T) { + assert.Equal( + t, + strings.Join(release.GetUniqueArtistNames(false), " "), + strings.Join([]string{ artist1, artist2, artist3, artist4 }, " "), + ) + }) + + t.Run("can print only primary artists, with ampersands", func(t *testing.T) { + assert.Equal( + t, + release.PrintArtists(true, true), + "ari melody, aridoodle & guest", + ) + }) + t.Run("can print only primary artists, without ampersands", func(t *testing.T) { + assert.Equal( + t, + release.PrintArtists(true, false), + "ari melody, aridoodle, guest", + ) + }) + t.Run("can print all artists, with ampersands", func(t *testing.T) { + assert.Equal( + t, + release.PrintArtists(false, true), + "ari melody, aridoodle, idk & guest", + ) + }) + t.Run("can print all artists, without ampersands", func(t *testing.T) { + assert.Equal( + t, + release.PrintArtists(false, false), + "ari melody, aridoodle, idk, guest", + ) + }) + }) }