11package redesign_test
22
33import (
4+ "os"
45 "path/filepath"
6+ "strings"
57 "testing"
68
79 "github.com/gruntwork-io/terragrunt/internal/cli/commands/catalog/tui/redesign"
@@ -32,15 +34,92 @@ func TestCopyCmd_CopiesIntoWorkingDirectory(t *testing.T) {
3234 opts := options .NewTerragruntOptions ()
3335 opts .WorkingDir = workingDir
3436
35- cmd := redesign .NewCopyCmdForTest (logger .CreateLogger (), opts , components [0 ])
36- require .NoError (t , cmd .Run ())
37+ require .NoError (t , redesign .NewCopyCmd (logger .CreateLogger (), opts , components [0 ]).Run ())
3738
3839 assert .FileExists (t , filepath .Join (workingDir , "terragrunt.hcl" ))
3940 assert .FileExists (t , filepath .Join (workingDir , "inputs.hcl" ))
4041 assert .NoFileExists (t , filepath .Join (workingDir , ".terragrunt-cache" , "junk.txt" ))
4142 assert .NoDirExists (t , filepath .Join (workingDir , ".terragrunt-cache" ))
4243}
4344
45+ func TestCopyCmd_WritesValuesStubForUnit (t * testing.T ) {
46+ t .Parallel ()
47+
48+ repoDir := helpers .TmpDirWOSymlinks (t )
49+
50+ unitBody := `
51+ locals {
52+ region = values.region
53+ }
54+
55+ inputs = {
56+ app = values.app
57+ env = values.env
58+ }
59+ `
60+ writeFile (t , filepath .Join (repoDir , "vpc" , "terragrunt.hcl" ), unitBody )
61+
62+ repo := newFakeRepo (t , repoDir )
63+
64+ components , err := redesign .NewComponentDiscovery ().Discover (repo )
65+ require .NoError (t , err )
66+ require .Len (t , components , 1 )
67+
68+ workingDir := t .TempDir ()
69+ opts := options .NewTerragruntOptions ()
70+ opts .WorkingDir = workingDir
71+
72+ require .NoError (t , redesign .NewCopyCmd (logger .CreateLogger (), opts , components [0 ]).Run ())
73+
74+ valuesPath := filepath .Join (workingDir , "terragrunt.values.hcl" )
75+ assert .FileExists (t , valuesPath )
76+
77+ raw , err := os .ReadFile (valuesPath )
78+ require .NoError (t , err )
79+
80+ content := string (raw )
81+ assert .Contains (t , content , "# Auto-generated by `terragrunt catalog`" )
82+
83+ appIdx := strings .Index (content , "\n app" )
84+
85+ envIdx := strings .Index (content , "\n env" )
86+
87+ regionIdx := strings .Index (content , "\n region" )
88+
89+ require .NotEqual (t , - 1 , appIdx )
90+ require .NotEqual (t , - 1 , envIdx )
91+ require .NotEqual (t , - 1 , regionIdx )
92+ assert .Less (t , appIdx , envIdx )
93+ assert .Less (t , envIdx , regionIdx )
94+ }
95+
96+ func TestCopyCmd_LeavesExistingValuesFileAlone (t * testing.T ) {
97+ t .Parallel ()
98+
99+ repoDir := helpers .TmpDirWOSymlinks (t )
100+ writeFile (t , filepath .Join (repoDir , "vpc" , "terragrunt.hcl" ),
101+ `locals { region = values.region }` )
102+
103+ repo := newFakeRepo (t , repoDir )
104+
105+ components , err := redesign .NewComponentDiscovery ().Discover (repo )
106+ require .NoError (t , err )
107+ require .Len (t , components , 1 )
108+
109+ workingDir := t .TempDir ()
110+ existing := []byte (`region = "us-east-1"` + "\n " )
111+ require .NoError (t , os .WriteFile (filepath .Join (workingDir , "terragrunt.values.hcl" ), existing , 0o644 ))
112+
113+ opts := options .NewTerragruntOptions ()
114+ opts .WorkingDir = workingDir
115+
116+ require .NoError (t , redesign .NewCopyCmd (logger .CreateLogger (), opts , components [0 ]).Run ())
117+
118+ got , err := os .ReadFile (filepath .Join (workingDir , "terragrunt.values.hcl" ))
119+ require .NoError (t , err )
120+ assert .Equal (t , existing , got , "pre-existing values file should be untouched" )
121+ }
122+
44123func TestCopyCmd_RefusesToOverwriteExistingFile (t * testing.T ) {
45124 t .Parallel ()
46125
@@ -59,8 +138,7 @@ func TestCopyCmd_RefusesToOverwriteExistingFile(t *testing.T) {
59138 opts := options .NewTerragruntOptions ()
60139 opts .WorkingDir = workingDir
61140
62- cmd := redesign .NewCopyCmdForTest (logger .CreateLogger (), opts , components [0 ])
63- err = cmd .Run ()
141+ err = redesign .NewCopyCmd (logger .CreateLogger (), opts , components [0 ]).Run ()
64142 require .Error (t , err )
65143 assert .Contains (t , err .Error (), "already exists" )
66144}
0 commit comments