@@ -2,7 +2,6 @@ package utils
2
2
3
3
import (
4
4
"bytes"
5
- "fmt"
6
5
"github.com/spf13/cobra"
7
6
"github.com/spf13/pflag"
8
7
"reflect"
@@ -115,24 +114,76 @@ func TestIsJson(t *testing.T) {
115
114
116
115
func TestPrintJSON (t * testing.T ) {
117
116
type args struct {
118
- data interface {}
117
+ data interface {}
118
+ jpath string
119
119
}
120
120
tests := []struct {
121
121
name string
122
122
args args
123
123
wantWriter string
124
124
}{
125
+ {
126
+ name : "empty jsonpath" ,
127
+ args : args {data : map [string ]string {"key" : "value" }, jpath : "" },
128
+ wantWriter : "{\n \" key\" : \" value\" \n }\n " ,
129
+ },
125
130
{
126
131
name : "simple json" ,
127
- args : args {data : map [string ]string {"key" : "value" }},
128
- wantWriter : fmt .Sprint ("{\n \" key\" : \" value\" \n }\n " ),
132
+ args : args {data : map [string ]string {"key" : "value" }, jpath : "$" },
133
+ wantWriter : "[\n {\n \" key\" : \" value\" \n }\n ]\n " ,
134
+ },
135
+ {
136
+ name : "invalid jsonpath" ,
137
+ args : args {
138
+ data : map [string ]string {"key" : "value" }, jpath : "//" ,
139
+ },
140
+ wantWriter : "Invalid JSONPath: //\n " ,
141
+ },
142
+ {
143
+ name : "extract specific field" ,
144
+ args : args {
145
+ data : map [string ]interface {}{
146
+ "key" : "value" ,
147
+ "another" : "field" ,
148
+ }, jpath : "$.key" ,
149
+ },
150
+ wantWriter : "[\n \" value\" \n ]\n " ,
151
+ },
152
+ {
153
+ name : "nested jsonpath" ,
154
+ args : args {
155
+ data : map [string ]interface {}{
156
+ "item1" : map [string ]string {"key1" : "value1" },
157
+ "item2" : map [string ]string {"key2" : "value2" },
158
+ "count" : 2 ,
159
+ },
160
+ jpath : "$.*.key1" ,
161
+ },
162
+ wantWriter : "[\n \" value1\" \n ]\n " ,
163
+ },
164
+ {
165
+ name : "array jsonpath" ,
166
+ args : args {
167
+ data : []map [string ]string {
168
+ {"key1" : "value1" },
169
+ {"key2" : "value2" },
170
+ {"key1" : "value3" },
171
+ },
172
+ jpath : "$[*].key1" ,
173
+ },
174
+ wantWriter : "[\n \" value1\" ,\n \" value3\" \n ]\n " ,
175
+ },
176
+ {
177
+ name : "nil data" ,
178
+ args : args {data : nil , jpath : "$" },
179
+ wantWriter : "[\n null\n ]\n " ,
129
180
},
130
181
}
131
182
for _ , tt := range tests {
132
183
t .Run (
133
184
tt .name , func (t * testing.T ) {
134
185
writer := & bytes.Buffer {}
135
- PrintJSON (tt .args .data , writer )
186
+ PrintJSON (tt .args .data , tt . args . jpath , writer )
136
187
if gotWriter := writer .String (); gotWriter != tt .wantWriter {
137
188
t .Errorf ("PrintJSON() = %v, want %v" , gotWriter , tt .wantWriter )
138
189
}
@@ -143,24 +194,76 @@ func TestPrintJSON(t *testing.T) {
143
194
144
195
func TestPrintYAML (t * testing.T ) {
145
196
type args struct {
146
- data interface {}
197
+ data interface {}
198
+ jpath string
147
199
}
148
200
tests := []struct {
149
201
name string
150
202
args args
151
203
wantWriter string
152
204
}{
153
205
{
154
- name : "simple yaml " ,
155
- args : args {data : map [string ]string {"key" : "value" }},
206
+ name : "empty jsonpath " ,
207
+ args : args {data : map [string ]string {"key" : "value" }, jpath : "" },
156
208
wantWriter : "key: value\n \n " ,
157
209
},
210
+ {
211
+ name : "simple yaml" ,
212
+ args : args {data : map [string ]string {"key" : "value" }, jpath : "$" },
213
+ wantWriter : "- key: value\n \n " ,
214
+ },
215
+ {
216
+ name : "invalid jsonpath" ,
217
+ args : args {
218
+ data : map [string ]string {"key" : "value" }, jpath : "//" ,
219
+ },
220
+ wantWriter : "Invalid JSONPath: //\n " ,
221
+ },
222
+ {
223
+ name : "extract specific field" ,
224
+ args : args {
225
+ data : map [string ]interface {}{
226
+ "key" : "value" ,
227
+ "another" : "field" ,
228
+ }, jpath : "$.key" ,
229
+ },
230
+ wantWriter : "- value\n \n " ,
231
+ },
232
+ {
233
+ name : "nested jsonpath" ,
234
+ args : args {
235
+ data : map [string ]interface {}{
236
+ "item1" : map [string ]string {"key1" : "value1" },
237
+ "item2" : map [string ]string {"key2" : "value2" },
238
+ "count" : 2 ,
239
+ },
240
+ jpath : "$.*.key1" ,
241
+ },
242
+ wantWriter : "- value1\n \n " ,
243
+ },
244
+ {
245
+ name : "array jsonpath" ,
246
+ args : args {
247
+ data : []map [string ]string {
248
+ {"key1" : "value1" },
249
+ {"key2" : "value2" },
250
+ {"key1" : "value3" },
251
+ },
252
+ jpath : "$[*].key1" ,
253
+ },
254
+ wantWriter : "- value1\n - value3\n \n " ,
255
+ },
256
+ {
257
+ name : "nil data" ,
258
+ args : args {data : nil , jpath : "$" },
259
+ wantWriter : "- null\n \n " ,
260
+ },
158
261
}
159
262
for _ , tt := range tests {
160
263
t .Run (
161
264
tt .name , func (t * testing.T ) {
162
265
writer := & bytes.Buffer {}
163
- PrintYAML (tt .args .data , writer )
266
+ PrintYAML (tt .args .data , tt . args . jpath , writer )
164
267
if gotWriter := writer .String (); gotWriter != tt .wantWriter {
165
268
t .Errorf ("PrintYAML() = %v, want %v" , gotWriter , tt .wantWriter )
166
269
}
0 commit comments