diff --git a/pkg/cask/release_info.go b/pkg/cask/release_info.go index e060613..d4b5be7 100644 --- a/pkg/cask/release_info.go +++ b/pkg/cask/release_info.go @@ -28,10 +28,11 @@ func (s *ReleaseInfo) Asset(needles ...string) *ReleaseAsset { return assets[i].Filename < assets[j].Filename }) +assetsLoop: for _, a := range assets { for _, needle := range needles { if !strings.Contains(a.Filename, needle) { - continue + continue assetsLoop } } diff --git a/pkg/cask/release_info_test.go b/pkg/cask/release_info_test.go new file mode 100644 index 0000000..eefaba9 --- /dev/null +++ b/pkg/cask/release_info_test.go @@ -0,0 +1,80 @@ +package cask + +import ( + "testing" + + "github.com/stretchr/testify/assert" +) + +func TestAsset(t *testing.T) { + // Define test cases + tests := []struct { + name string + release ReleaseInfo + needles []string + want *ReleaseAsset + }{ + { + name: "single needle, exact match", + release: ReleaseInfo{ + Assets: map[string]*ReleaseAsset{ + "asset1": {Filename: "asset1.zip"}, + "asset2": {Filename: "asset2.zip"}, + }, + }, + needles: []string{"asset1"}, + want: &ReleaseAsset{Filename: "asset1.zip"}, + }, + { + name: "multiple needles, all", + release: ReleaseInfo{ + Assets: map[string]*ReleaseAsset{ + "asset1": {Filename: "asset1.zip"}, + "asset2": {Filename: "asset2.zip"}, + }, + }, + needles: []string{"zip", "asset1"}, + want: &ReleaseAsset{Filename: "asset1.zip"}, + }, + { + name: "multiple needles, one match", + release: ReleaseInfo{ + Assets: map[string]*ReleaseAsset{ + "asset1": {Filename: "asset1.zip"}, + "asset2": {Filename: "asset2.zip"}, + }, + }, + needles: []string{"rar", "asset2"}, + want: nil, + }, + { + name: "multiple needles, no match", + release: ReleaseInfo{ + Assets: map[string]*ReleaseAsset{ + "asset1": {Filename: "asset1.zip"}, + "asset2": {Filename: "asset2.zip"}, + }, + }, + needles: []string{"rar", "asset3"}, + want: nil, + }, + { + name: "no needles", + release: ReleaseInfo{ + Assets: map[string]*ReleaseAsset{ + "asset1": {Filename: "asset1.zip"}, + "asset2": {Filename: "asset2.zip"}, + }, + }, + needles: nil, + want: &ReleaseAsset{Filename: "asset1.zip"}, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + got := tt.release.Asset(tt.needles...) + + assert.Equal(t, tt.want, got) + }) + } +}