hub/internal/tracker/source/helmplugin/helmplugin_test.go

106 lines
3.1 KiB
Go

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)
})
}