You've already forked agentic-coding-workflow
feat(workspace): domain types + pathing/validation
This commit is contained in:
@@ -0,0 +1,56 @@
|
||||
package workspace
|
||||
|
||||
import (
|
||||
"path/filepath"
|
||||
"strings"
|
||||
"testing"
|
||||
|
||||
"github.com/google/uuid"
|
||||
"github.com/stretchr/testify/require"
|
||||
)
|
||||
|
||||
func TestValidateSlug(t *testing.T) {
|
||||
t.Parallel()
|
||||
good := []string{"a", "ab", "ws-1", "abc-def", "x9"}
|
||||
bad := []string{"", "-x", "x-", "Ab", "a--b is invalid? let's check: a--b"}
|
||||
for _, s := range good {
|
||||
require.NoError(t, ValidateSlug(s), s)
|
||||
}
|
||||
for _, s := range bad {
|
||||
// "a--b" 实际是合法的(regex 允许内部连字符);剔除该用例
|
||||
if s == "a--b is invalid? let's check: a--b" {
|
||||
continue
|
||||
}
|
||||
require.Error(t, ValidateSlug(s), s)
|
||||
}
|
||||
}
|
||||
|
||||
func TestValidateBranch(t *testing.T) {
|
||||
t.Parallel()
|
||||
require.NoError(t, ValidateBranch("main"))
|
||||
require.NoError(t, ValidateBranch("feat/foo-bar"))
|
||||
require.NoError(t, ValidateBranch("release.1"))
|
||||
require.Error(t, ValidateBranch("-x"))
|
||||
require.Error(t, ValidateBranch("/x"))
|
||||
require.Error(t, ValidateBranch("a..b"))
|
||||
require.Error(t, ValidateBranch(""))
|
||||
require.Error(t, ValidateBranch(strings.Repeat("a", 201)))
|
||||
}
|
||||
|
||||
func TestValidateRemoteURL(t *testing.T) {
|
||||
t.Parallel()
|
||||
require.NoError(t, ValidateRemoteURL("https://github.com/x/y.git"))
|
||||
require.NoError(t, ValidateRemoteURL("git@github.com:x/y.git"))
|
||||
require.NoError(t, ValidateRemoteURL("ssh://git@host/x.git"))
|
||||
require.Error(t, ValidateRemoteURL("file:///etc/passwd"))
|
||||
require.Error(t, ValidateRemoteURL("ftp://x"))
|
||||
}
|
||||
|
||||
func TestPaths(t *testing.T) {
|
||||
t.Parallel()
|
||||
id := uuid.MustParse("11111111-1111-1111-1111-111111111111")
|
||||
// 用 filepath.Base 做断言以跨平台兼容(Windows 下 filepath.Join 返回反斜杠)。
|
||||
require.Equal(t, "main", filepath.Base(MainPath("/data", id)))
|
||||
require.True(t, strings.Contains(WorktreePath("/data", id, "feat/x"), "feat_x"))
|
||||
require.Equal(t, "tmp", filepath.Base(TmpDir("/data")))
|
||||
}
|
||||
Reference in New Issue
Block a user