go-scm/marketplace/indexer_test.go
Virgil 905889a9f8
Some checks failed
Security Scan / security (push) Failing after 19s
Test / test (push) Failing after 1m37s
feat(marketplace): use compiled manifests in index build
Co-Authored-By: Virgil <virgil@lethean.io>
2026-04-02 14:41:52 +00:00

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