@@ -230,6 +230,133 @@ func TestErrorWithAction(t *testing.T) {
230230 }
231231}
232232
233+ func TestWriteWithHint (t * testing.T ) {
234+ var out bytes.Buffer
235+ w := NewWithWriters (& out , & bytes.Buffer {})
236+ w .SetHint ("Manage your agents \u2192 https://app.onecli.sh" )
237+
238+ if err := w .Write (map [string ]string {"id" : "abc" , "status" : "ok" }); err != nil {
239+ t .Fatal (err )
240+ }
241+
242+ raw := out .String ()
243+
244+ // hint must be the first key
245+ hintIdx := strings .Index (raw , `"hint"` )
246+ idIdx := strings .Index (raw , `"id"` )
247+ if hintIdx < 0 || idIdx < 0 || hintIdx >= idIdx {
248+ t .Errorf ("hint must appear before other keys:\n %s" , raw )
249+ }
250+
251+ var got map [string ]string
252+ if err := json .Unmarshal ([]byte (raw ), & got ); err != nil {
253+ t .Fatalf ("invalid JSON: %v\n %s" , err , raw )
254+ }
255+ if got ["hint" ] != "Manage your agents \u2192 https://app.onecli.sh" {
256+ t .Errorf ("hint = %q" , got ["hint" ])
257+ }
258+ if got ["id" ] != "abc" {
259+ t .Errorf ("id = %q" , got ["id" ])
260+ }
261+ }
262+
263+ func TestWriteWithHintArray (t * testing.T ) {
264+ var out bytes.Buffer
265+ w := NewWithWriters (& out , & bytes.Buffer {})
266+ w .SetHint ("Manage your secrets \u2192 https://app.onecli.sh" )
267+
268+ data := []map [string ]string {{"id" : "a" }, {"id" : "b" }}
269+ if err := w .Write (data ); err != nil {
270+ t .Fatal (err )
271+ }
272+
273+ var got struct {
274+ Hint string `json:"hint"`
275+ Data []map [string ]string `json:"data"`
276+ }
277+ if err := json .Unmarshal (out .Bytes (), & got ); err != nil {
278+ t .Fatalf ("invalid JSON: %v\n %s" , err , out .String ())
279+ }
280+ if got .Hint != "Manage your secrets \u2192 https://app.onecli.sh" {
281+ t .Errorf ("hint = %q" , got .Hint )
282+ }
283+ if len (got .Data ) != 2 {
284+ t .Errorf ("expected 2 items, got %d" , len (got .Data ))
285+ }
286+ }
287+
288+ func TestWriteNoHintWhenEmpty (t * testing.T ) {
289+ var out bytes.Buffer
290+ w := NewWithWriters (& out , & bytes.Buffer {})
291+
292+ if err := w .Write (map [string ]string {"id" : "abc" }); err != nil {
293+ t .Fatal (err )
294+ }
295+
296+ if strings .Contains (out .String (), "hint" ) {
297+ t .Errorf ("should not contain hint when not set:\n %s" , out .String ())
298+ }
299+ }
300+
301+ func TestWriteQuietNoHint (t * testing.T ) {
302+ var out bytes.Buffer
303+ w := NewWithWriters (& out , & bytes.Buffer {})
304+ w .SetHint ("Manage your agents \u2192 https://app.onecli.sh" )
305+
306+ if err := w .WriteQuiet (map [string ]string {"id" : "abc" }, "id" ); err != nil {
307+ t .Fatal (err )
308+ }
309+
310+ got := strings .TrimSpace (out .String ())
311+ if got != "abc" {
312+ t .Errorf ("got %q, want %q" , got , "abc" )
313+ }
314+ }
315+
316+ func TestWriteFilteredWithHintExcluded (t * testing.T ) {
317+ var out bytes.Buffer
318+ w := NewWithWriters (& out , & bytes.Buffer {})
319+ w .SetHint ("Manage your secrets \u2192 https://app.onecli.sh" )
320+
321+ data := map [string ]string {"id" : "abc" , "name" : "test" , "extra" : "drop" }
322+ if err := w .WriteFiltered (data , "id,name" ); err != nil {
323+ t .Fatal (err )
324+ }
325+
326+ var got map [string ]string
327+ if err := json .Unmarshal (out .Bytes (), & got ); err != nil {
328+ t .Fatalf ("invalid JSON: %v\n %s" , err , out .String ())
329+ }
330+ if _ , ok := got ["hint" ]; ok {
331+ t .Error ("hint should not be present when --fields is specified" )
332+ }
333+ if got ["id" ] != "abc" {
334+ t .Errorf ("id = %q" , got ["id" ])
335+ }
336+ if _ , ok := got ["extra" ]; ok {
337+ t .Error ("extra should have been filtered out" )
338+ }
339+ }
340+
341+ func TestWriteFilteredEmptyFieldsWithHint (t * testing.T ) {
342+ var out bytes.Buffer
343+ w := NewWithWriters (& out , & bytes.Buffer {})
344+ w .SetHint ("Manage your agents \u2192 https://app.onecli.sh" )
345+
346+ data := map [string ]string {"id" : "abc" }
347+ if err := w .WriteFiltered (data , "" ); err != nil {
348+ t .Fatal (err )
349+ }
350+
351+ var got map [string ]string
352+ if err := json .Unmarshal (out .Bytes (), & got ); err != nil {
353+ t .Fatalf ("invalid JSON: %v\n %s" , err , out .String ())
354+ }
355+ if got ["hint" ] != "Manage your agents \u2192 https://app.onecli.sh" {
356+ t .Errorf ("hint = %q" , got ["hint" ])
357+ }
358+ }
359+
233360func TestErrorGoesToStderr (t * testing.T ) {
234361 var stdout , stderr bytes.Buffer
235362 w := NewWithWriters (& stdout , & stderr )
0 commit comments