constellation/internal/api/versionsapi/latest_test.go

213 lines
4.1 KiB
Go
Raw Normal View History

/*
Copyright (c) Edgeless Systems GmbH
SPDX-License-Identifier: AGPL-3.0-only
*/
package versionsapi
import (
"testing"
"github.com/edgelesssys/constellation/v2/internal/constants"
"github.com/stretchr/testify/assert"
)
func TestLatestJSONPath(t *testing.T) {
testCases := map[string]struct {
list Latest
wantPath string
}{
"latest list": {
list: Latest{
Ref: "test-ref",
Stream: "nightly",
Kind: VersionKindImage,
},
wantPath: constants.CDNAPIPrefix + "/ref/test-ref/stream/nightly/versions/latest/image.json",
},
"latest list release": {
list: Latest{
Ref: ReleaseRef,
Stream: "stable",
Kind: VersionKindImage,
},
wantPath: constants.CDNAPIPrefix + "/ref/-/stream/stable/versions/latest/image.json",
},
}
for name, tc := range testCases {
t.Run(name, func(t *testing.T) {
assert.Equal(t, tc.wantPath, tc.list.JSONPath())
})
}
}
func TestLatestURL(t *testing.T) {
testCases := map[string]struct {
list Latest
wantURL string
wantPath string
}{
"latest list": {
list: Latest{
Ref: "test-ref",
Stream: "nightly",
Kind: VersionKindImage,
},
wantURL: constants.CDNRepositoryURL + "/" + constants.CDNAPIPrefix + "/ref/test-ref/stream/nightly/versions/latest/image.json",
},
"latest list release": {
list: Latest{
Ref: ReleaseRef,
Stream: "stable",
Kind: VersionKindImage,
},
wantURL: constants.CDNRepositoryURL + "/" + constants.CDNAPIPrefix + "/ref/-/stream/stable/versions/latest/image.json",
},
}
for name, tc := range testCases {
t.Run(name, func(t *testing.T) {
assert := assert.New(t)
url, err := tc.list.URL()
assert.NoError(err)
assert.Equal(tc.wantURL, url)
})
}
}
func TestLatestValidate(t *testing.T) {
testCases := map[string]struct {
list Latest
wantErr bool
}{
"valid": {
list: Latest{
Ref: "test-ref",
Stream: "nightly",
Kind: VersionKindImage,
Version: "v1.0.0",
},
},
"invalid ref": {
list: Latest{
Ref: "",
Stream: "nightly",
Kind: VersionKindImage,
Version: "v1.0.0",
},
wantErr: true,
},
"invalid stream": {
list: Latest{
Ref: "test-ref",
Stream: "invalid-stream",
Kind: VersionKindImage,
Version: "v1.0.0",
},
wantErr: true,
},
"invalid kind": {
list: Latest{
Ref: "test-ref",
Stream: "nightly",
Kind: VersionKindUnknown,
Version: "v1.0.0",
},
wantErr: true,
},
"invalid version": {
list: Latest{
Ref: "test-ref",
Stream: "nightly",
Kind: VersionKindImage,
Version: "",
},
wantErr: true,
},
}
for name, tc := range testCases {
t.Run(name, func(t *testing.T) {
if tc.wantErr {
assert.Error(t, tc.list.Validate())
} else {
assert.NoError(t, tc.list.Validate())
}
})
}
}
func TestLatestValidateRequest(t *testing.T) {
testCases := map[string]struct {
list Latest
wantErr bool
}{
"valid": {
list: Latest{
Ref: "test-ref",
Stream: "nightly",
Kind: VersionKindImage,
},
},
"invalid ref": {
list: Latest{
Ref: "",
Stream: "nightly",
Kind: VersionKindImage,
},
wantErr: true,
},
"invalid stream": {
list: Latest{
Ref: "test-ref",
Stream: "invalid-stream",
Kind: VersionKindImage,
},
wantErr: true,
},
"invalid kind": {
list: Latest{
Ref: "test-ref",
Stream: "nightly",
Kind: VersionKindUnknown,
},
wantErr: true,
},
"version not empty": {
list: Latest{
Ref: "test-ref",
Stream: "nightly",
Kind: VersionKindImage,
Version: "v1.1.1",
},
wantErr: true,
},
}
for name, tc := range testCases {
t.Run(name, func(t *testing.T) {
if tc.wantErr {
assert.Error(t, tc.list.ValidateRequest())
} else {
assert.NoError(t, tc.list.ValidateRequest())
}
})
}
}
func TestLatestShortPath(t *testing.T) {
assert := assert.New(t)
latest := Latest{
Ref: "test-ref",
Stream: "nightly",
Kind: VersionKindImage,
Version: "v1.0.0",
}
assert.Equal(shortPath(latest.Ref, latest.Stream, latest.Version), latest.ShortPath())
}