Skip to content

Commit b90ff7c

Browse files
committed
add unit test cases
1 parent 6a0251d commit b90ff7c

File tree

3 files changed

+162
-2
lines changed

3 files changed

+162
-2
lines changed

pkgmanager/helper.go

+7-1
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,13 @@ func AddConfigSpec(path, name, statement string) pkgmanager.GoNodeModifier {
4242
return ModifyGoNode{
4343
Matchers: buildConfigMatchers(strings.Split(path, ".")),
4444
Action: func(cursor *dstutil.Cursor) {
45-
mv := cursor.Node().(*dst.KeyValueExpr).Value.(*dst.CompositeLit)
45+
var mv *dst.CompositeLit
46+
switch node := cursor.Node().(type) {
47+
case *dst.KeyValueExpr:
48+
mv = node.Value.(*dst.CompositeLit)
49+
case *dst.CallExpr:
50+
mv = node.Args[1].(*dst.CompositeLit)
51+
}
4652
key := WrapNewline(&dst.BasicLit{Kind: token.STRING, Value: strconv.Quote(name)})
4753
if KeyExists(key, mv.Elts) {
4854
color.Warningln(fmt.Sprintf("Key [%s] already exists in [%s]", name, path))

pkgmanager/helper_test.go

+154
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,154 @@
1+
package pkgmanager
2+
3+
import (
4+
"path/filepath"
5+
"testing"
6+
7+
"github.com/stretchr/testify/suite"
8+
9+
"github.com/goravel/framework/contracts/pkgmanager"
10+
"github.com/goravel/framework/support/file"
11+
)
12+
13+
type HelperTestSuite struct {
14+
suite.Suite
15+
content string
16+
}
17+
18+
func (s *HelperTestSuite) SetupTest() {
19+
s.content = `package config
20+
21+
import (
22+
"github.com/goravel/framework/auth"
23+
"github.com/goravel/framework/contracts/foundation"
24+
"github.com/goravel/framework/crypt"
25+
"github.com/goravel/framework/facades"
26+
)
27+
28+
func Boot() {}
29+
30+
func init() {
31+
config := facades.Config()
32+
config.Add("app", map[string]any{
33+
"name": config.Env("APP_NAME", "Goravel"),
34+
"providers": []foundation.ServiceProvider{
35+
&auth.AuthServiceProvider{},
36+
&crypt.ServiceProvider{},
37+
},
38+
})
39+
}`
40+
}
41+
42+
func (s *HelperTestSuite) TearDownTest() {}
43+
44+
func TestHelperTestSuite(t *testing.T) {
45+
suite.Run(t, new(HelperTestSuite))
46+
}
47+
48+
func (s *HelperTestSuite) TestHelper() {
49+
cases := []struct {
50+
name string
51+
modifiers []pkgmanager.GoNodeModifier
52+
53+
assert func(filename string)
54+
}{
55+
{
56+
name: "AddConfigSpec",
57+
modifiers: []pkgmanager.GoNodeModifier{
58+
AddConfigSpec("app", "key", `"value"`),
59+
},
60+
assert: func(content string) {
61+
s.Contains(content, `"key": "value",`)
62+
},
63+
},
64+
{
65+
name: "AddImportSpec",
66+
modifiers: []pkgmanager.GoNodeModifier{
67+
AddImportSpec("github.com/goravel/test"),
68+
},
69+
assert: func(content string) {
70+
s.Contains(content, `"github.com/goravel/test"`)
71+
},
72+
},
73+
{
74+
name: "AddProviderSpec",
75+
modifiers: []pkgmanager.GoNodeModifier{
76+
AddProviderSpec("&test.ServiceProvider{}"),
77+
},
78+
assert: func(content string) {
79+
s.Contains(content, "&crypt.ServiceProvider{},\n\t\t\t&test.ServiceProvider{}")
80+
},
81+
},
82+
{
83+
name: "AddProviderSpecAfter",
84+
modifiers: []pkgmanager.GoNodeModifier{
85+
AddProviderSpecAfter("&test.ServiceProvider{}", "&auth.AuthServiceProvider{}"),
86+
},
87+
assert: func(content string) {
88+
s.Contains(content, "&auth.AuthServiceProvider{},\n\t\t\t&test.ServiceProvider{}")
89+
},
90+
},
91+
{
92+
name: "AddProviderSpecBefore",
93+
modifiers: []pkgmanager.GoNodeModifier{
94+
AddProviderSpecBefore("&test.ServiceProvider{}", "&auth.AuthServiceProvider{}"),
95+
},
96+
assert: func(content string) {
97+
s.Contains(content, "&test.ServiceProvider{},\n\t\t\t&auth.AuthServiceProvider{}")
98+
},
99+
},
100+
{
101+
name: "RemoveConfigSpec",
102+
modifiers: []pkgmanager.GoNodeModifier{
103+
RemoveConfigSpec("app.providers"),
104+
},
105+
assert: func(content string) {
106+
s.NotContains(content, "providers")
107+
},
108+
},
109+
{
110+
name: "RemoveImportSpec",
111+
modifiers: []pkgmanager.GoNodeModifier{
112+
RemoveImportSpec("github.com/goravel/framework/auth"),
113+
},
114+
assert: func(content string) {
115+
s.NotContains(content, `"github.com/goravel/framework/auth"`)
116+
},
117+
},
118+
{
119+
name: "RemoveProviderSpec",
120+
modifiers: []pkgmanager.GoNodeModifier{
121+
RemoveProviderSpec("&auth.AuthServiceProvider{}"),
122+
},
123+
assert: func(content string) {
124+
s.NotContains(content, "&auth.AuthServiceProvider{}")
125+
},
126+
},
127+
{
128+
name: "ReplaceConfigSpec",
129+
modifiers: []pkgmanager.GoNodeModifier{
130+
ReplaceConfigSpec("app.name", `"Goravel"`),
131+
},
132+
assert: func(content string) {
133+
s.Contains(content, `"name": "Goravel"`)
134+
s.NotContains(content, `config.Env("APP_NAME", "Goravel")`)
135+
},
136+
},
137+
}
138+
139+
for _, tc := range cases {
140+
s.Run(tc.name, func() {
141+
dir := s.T().TempDir()
142+
filename := "test.go"
143+
s.Require().NoError(file.PutContent(filepath.Join(dir, filename), s.content))
144+
mg := ModifyGoFile{
145+
File: filename,
146+
Modifiers: tc.modifiers,
147+
}
148+
s.Require().NoError(mg.Apply(dir))
149+
content, err := file.GetContent(filepath.Join(dir, filename))
150+
s.Require().NoError(err)
151+
tc.assert(content)
152+
})
153+
}
154+
}

pkgmanager/matcher_test.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ func init() {
3434
config.Add("app", map[string]any{
3535
"name": config.Env("APP_NAME", "Goravel"),
3636
"providers": []foundation.ServiceProvider{
37-
auth.AuthServiceProvider{},
37+
&auth.AuthServiceProvider{},
3838
},
3939
})
4040
}`)

0 commit comments

Comments
 (0)