// SPDX-Licence-Identifier: EUPL-1.2 package api import ( "os" "testing" "dappco.re/go/core/build/pkg/build" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" ) func TestBuildProvider_Good_Identity(t *testing.T) { p := NewProvider(".", nil) assert.Equal(t, "build", p.Name()) assert.Equal(t, "/api/v1/build", p.BasePath()) } func TestBuildProvider_Good_Element(t *testing.T) { p := NewProvider(".", nil) el := p.Element() assert.Equal(t, "core-build-panel", el.Tag) assert.Equal(t, "/assets/core-build.js", el.Source) } func TestBuildProvider_Good_Channels(t *testing.T) { p := NewProvider(".", nil) channels := p.Channels() assert.Contains(t, channels, "build.started") assert.Contains(t, channels, "build.complete") assert.Contains(t, channels, "build.failed") assert.Contains(t, channels, "release.started") assert.Contains(t, channels, "release.complete") assert.Contains(t, channels, "sdk.generated") assert.Len(t, channels, 6) } func TestBuildProvider_Good_Describe(t *testing.T) { p := NewProvider(".", nil) routes := p.Describe() // Should have 9 endpoint descriptions assert.Len(t, routes, 9) // Verify key routes exist paths := make(map[string]string) for _, r := range routes { paths[r.Path] = r.Method } assert.Equal(t, "GET", paths["/config"]) assert.Equal(t, "GET", paths["/discover"]) assert.Equal(t, "POST", paths["/build"]) assert.Equal(t, "GET", paths["/artifacts"]) assert.Equal(t, "GET", paths["/release/version"]) assert.Equal(t, "GET", paths["/release/changelog"]) assert.Equal(t, "POST", paths["/release"]) assert.Equal(t, "GET", paths["/sdk/diff"]) assert.Equal(t, "POST", paths["/sdk/generate"]) } func TestBuildProvider_Good_DefaultProjectDir(t *testing.T) { p := NewProvider("", nil) assert.Equal(t, ".", p.projectDir) } func TestBuildProvider_Good_CustomProjectDir(t *testing.T) { p := NewProvider("/tmp/myproject", nil) assert.Equal(t, "/tmp/myproject", p.projectDir) } func TestBuildProvider_Good_NilHub(t *testing.T) { p := NewProvider(".", nil) // emitEvent should not panic with nil hub p.emitEvent("build.started", map[string]any{"test": true}) } func TestGetBuilder_Good_SupportedTypes(t *testing.T) { b, err := getBuilder(build.ProjectTypeGo) require.NoError(t, err) assert.Equal(t, "go", b.Name()) b, err = getBuilder(build.ProjectTypeWails) require.NoError(t, err) assert.Equal(t, "wails", b.Name()) } func TestGetBuilder_Bad_UnsupportedType(t *testing.T) { _, err := getBuilder(build.ProjectType("unknown")) assert.ErrorIs(t, err, os.ErrNotExist) } func TestBuildProvider_Good_ResolveDir(t *testing.T) { p := NewProvider("/tmp", nil) dir, err := p.resolveDir() require.NoError(t, err) assert.Equal(t, "/tmp", dir) } func TestBuildProvider_Good_ResolveDirRelative(t *testing.T) { p := NewProvider(".", nil) dir, err := p.resolveDir() require.NoError(t, err) // Should return an absolute path assert.True(t, len(dir) > 1 && dir[0] == '/') } func TestBuildProvider_Good_MediumSet(t *testing.T) { p := NewProvider(".", nil) assert.NotNil(t, p.medium, "medium should be set to io.Local") }