mirror of https://github.com/artifacthub/hub.git
258 lines
5.7 KiB
Go
258 lines
5.7 KiB
Go
package pkg
|
|
|
|
import (
|
|
"errors"
|
|
"os"
|
|
"strconv"
|
|
"testing"
|
|
|
|
"github.com/artifacthub/hub/internal/hub"
|
|
"github.com/stretchr/testify/assert"
|
|
)
|
|
|
|
func TestGetPackageMetadata(t *testing.T) {
|
|
t.Run("error reading package metadata file", func(t *testing.T) {
|
|
t.Parallel()
|
|
_, err := GetPackageMetadata("testdata/not-exists")
|
|
assert.Error(t, err)
|
|
assert.Contains(t, err.Error(), "error reading package metadata file")
|
|
assert.True(t, errors.Is(err, os.ErrNotExist))
|
|
})
|
|
|
|
t.Run("error unmarshaling package metadata file", func(t *testing.T) {
|
|
t.Parallel()
|
|
_, err := GetPackageMetadata("testdata/invalid")
|
|
assert.Error(t, err)
|
|
assert.Contains(t, err.Error(), "error unmarshaling package metadata file")
|
|
})
|
|
|
|
t.Run("error validating package metadata file", func(t *testing.T) {
|
|
t.Parallel()
|
|
_, err := GetPackageMetadata("testdata/no-version")
|
|
assert.Error(t, err)
|
|
assert.Contains(t, err.Error(), "error validating package metadata file")
|
|
})
|
|
|
|
t.Run("success with .yml", func(t *testing.T) {
|
|
t.Parallel()
|
|
_, err := GetPackageMetadata("testdata/valid1")
|
|
assert.NoError(t, err)
|
|
})
|
|
|
|
t.Run("success with .yaml", func(t *testing.T) {
|
|
t.Parallel()
|
|
_, err := GetPackageMetadata("testdata/valid2")
|
|
assert.NoError(t, err)
|
|
})
|
|
}
|
|
|
|
func TestPreparePackageFromMetadata(t *testing.T) {
|
|
testCases := []struct {
|
|
md *hub.PackageMetadata
|
|
expectedPkg *hub.Package
|
|
expectedErr error
|
|
}{
|
|
{
|
|
&hub.PackageMetadata{},
|
|
nil,
|
|
ErrInvalidMetadata,
|
|
},
|
|
{
|
|
&hub.PackageMetadata{
|
|
Version: "v1.0.0",
|
|
Name: "pkg1",
|
|
DisplayName: "Package 1",
|
|
CreatedAt: "2006-01-02T15:04:05Z",
|
|
Description: "Package description",
|
|
Digest: "0123456789",
|
|
License: "Apache-2.0",
|
|
HomeURL: "https://home.url",
|
|
AppVersion: "10.0.0",
|
|
PublisherID: "1234",
|
|
ContainersImages: []*hub.ContainerImage{
|
|
{
|
|
Image: "registry/org/image:tag",
|
|
},
|
|
},
|
|
Operator: false,
|
|
Deprecated: false,
|
|
Keywords: []string{
|
|
"kw1",
|
|
"kw2",
|
|
},
|
|
Links: []*hub.Link{
|
|
{
|
|
Name: "link1",
|
|
URL: "https://link1.url",
|
|
},
|
|
},
|
|
Readme: "Package readme",
|
|
Install: "Package install",
|
|
Changes: []string{
|
|
"feature 1",
|
|
"fix 1",
|
|
},
|
|
ContainsSecurityUpdates: true,
|
|
Prerelease: true,
|
|
Maintainers: []*hub.Maintainer{
|
|
{
|
|
Name: "maintainer1",
|
|
Email: "maintainer1@email.com",
|
|
},
|
|
},
|
|
Provider: &hub.Provider{
|
|
Name: "Package provider",
|
|
},
|
|
Recommendations: []*hub.Recommendation{
|
|
{
|
|
URL: "https://artifacthub.io/packages/helm/artifact-hub/artifact-hub",
|
|
},
|
|
},
|
|
},
|
|
&hub.Package{
|
|
Name: "pkg1",
|
|
IsOperator: false,
|
|
DisplayName: "Package 1",
|
|
Description: "Package description",
|
|
Keywords: []string{
|
|
"kw1",
|
|
"kw2",
|
|
},
|
|
HomeURL: "https://home.url",
|
|
Readme: "Package readme",
|
|
Install: "Package install",
|
|
Links: []*hub.Link{
|
|
{
|
|
Name: "link1",
|
|
URL: "https://link1.url",
|
|
},
|
|
},
|
|
Version: "1.0.0",
|
|
AppVersion: "10.0.0",
|
|
Digest: "0123456789",
|
|
Deprecated: false,
|
|
License: "Apache-2.0",
|
|
ContainersImages: []*hub.ContainerImage{
|
|
{
|
|
Image: "registry/org/image:tag",
|
|
},
|
|
},
|
|
Provider: "Package provider",
|
|
Changes: []string{
|
|
"feature 1",
|
|
"fix 1",
|
|
},
|
|
ContainsSecurityUpdates: true,
|
|
Prerelease: true,
|
|
Maintainers: []*hub.Maintainer{
|
|
{
|
|
Name: "maintainer1",
|
|
Email: "maintainer1@email.com",
|
|
},
|
|
},
|
|
Recommendations: []*hub.Recommendation{
|
|
{
|
|
URL: "https://artifacthub.io/packages/helm/artifact-hub/artifact-hub",
|
|
},
|
|
},
|
|
TS: 1136214245,
|
|
},
|
|
nil,
|
|
},
|
|
}
|
|
for i, tc := range testCases {
|
|
tc := tc
|
|
t.Run(strconv.Itoa(i), func(t *testing.T) {
|
|
t.Parallel()
|
|
pkg, err := PreparePackageFromMetadata(tc.md)
|
|
if tc.expectedErr == nil {
|
|
assert.Nil(t, err)
|
|
} else {
|
|
assert.True(t, errors.Is(err, tc.expectedErr))
|
|
}
|
|
assert.Equal(t, tc.expectedPkg, pkg)
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestValidatePackageMetadata(t *testing.T) {
|
|
t.Run("invalid metadata", func(t *testing.T) {
|
|
testCases := []struct {
|
|
md *hub.PackageMetadata
|
|
errMsg string
|
|
}{
|
|
{
|
|
&hub.PackageMetadata{},
|
|
"version not provided",
|
|
},
|
|
{
|
|
&hub.PackageMetadata{
|
|
Version: "invalid",
|
|
},
|
|
"invalid version (semver expected)",
|
|
},
|
|
{
|
|
&hub.PackageMetadata{
|
|
Version: "1.0.0",
|
|
},
|
|
"name not provided",
|
|
},
|
|
{
|
|
&hub.PackageMetadata{
|
|
Version: "1.0.0",
|
|
Name: "pkg1",
|
|
},
|
|
"display name not provided",
|
|
},
|
|
{
|
|
&hub.PackageMetadata{
|
|
Version: "1.0.0",
|
|
Name: "pkg1",
|
|
DisplayName: "Package 1",
|
|
},
|
|
"createdAt not provided",
|
|
},
|
|
{
|
|
&hub.PackageMetadata{
|
|
Version: "1.0.0",
|
|
Name: "pkg1",
|
|
DisplayName: "Package 1",
|
|
CreatedAt: "2006-01-02 15:04",
|
|
},
|
|
"invalid createdAt (RFC3339 expected)",
|
|
},
|
|
{
|
|
&hub.PackageMetadata{
|
|
Version: "1.0.0",
|
|
Name: "pkg1",
|
|
DisplayName: "Package 1",
|
|
CreatedAt: "2006-01-02T15:04:05Z",
|
|
},
|
|
"description not provided",
|
|
},
|
|
}
|
|
for _, tc := range testCases {
|
|
tc := tc
|
|
t.Run(tc.errMsg, func(t *testing.T) {
|
|
t.Parallel()
|
|
err := ValidatePackageMetadata(tc.md)
|
|
assert.True(t, errors.Is(err, ErrInvalidMetadata))
|
|
assert.Contains(t, err.Error(), tc.errMsg)
|
|
})
|
|
}
|
|
})
|
|
|
|
t.Run("valid metadata", func(t *testing.T) {
|
|
t.Parallel()
|
|
md := &hub.PackageMetadata{
|
|
Version: "1.0.0",
|
|
Name: "pkg1",
|
|
DisplayName: "Package 1",
|
|
CreatedAt: "2006-01-02T15:04:05Z",
|
|
Description: "Package description",
|
|
}
|
|
err := ValidatePackageMetadata(md)
|
|
assert.Nil(t, err)
|
|
})
|
|
}
|