- Remove internal/cmd/php/ (now core/php repo) - Remove internal/cmd/ci/ and internal/cmd/sdk/ (now core/ci repo) - Remove internal/variants/ build tag system entirely - Move all 30 remaining command packages from internal/cmd/ to cmd/ - Rewrite main.go with direct imports (no more variant selection) - Update all cross-references from internal/cmd/ to cmd/ Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
108 lines
3.1 KiB
Go
108 lines
3.1 KiB
Go
package dev
|
|
|
|
import (
|
|
"path/filepath"
|
|
"testing"
|
|
|
|
"forge.lthn.ai/core/go/pkg/io"
|
|
)
|
|
|
|
func TestFindWorkflows_Good(t *testing.T) {
|
|
// Create a temp directory with workflow files
|
|
tmpDir := t.TempDir()
|
|
workflowsDir := filepath.Join(tmpDir, ".github", "workflows")
|
|
if err := io.Local.EnsureDir(workflowsDir); err != nil {
|
|
t.Fatalf("Failed to create workflows dir: %v", err)
|
|
}
|
|
|
|
// Create some workflow files
|
|
for _, name := range []string{"qa.yml", "tests.yml", "codeql.yaml"} {
|
|
if err := io.Local.Write(filepath.Join(workflowsDir, name), "name: Test"); err != nil {
|
|
t.Fatalf("Failed to create workflow file: %v", err)
|
|
}
|
|
}
|
|
|
|
// Create a non-workflow file (should be ignored)
|
|
if err := io.Local.Write(filepath.Join(workflowsDir, "readme.md"), "# Workflows"); err != nil {
|
|
t.Fatalf("Failed to create readme file: %v", err)
|
|
}
|
|
|
|
workflows := findWorkflows(tmpDir)
|
|
|
|
if len(workflows) != 3 {
|
|
t.Errorf("Expected 3 workflows, got %d", len(workflows))
|
|
}
|
|
|
|
// Check that all expected workflows are found
|
|
found := make(map[string]bool)
|
|
for _, wf := range workflows {
|
|
found[wf] = true
|
|
}
|
|
|
|
for _, expected := range []string{"qa.yml", "tests.yml", "codeql.yaml"} {
|
|
if !found[expected] {
|
|
t.Errorf("Expected to find workflow %s", expected)
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestFindWorkflows_NoWorkflowsDir(t *testing.T) {
|
|
tmpDir := t.TempDir()
|
|
workflows := findWorkflows(tmpDir)
|
|
|
|
if len(workflows) != 0 {
|
|
t.Errorf("Expected 0 workflows for non-existent dir, got %d", len(workflows))
|
|
}
|
|
}
|
|
|
|
func TestFindTemplateWorkflow_Good(t *testing.T) {
|
|
tmpDir := t.TempDir()
|
|
templatesDir := filepath.Join(tmpDir, ".github", "workflow-templates")
|
|
if err := io.Local.EnsureDir(templatesDir); err != nil {
|
|
t.Fatalf("Failed to create templates dir: %v", err)
|
|
}
|
|
|
|
templateContent := "name: QA\non: [push]"
|
|
if err := io.Local.Write(filepath.Join(templatesDir, "qa.yml"), templateContent); err != nil {
|
|
t.Fatalf("Failed to create template file: %v", err)
|
|
}
|
|
|
|
// Test finding with .yml extension
|
|
result := findTemplateWorkflow(tmpDir, "qa.yml")
|
|
if result == "" {
|
|
t.Error("Expected to find qa.yml template")
|
|
}
|
|
|
|
// Test finding without extension (should auto-add .yml)
|
|
result = findTemplateWorkflow(tmpDir, "qa")
|
|
if result == "" {
|
|
t.Error("Expected to find qa template without extension")
|
|
}
|
|
}
|
|
|
|
func TestFindTemplateWorkflow_FallbackToWorkflows(t *testing.T) {
|
|
tmpDir := t.TempDir()
|
|
workflowsDir := filepath.Join(tmpDir, ".github", "workflows")
|
|
if err := io.Local.EnsureDir(workflowsDir); err != nil {
|
|
t.Fatalf("Failed to create workflows dir: %v", err)
|
|
}
|
|
|
|
templateContent := "name: Tests\non: [push]"
|
|
if err := io.Local.Write(filepath.Join(workflowsDir, "tests.yml"), templateContent); err != nil {
|
|
t.Fatalf("Failed to create workflow file: %v", err)
|
|
}
|
|
|
|
result := findTemplateWorkflow(tmpDir, "tests.yml")
|
|
if result == "" {
|
|
t.Error("Expected to find tests.yml in workflows dir")
|
|
}
|
|
}
|
|
|
|
func TestFindTemplateWorkflow_NotFound(t *testing.T) {
|
|
tmpDir := t.TempDir()
|
|
|
|
result := findTemplateWorkflow(tmpDir, "nonexistent.yml")
|
|
if result != "" {
|
|
t.Errorf("Expected empty string for non-existent template, got %s", result)
|
|
}
|
|
}
|