@@ -6,8 +6,10 @@ import (
66 "testing"
77
88 "github.com/stretchr/testify/assert"
9+ "github.com/zeromicro/go-zero/tools/goctl/model/sql/parser"
910 "github.com/zeromicro/go-zero/tools/goctl/model/sql/template"
1011 "github.com/zeromicro/go-zero/tools/goctl/util/pathx"
12+ "github.com/zeromicro/go-zero/tools/goctl/util/stringx"
1113)
1214
1315func TestGenTemplates (t * testing.T ) {
@@ -91,3 +93,151 @@ func TestUpdate(t *testing.T) {
9193 assert .Nil (t , err )
9294 assert .Equal (t , template .New , string (data ))
9395}
96+
97+ func TestHasField (t * testing.T ) {
98+ tests := []struct {
99+ name string
100+ table Table
101+ fieldName string
102+ wantResult bool
103+ }{
104+ {
105+ name : "field exists" ,
106+ table : Table {
107+ Table : parser.Table {
108+ Fields : []* parser.Field {
109+ {NameOriginal : "id" },
110+ {NameOriginal : "name" },
111+ {NameOriginal : "created_at" },
112+ },
113+ },
114+ },
115+ fieldName : "name" ,
116+ wantResult : true ,
117+ },
118+ {
119+ name : "field does not exist" ,
120+ table : Table {
121+ Table : parser.Table {
122+ Fields : []* parser.Field {
123+ {NameOriginal : "id" },
124+ {NameOriginal : "name" },
125+ },
126+ },
127+ },
128+ fieldName : "email" ,
129+ wantResult : false ,
130+ },
131+ {
132+ name : "empty table" ,
133+ table : Table {
134+ Table : parser.Table {
135+ Fields : []* parser.Field {},
136+ },
137+ },
138+ fieldName : "id" ,
139+ wantResult : false ,
140+ },
141+ {
142+ name : "case sensitive match" ,
143+ table : Table {
144+ Table : parser.Table {
145+ Fields : []* parser.Field {
146+ {NameOriginal : "ID" },
147+ {NameOriginal : "Name" },
148+ },
149+ },
150+ },
151+ fieldName : "id" ,
152+ wantResult : false ,
153+ },
154+ {
155+ name : "exact match required" ,
156+ table : Table {
157+ Table : parser.Table {
158+ Fields : []* parser.Field {
159+ {NameOriginal : "user_name" },
160+ },
161+ },
162+ },
163+ fieldName : "user_name" ,
164+ wantResult : true ,
165+ },
166+ {
167+ name : "partial match should fail" ,
168+ table : Table {
169+ Table : parser.Table {
170+ Fields : []* parser.Field {
171+ {NameOriginal : "user_name" },
172+ },
173+ },
174+ },
175+ fieldName : "user" ,
176+ wantResult : false ,
177+ },
178+ }
179+
180+ for _ , tt := range tests {
181+ t .Run (tt .name , func (t * testing.T ) {
182+ fn := hasField (tt .table )
183+ result := fn (tt .fieldName )
184+ assert .Equal (t , tt .wantResult , result )
185+ })
186+ }
187+ }
188+
189+ func TestHasFieldWithRealTable (t * testing.T ) {
190+ // Create a realistic table structure
191+ table := Table {
192+ Table : parser.Table {
193+ Name : stringx .From ("users" ),
194+ Fields : []* parser.Field {
195+ {NameOriginal : "id" , DataType : "int64" },
196+ {NameOriginal : "username" , DataType : "string" },
197+ {NameOriginal : "email" , DataType : "string" },
198+ {NameOriginal : "password" , DataType : "string" },
199+ {NameOriginal : "created_at" , DataType : "time.Time" },
200+ {NameOriginal : "updated_at" , DataType : "time.Time" },
201+ },
202+ },
203+ }
204+
205+ fn := hasField (table )
206+
207+ // Test all existing fields
208+ assert .True (t , fn ("id" ))
209+ assert .True (t , fn ("username" ))
210+ assert .True (t , fn ("email" ))
211+ assert .True (t , fn ("password" ))
212+ assert .True (t , fn ("created_at" ))
213+ assert .True (t , fn ("updated_at" ))
214+
215+ // Test non-existing fields
216+ assert .False (t , fn ("deleted_at" ))
217+ assert .False (t , fn ("ID" ))
218+ assert .False (t , fn ("Username" ))
219+ assert .False (t , fn ("" ))
220+ }
221+
222+ func TestHasFieldPerformance (t * testing.T ) {
223+ // Create a table with many fields to test performance optimization
224+ var fields []* parser.Field
225+ for i := 0 ; i < 1000 ; i ++ {
226+ fields = append (fields , & parser.Field {
227+ NameOriginal : "field_" + string (rune ('0' + i % 10 )) + string (rune ('a' + i % 26 )),
228+ })
229+ }
230+
231+ table := Table {
232+ Table : parser.Table {
233+ Fields : fields ,
234+ },
235+ }
236+
237+ fn := hasField (table )
238+
239+ // Verify the function works correctly
240+ assert .True (t , fn (fields [0 ].NameOriginal ))
241+ assert .True (t , fn (fields [999 ].NameOriginal ))
242+ assert .False (t , fn ("non_existent_field" ))
243+ }
0 commit comments