Files
gh-repo-bootstrap/internal/cli/toml_test.go
T

136 lines
3.2 KiB
Go

package cli
import (
"os"
"path/filepath"
"strings"
"testing"
)
func writeTmp(t *testing.T, body string) string {
t.Helper()
dir := t.TempDir()
p := filepath.Join(dir, "config.toml")
if err := os.WriteFile(p, []byte(body), 0o600); err != nil {
t.Fatalf("write tmp: %v", err)
}
return p
}
func TestLoadConfig_DataMode_Defaults(t *testing.T) {
p := writeTmp(t, `
owner = "JMR-dev"
name = "x"
`)
o, err := LoadConfig(p)
if err != nil {
t.Fatalf("unexpected error: %v", err)
}
if o.Owner != "JMR-dev" || o.Repo != "x" {
t.Errorf("owner/name = %q/%q", o.Owner, o.Repo)
}
if o.RepoMode != RepoModeData {
t.Errorf("RepoMode = %v", o.RepoMode)
}
if len(o.Environments) != 1 || o.Environments[0].Name != "production" {
t.Errorf("Environments = %+v", o.Environments)
}
}
func TestLoadConfig_CreateRequiresFields(t *testing.T) {
p := writeTmp(t, `
owner = "JMR-dev"
name = "x"
mode = "create"
`)
_, err := LoadConfig(p)
if err == nil || !strings.Contains(err.Error(), "[repo] table is required") {
t.Fatalf("expected required-table error, got %v", err)
}
}
func TestLoadConfig_CreateMissingVisibility(t *testing.T) {
p := writeTmp(t, `
owner = "JMR-dev"
name = "x"
mode = "create"
[repo]
description = ""
default_branch = "main"
allow_merge_commit = false
allow_squash_merge = true
allow_rebase_merge = false
delete_branch_on_merge = true
auto_init = true
`)
_, err := LoadConfig(p)
if err == nil || !strings.Contains(err.Error(), "visibility is required") {
t.Fatalf("expected visibility-required error, got %v", err)
}
}
func TestLoadConfig_CreateFull(t *testing.T) {
p := writeTmp(t, `
owner = "JMR-dev"
name = "x"
mode = "create"
[repo]
visibility = "private"
description = "hi"
default_branch = "main"
topics = ["go", "api"]
allow_merge_commit = false
allow_squash_merge = true
allow_rebase_merge = false
delete_branch_on_merge = true
auto_init = true
[[environments]]
name = "production"
wait_timer = 5
prevent_self_review = true
can_admins_bypass = false
reviewers_users = ["octocat", 12345]
reviewers_teams = ["JMR-dev/release"]
branch_policy = "custom"
branch_patterns = ["release/*"]
`)
o, err := LoadConfig(p)
if err != nil {
t.Fatalf("unexpected error: %v", err)
}
if o.RepoMode != RepoModeCreate {
t.Fatalf("RepoMode = %v", o.RepoMode)
}
if o.RepoSettings.Visibility != "private" {
t.Errorf("visibility = %q", o.RepoSettings.Visibility)
}
if len(o.RepoSettings.Topics) != 2 {
t.Errorf("topics = %v", o.RepoSettings.Topics)
}
if len(o.Environments) != 1 {
t.Fatalf("len envs = %d", len(o.Environments))
}
prod := o.Environments[0]
if got := prod.ReviewerUsers; len(got) != 2 || got[0] != "octocat" || got[1] != "12345" {
t.Errorf("reviewer users = %v", got)
}
if prod.BranchPolicy != "custom" || len(prod.BranchPatterns) != 1 {
t.Errorf("branch policy = %v / patterns = %v", prod.BranchPolicy, prod.BranchPatterns)
}
}
func TestLoadConfig_UnknownKey(t *testing.T) {
p := writeTmp(t, `
owner = "JMR-dev"
name = "x"
nope = true
`)
_, err := LoadConfig(p)
if err == nil || !strings.Contains(err.Error(), "unknown key") {
t.Fatalf("expected unknown-key error, got %v", err)
}
}