0
0
mirror of https://github.com/go-gitea/gitea.git synced 2025-12-09 02:31:47 +01:00
gitea/modules/renderplugin/manifest_test.go
2025-12-06 15:13:35 -08:00

102 lines
3.0 KiB
Go

// Copyright 2025 The Gitea Authors. All rights reserved.
// SPDX-License-Identifier: MIT
package renderplugin
import (
"os"
"path/filepath"
"testing"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
)
func TestManifestNormalizeDefaults(t *testing.T) {
manifest := Manifest{
SchemaVersion: SupportedManifestVersion,
ID: " Example.Plugin ",
Name: " Demo Plugin ",
Version: " 1.0.0 ",
Description: "test",
Entry: "",
FilePatterns: []string{" *.TXT ", "README.md", ""},
}
require.NoError(t, manifest.Normalize())
assert.Equal(t, "example.plugin", manifest.ID)
assert.Equal(t, "render.js", manifest.Entry)
assert.Equal(t, []string{"*.TXT", "README.md"}, manifest.FilePatterns)
assert.Empty(t, manifest.Permissions)
}
func TestManifestNormalizeErrors(t *testing.T) {
base := Manifest{
SchemaVersion: SupportedManifestVersion,
ID: "example",
Name: "demo",
Version: "1.0",
Entry: "render.js",
FilePatterns: []string{"*.md"},
}
tests := []struct {
name string
mutate func(m *Manifest)
message string
}{
{"missing schema version", func(m *Manifest) { m.SchemaVersion = 0 }, "schemaVersion is required"},
{"unsupported schema", func(m *Manifest) { m.SchemaVersion = SupportedManifestVersion + 1 }, "not supported"},
{"invalid id", func(m *Manifest) { m.ID = "bad id" }, "manifest id"},
{"missing name", func(m *Manifest) { m.Name = "" }, "name is required"},
{"missing version", func(m *Manifest) { m.Version = "" }, "version is required"},
{"no patterns", func(m *Manifest) { m.FilePatterns = nil }, "at least one file pattern"},
{"invalid permission", func(m *Manifest) { m.Permissions = []string{"http://bad"} }, "manifest permission"},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
m := base
tt.mutate(&m)
err := m.Normalize()
require.Error(t, err)
assert.Contains(t, err.Error(), tt.message)
})
}
}
func TestLoadManifest(t *testing.T) {
dir := t.TempDir()
manifestJSON := `{
"schemaVersion": 1,
"id": "Example",
"name": "Example",
"version": "2.0.0",
"description": "demo",
"entry": "render.js",
"filePatterns": ["*.txt", "*.md"]
}`
path := filepath.Join(dir, "manifest.json")
require.NoError(t, os.WriteFile(path, []byte(manifestJSON), 0o644))
manifest, err := LoadManifest(dir)
require.NoError(t, err)
assert.Equal(t, "example", manifest.ID)
assert.Equal(t, []string{"*.md", "*.txt"}, manifest.FilePatterns)
}
func TestManifestNormalizePermissions(t *testing.T) {
manifest := Manifest{
SchemaVersion: SupportedManifestVersion,
ID: "perm",
Name: "perm",
Version: "1.0.0",
Entry: "render.js",
FilePatterns: []string{"*.md"},
Permissions: []string{" Example.com ", "api.example.com:8080", "example.com", ""},
}
require.NoError(t, manifest.Normalize())
assert.Equal(t, []string{"api.example.com:8080", "example.com"}, manifest.Permissions)
}