-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmigrate_internal_test.go
More file actions
124 lines (109 loc) · 3.25 KB
/
Copy pathmigrate_internal_test.go
File metadata and controls
124 lines (109 loc) · 3.25 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
package cmd
import (
"os"
"path/filepath"
"strings"
"testing"
)
// v100TestConfig: v1.0.0 스키마 설정 예시 (required_language, no_coauthor 사용).
const v100TestConfig = `comment_language:
enabled: true
required_language: korean
min_length: 5
commit_message:
no_coauthor: true
no_unicode_spaces: true
`
// setMigrateDryRun: migrateDryRun 플래그를 설정하고 테스트 종료 시 복원.
func setMigrateDryRun(t *testing.T, v bool) {
t.Helper()
orig := migrateDryRun
migrateDryRun = v
t.Cleanup(func() { migrateDryRun = orig })
}
// runMigrateCmd: migrateCmd 의 RunE 를 직접 호출하고 stdout 을 반환.
func runMigrateCmd(t *testing.T) (string, error) {
t.Helper()
var err error
out := captureStdout(t, func() { err = migrateCmd.RunE(migrateCmd, nil) })
return out, err
}
func TestMigrate_FileNotFound(t *testing.T) {
dir := t.TempDir()
setConfigFile(t, filepath.Join(dir, "missing.yml"))
setMigrateDryRun(t, false)
if _, err := runMigrateCmd(t); err == nil {
t.Error("없는 파일이면 에러가 나야 합니다")
}
}
func TestMigrate_AlreadyCurrent(t *testing.T) {
dir := t.TempDir()
cfgPath := filepath.Join(dir, ".commit-checker.yml")
original := "comment_language:\n enabled: true\n locale: ko\n"
writeTestFile(t, cfgPath, original)
setConfigFile(t, cfgPath)
setMigrateDryRun(t, false)
if _, err := runMigrateCmd(t); err != nil {
t.Fatalf("migrate: %v", err)
}
data, err := os.ReadFile(cfgPath)
if err != nil {
t.Fatal(err)
}
if string(data) != original {
t.Error("최신 버전이면 파일이 변경되면 안 됩니다")
}
}
func TestMigrate_V100_DryRun(t *testing.T) {
dir := t.TempDir()
cfgPath := filepath.Join(dir, ".commit-checker.yml")
writeTestFile(t, cfgPath, v100TestConfig)
setConfigFile(t, cfgPath)
setMigrateDryRun(t, true)
out, err := runMigrateCmd(t)
if err != nil {
t.Fatalf("migrate --dry-run: %v", err)
}
if !strings.Contains(out, "locale") {
t.Errorf("dry-run 출력에 변환 결과가 없습니다:\n%s", out)
}
data, err := os.ReadFile(cfgPath)
if err != nil {
t.Fatal(err)
}
if !strings.Contains(string(data), "required_language") {
t.Error("dry-run 인데 파일이 수정되었습니다")
}
}
func TestMigrate_V100_WritesFile(t *testing.T) {
dir := t.TempDir()
cfgPath := filepath.Join(dir, ".commit-checker.yml")
writeTestFile(t, cfgPath, v100TestConfig)
setConfigFile(t, cfgPath)
setMigrateDryRun(t, false)
if _, err := runMigrateCmd(t); err != nil {
t.Fatalf("migrate: %v", err)
}
data, err := os.ReadFile(cfgPath)
if err != nil {
t.Fatal(err)
}
migrated := string(data)
if strings.Contains(migrated, "required_language") {
t.Errorf("required_language 가 남아 있습니다:\n%s", migrated)
}
if !strings.Contains(migrated, "locale: korean") {
t.Errorf("locale 로 변환되지 않았습니다:\n%s", migrated)
}
}
func TestMigrate_UnknownFormat_Error(t *testing.T) {
dir := t.TempDir()
cfgPath := filepath.Join(dir, ".commit-checker.yml")
// 매핑이 아닌 YAML 리스트 → 어느 스키마로도 파싱 불가
writeTestFile(t, cfgPath, "- 항목1\n- 항목2\n")
setConfigFile(t, cfgPath)
setMigrateDryRun(t, false)
if _, err := runMigrateCmd(t); err == nil {
t.Error("인식할 수 없는 형식이면 에러가 나야 합니다")
}
}