go-build/pkg/build/xcode_cloud_test.go
Codex 19fff219e2 chore(go-build): migrate 7 stale core/{api,cli,i18n,io,log,process,ws} + inference deps per AX-6
go.mod + 142 *.go files updated. Also swept dappco.re/go/core/inference
to satisfy the no-core/ verification constraint.

Closes tasks.lthn.sh/view.php?id=591

Co-authored-by: Codex <noreply@openai.com>
2026-04-24 22:05:09 +01:00

198 lines
8.9 KiB
Go

package build
import (
"testing"
"dappco.re/go/build/internal/ax"
"dappco.re/go/io"
)
func TestXcodeCloud_HasXcodeCloudConfig_Good(t *testing.T) {
if HasXcodeCloudConfig(nil) {
t.Fatal("expected false")
}
if (HasXcodeCloudConfig(&BuildConfig{})) {
t.Fatal("expected false")
}
if !(HasXcodeCloudConfig(&BuildConfig{Apple: AppleConfig{XcodeCloud: XcodeCloudConfig{Workflow: "CoreGUI Release"}}})) {
t.Fatal("expected true")
}
if !(HasXcodeCloudConfig(&BuildConfig{Apple: AppleConfig{XcodeCloud: XcodeCloudConfig{Triggers: []XcodeCloudTrigger{{Branch: "main", Action: "testflight"}}}}})) {
t.Fatal("expected true")
}
}
func TestXcodeCloud_GenerateXcodeCloudScripts_Good(t *testing.T) {
scripts := GenerateXcodeCloudScripts("/tmp/project", &BuildConfig{
Project: Project{
Name: "Core",
Binary: "Core",
},
Apple: AppleConfig{
BundleID: "ai.lthn.core",
TeamID: "ABC123DEF4",
Arch: "universal",
Notarise: boolPtr(false),
DMG: boolPtr(true),
AppStore: boolPtr(true),
},
})
if len(scripts) != 3 {
t.Fatalf("want len %v, got %v", 3, len(scripts))
}
if !stdlibAssertContains(scripts[XcodeCloudPostCloneScriptName], "go install github.com/wailsapp/wails/v3/cmd/wails3@latest") {
t.Fatalf("expected %v to contain %v", scripts[XcodeCloudPostCloneScriptName], "go install github.com/wailsapp/wails/v3/cmd/wails3@latest")
}
if !stdlibAssertContains(scripts[XcodeCloudPostCloneScriptName], "find_visible_files()") {
t.Fatalf("expected %v to contain %v", scripts[XcodeCloudPostCloneScriptName], "find_visible_files()")
}
if !stdlibAssertContains(scripts[XcodeCloudPostCloneScriptName], "-path './.*'") {
t.Fatalf("expected %v to contain %v", scripts[XcodeCloudPostCloneScriptName], "-path './.*'")
}
if !stdlibAssertContains(scripts[XcodeCloudPostCloneScriptName], "find_visible_files 3 -name package.json") {
t.Fatalf("expected %v to contain %v", scripts[XcodeCloudPostCloneScriptName], "find_visible_files 3 -name package.json")
}
if !stdlibAssertContains(scripts[XcodeCloudPostCloneScriptName], "package_manager_from_manifest()") {
t.Fatalf("expected %v to contain %v", scripts[XcodeCloudPostCloneScriptName], "package_manager_from_manifest()")
}
if !stdlibAssertContains(scripts[XcodeCloudPostCloneScriptName], "pkg.packageManager") {
t.Fatalf("expected %v to contain %v", scripts[XcodeCloudPostCloneScriptName], "pkg.packageManager")
}
if !stdlibAssertContains(scripts[XcodeCloudPostCloneScriptName], `declared_manager="$(package_manager_from_manifest "$dir")"`) {
t.Fatalf("expected %v to contain %v", scripts[XcodeCloudPostCloneScriptName], `declared_manager="$(package_manager_from_manifest "$dir")"`)
}
if !stdlibAssertContains(scripts[XcodeCloudPostCloneScriptName], `(cd "$dir" && pnpm install)`) {
t.Fatalf("expected %v to contain %v", scripts[XcodeCloudPostCloneScriptName], `(cd "$dir" && pnpm install)`)
}
if !stdlibAssertContains(scripts[XcodeCloudPostCloneScriptName], `(cd "$dir" && yarn install)`) {
t.Fatalf("expected %v to contain %v", scripts[XcodeCloudPostCloneScriptName], `(cd "$dir" && yarn install)`)
}
if !stdlibAssertContains(scripts[XcodeCloudPostCloneScriptName], `(cd "$dir" && bun install)`) {
t.Fatalf("expected %v to contain %v", scripts[XcodeCloudPostCloneScriptName], `(cd "$dir" && bun install)`)
}
if !stdlibAssertContains(scripts[XcodeCloudPostCloneScriptName], "deno_requested()") {
t.Fatalf("expected %v to contain %v", scripts[XcodeCloudPostCloneScriptName], "deno_requested()")
}
if !stdlibAssertContains(scripts[XcodeCloudPostCloneScriptName], "DENO_ENABLE") {
t.Fatalf("expected %v to contain %v", scripts[XcodeCloudPostCloneScriptName], "DENO_ENABLE")
}
if !stdlibAssertContains(scripts[XcodeCloudPostCloneScriptName], "DENO_BUILD") {
t.Fatalf("expected %v to contain %v", scripts[XcodeCloudPostCloneScriptName], "DENO_BUILD")
}
if !stdlibAssertContains(scripts[XcodeCloudPreXcodebuildScriptName], `core build apple --arch 'universal' --config '.core/build.yaml' --notarise=false --dmg --appstore --bundle-id 'ai.lthn.core' --team-id 'ABC123DEF4'`) {
t.Fatalf("expected %v to contain %v", scripts[XcodeCloudPreXcodebuildScriptName], `core build apple --arch 'universal' --config '.core/build.yaml' --notarise=false --dmg --appstore --bundle-id 'ai.lthn.core' --team-id 'ABC123DEF4'`)
}
if !stdlibAssertContains(scripts[XcodeCloudPostXcodebuildScriptName], `BUNDLE_PATH='dist/apple/Core.app'`) {
t.Fatalf("expected %v to contain %v", scripts[XcodeCloudPostXcodebuildScriptName], `BUNDLE_PATH='dist/apple/Core.app'`)
}
if !stdlibAssertContains(scripts[XcodeCloudPostXcodebuildScriptName], "codesign --verify --deep --strict") {
t.Fatalf("expected %v to contain %v", scripts[XcodeCloudPostXcodebuildScriptName], "codesign --verify --deep --strict")
}
}
func TestXcodeCloud_GenerateXcodeCloudScripts_QuotesShellValues(t *testing.T) {
scripts := GenerateXcodeCloudScripts("/tmp/project", &BuildConfig{
Project: Project{
Name: "Core",
Binary: "Core$(touch /tmp/pwned)",
},
Apple: AppleConfig{
BundleID: "ai.lthn.core$(touch /tmp/pwned)",
TeamID: "ABC123DEF4$(touch /tmp/pwned)",
Arch: "arm64$(touch /tmp/pwned)",
},
})
pre := scripts[XcodeCloudPreXcodebuildScriptName]
if !stdlibAssertContains(pre, `--arch 'arm64$(touch /tmp/pwned)'`) {
t.Fatalf("expected %v to contain %v", pre, `--arch 'arm64$(touch /tmp/pwned)'`)
}
if !stdlibAssertContains(pre, `--bundle-id 'ai.lthn.core$(touch /tmp/pwned)'`) {
t.Fatalf("expected %v to contain %v", pre, `--bundle-id 'ai.lthn.core$(touch /tmp/pwned)'`)
}
if !stdlibAssertContains(pre, `--team-id 'ABC123DEF4$(touch /tmp/pwned)'`) {
t.Fatalf("expected %v to contain %v", pre, `--team-id 'ABC123DEF4$(touch /tmp/pwned)'`)
}
if stdlibAssertContains(pre, `--arch "arm64$(touch /tmp/pwned)"`) {
t.Fatalf("expected %v not to contain %v", pre, `--arch "arm64$(touch /tmp/pwned)"`)
}
if stdlibAssertContains(pre, `--bundle-id "ai.lthn.core$(touch /tmp/pwned)"`) {
t.Fatalf("expected %v not to contain %v", pre, `--bundle-id "ai.lthn.core$(touch /tmp/pwned)"`)
}
if stdlibAssertContains(pre, `--team-id "ABC123DEF4$(touch /tmp/pwned)"`) {
t.Fatalf("expected %v not to contain %v", pre, `--team-id "ABC123DEF4$(touch /tmp/pwned)"`)
}
post := scripts[XcodeCloudPostXcodebuildScriptName]
if !stdlibAssertContains(post, `BUNDLE_PATH='dist/apple/Core$(touch /tmp/pwned).app'`) {
t.Fatalf("expected %v to contain %v", post, `BUNDLE_PATH='dist/apple/Core$(touch /tmp/pwned).app'`)
}
if !stdlibAssertContains(post, `EXECUTABLE_PATH='dist/apple/Core$(touch /tmp/pwned).app/Contents/MacOS/Core$(touch /tmp/pwned)'`) {
t.Fatalf("expected %v to contain %v", post, `EXECUTABLE_PATH='dist/apple/Core$(touch /tmp/pwned).app/Contents/MacOS/Core$(touch /tmp/pwned)'`)
}
if stdlibAssertContains(post, `BUNDLE_PATH="dist/apple/Core$(touch /tmp/pwned).app"`) {
t.Fatalf("expected %v not to contain %v", post, `BUNDLE_PATH="dist/apple/Core$(touch /tmp/pwned).app"`)
}
if stdlibAssertContains(post, `EXECUTABLE_PATH="dist/apple/Core$(touch /tmp/pwned).app/Contents/MacOS/Core$(touch /tmp/pwned)"`) {
t.Fatalf("expected %v not to contain %v", post, `EXECUTABLE_PATH="dist/apple/Core$(touch /tmp/pwned).app/Contents/MacOS/Core$(touch /tmp/pwned)"`)
}
}
func TestXcodeCloud_WriteXcodeCloudScripts_Good(t *testing.T) {
projectDir := t.TempDir()
paths, err := WriteXcodeCloudScripts(io.Local, projectDir, &BuildConfig{
Project: Project{
Name: "Core",
Binary: "Core",
},
Apple: AppleConfig{
XcodeCloud: XcodeCloudConfig{
Workflow: "CoreGUI Release",
},
},
})
if err != nil {
t.Fatalf("unexpected error: %v", err)
}
if !stdlibAssertEqual([]string{ax.Join(projectDir, XcodeCloudScriptsDir, XcodeCloudPostCloneScriptName), ax.Join(projectDir, XcodeCloudScriptsDir, XcodeCloudPreXcodebuildScriptName), ax.Join(projectDir, XcodeCloudScriptsDir, XcodeCloudPostXcodebuildScriptName)}, paths) {
t.Fatalf("want %v, got %v", []string{ax.Join(projectDir, XcodeCloudScriptsDir, XcodeCloudPostCloneScriptName), ax.Join(projectDir, XcodeCloudScriptsDir, XcodeCloudPreXcodebuildScriptName), ax.Join(projectDir, XcodeCloudScriptsDir, XcodeCloudPostXcodebuildScriptName)}, paths)
}
for _, path := range paths {
content, err := io.Local.Read(path)
if err != nil {
t.Fatalf("unexpected error: %v", err)
}
if stdlibAssertEmpty(content) {
t.Fatal("expected non-empty")
}
info, err := io.Local.Stat(path)
if err != nil {
t.Fatalf("unexpected error: %v", err)
}
if !stdlibAssertEqual(0o755, int(info.Mode().Perm())) {
t.Fatalf("want %v, got %v", 0o755, int(info.Mode().Perm()))
}
}
}
func TestXcodeCloud_WriteXcodeCloudScripts_Bad(t *testing.T) {
_, err := WriteXcodeCloudScripts(nil, t.TempDir(), DefaultConfig())
if err == nil {
t.Fatal("expected error")
}
if !stdlibAssertContains(err.Error(), "filesystem medium is required") {
t.Fatalf("expected %v to contain %v", err.Error(), "filesystem medium is required")
}
}
func boolPtr(value bool) *bool {
return &value
}