109 lines
2.7 KiB
Go
109 lines
2.7 KiB
Go
// SPDX-License-Identifier: EUPL-1.2
|
|
|
|
package marketplace
|
|
|
|
import (
|
|
filepath "dappco.re/go/core/scm/internal/ax/filepathx"
|
|
"testing"
|
|
|
|
"dappco.re/go/core/io"
|
|
json "dappco.re/go/core/scm/internal/ax/jsonx"
|
|
"dappco.re/go/core/scm/manifest"
|
|
"github.com/stretchr/testify/assert"
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
func TestBuildIndex_Good_CategoriesAndRepoURLs_Good(t *testing.T) {
|
|
medium := io.NewMockMedium()
|
|
|
|
require.NoError(t, medium.Write("/repos/a/.core/manifest.yaml", `
|
|
code: a
|
|
name: Alpha
|
|
version: 1.0.0
|
|
sign: key-a
|
|
`))
|
|
require.NoError(t, medium.Write("/repos/b/.core/manifest.yaml", `
|
|
code: b
|
|
name: Beta
|
|
version: 1.0.0
|
|
sign: key-b
|
|
`))
|
|
require.NoError(t, medium.Write("/repos/c/.core/manifest.yaml", `
|
|
code: c
|
|
name: Gamma
|
|
version: 1.0.0
|
|
sign: key-c
|
|
`))
|
|
|
|
idx, err := BuildIndex(medium, []string{"/repos/a", "/repos/b", "/repos/c"}, IndexOptions{
|
|
ForgeURL: "https://forge.example.com",
|
|
Org: "core",
|
|
CategoryFn: func(code string) string {
|
|
switch code {
|
|
case "a", "b":
|
|
return "tools"
|
|
default:
|
|
return "products"
|
|
}
|
|
},
|
|
})
|
|
require.NoError(t, err)
|
|
|
|
require.Len(t, idx.Modules, 3)
|
|
assert.Equal(t, "a", idx.Modules[0].Code)
|
|
assert.Equal(t, "https://forge.example.com/core/a.git", idx.Modules[0].Repo)
|
|
assert.Equal(t, "tools", idx.Modules[0].Category)
|
|
assert.Equal(t, "key-a", idx.Modules[0].SignKey)
|
|
assert.Equal(t, []string{"products", "tools"}, idx.Categories)
|
|
}
|
|
|
|
func TestBuildIndex_Good_SkipsMissingManifest_Good(t *testing.T) {
|
|
medium := io.NewMockMedium()
|
|
|
|
require.NoError(t, medium.Write("/repos/one/.core/manifest.yaml", `
|
|
code: one
|
|
name: One
|
|
version: 1.0.0
|
|
sign: key-one
|
|
`))
|
|
|
|
idx, err := BuildIndex(medium, []string{"/repos/one", "/repos/missing"}, IndexOptions{})
|
|
require.NoError(t, err)
|
|
|
|
require.Len(t, idx.Modules, 1)
|
|
assert.Equal(t, "one", idx.Modules[0].Code)
|
|
assert.Empty(t, idx.Categories)
|
|
}
|
|
|
|
func TestBuildIndex_Good_PrefersCompiledManifest_Good(t *testing.T) {
|
|
medium := io.NewMockMedium()
|
|
|
|
repoDir := "/repos/compiled"
|
|
require.NoError(t, medium.EnsureDir(filepath.Join(repoDir, ".core")))
|
|
|
|
cm := &manifest.CompiledManifest{
|
|
Manifest: manifest.Manifest{
|
|
Code: "compiled",
|
|
Name: "Compiled Module",
|
|
Version: "2.0.0",
|
|
Sign: "key-compiled",
|
|
},
|
|
Commit: "abc123",
|
|
}
|
|
raw, err := json.Marshal(cm)
|
|
require.NoError(t, err)
|
|
require.NoError(t, medium.Write(filepath.Join(repoDir, "core.json"), string(raw)))
|
|
require.NoError(t, medium.Write(filepath.Join(repoDir, ".core", "manifest.yaml"), `
|
|
code: source
|
|
name: Source Module
|
|
version: 1.0.0
|
|
sign: key-source
|
|
`))
|
|
|
|
idx, err := BuildIndex(medium, []string{repoDir}, IndexOptions{})
|
|
require.NoError(t, err)
|
|
|
|
require.Len(t, idx.Modules, 1)
|
|
assert.Equal(t, "compiled", idx.Modules[0].Code)
|
|
assert.Equal(t, "key-compiled", idx.Modules[0].SignKey)
|
|
}
|