package helmplugin import ( "testing" "github.com/artifacthub/hub/internal/hub" "github.com/artifacthub/hub/internal/pkg" "github.com/artifacthub/hub/internal/tracker/source" "github.com/stretchr/testify/assert" ) func TestTrackerSource(t *testing.T) { t.Run("no packages in path", func(t *testing.T) { t.Parallel() // Setup services and expectations sw := source.NewTestsServicesWrapper() i := &hub.TrackerSourceInput{ Repository: &hub.Repository{}, BasePath: "testdata/path1", Svc: sw.Svc, } // Run test and check expectations packages, err := NewTrackerSource(i).GetPackagesAvailable() assert.Equal(t, map[string]*hub.Package{}, packages) assert.NoError(t, err) sw.AssertExpectations(t) }) t.Run("invalid package metadata file", func(t *testing.T) { t.Parallel() // Setup services and expectations sw := source.NewTestsServicesWrapper() i := &hub.TrackerSourceInput{ Repository: &hub.Repository{}, BasePath: "testdata/path2", Svc: sw.Svc, } expectedErr := "error getting plugin metadata (path: testdata/path2/plugin.yaml): error unmarshaling plugin metadata file: error converting YAML to JSON: yaml: line 3: found unexpected end of stream" sw.Ec.On("Append", i.Repository.RepositoryID, expectedErr).Return() // Run test and check expectations packages, err := NewTrackerSource(i).GetPackagesAvailable() assert.Equal(t, map[string]*hub.Package{}, packages) assert.NoError(t, err) sw.AssertExpectations(t) }) t.Run("invalid version in package metadata file", func(t *testing.T) { t.Parallel() // Setup services and expectations sw := source.NewTestsServicesWrapper() i := &hub.TrackerSourceInput{ Repository: &hub.Repository{}, BasePath: "testdata/path3", Svc: sw.Svc, } expectedErr := "error getting plugin metadata (path: testdata/path3/plugin.yaml): error validating plugin metadata: 1 error occurred:\n\t* invalid version (semver expected): invalid semantic version\n\n" sw.Ec.On("Append", i.Repository.RepositoryID, expectedErr).Return() // Run test and check expectations packages, err := NewTrackerSource(i).GetPackagesAvailable() assert.Equal(t, map[string]*hub.Package{}, packages) assert.NoError(t, err) sw.AssertExpectations(t) }) t.Run("one package returned, no errors", func(t *testing.T) { t.Parallel() // Setup services and expectations sw := source.NewTestsServicesWrapper() i := &hub.TrackerSourceInput{ Repository: &hub.Repository{}, BasePath: "testdata/path4", Svc: sw.Svc, } // Run test and check expectations p := &hub.Package{ Name: "test-plugin", Keywords: []string{"helm", "helm-plugin"}, Description: "This is a sample test plugin", Version: "0.1.0", Readme: "This is the readme file of the plugin\n", Repository: i.Repository, License: "Apache-2.0", Links: []*hub.Link{ { Name: "Source", URL: i.Repository.URL, }, }, } packages, err := NewTrackerSource(i).GetPackagesAvailable() assert.Equal(t, map[string]*hub.Package{ pkg.BuildKey(p): p, }, packages) assert.NoError(t, err) sw.AssertExpectations(t) }) }