From a5802792ec0d351920c9756a40ca4048d682e724 Mon Sep 17 00:00:00 2001 From: Steve Moyer Date: Thu, 18 Aug 2022 06:18:23 -0400 Subject: feat(836): updates default ls formatter for TSV output Resolves #836 --- commands/ls.go | 2 +- commands/ls_test.go | 60 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 61 insertions(+), 1 deletion(-) diff --git a/commands/ls.go b/commands/ls.go index 61724f2a..f5fc6681 100644 --- a/commands/ls.go +++ b/commands/ls.go @@ -279,7 +279,7 @@ func lsDefaultFormatter(env *Env, bugExcerpts []*cache.BugExcerpt) error { comments = " ∞ 💬" } - env.out.Printf("%s %s\t%s\t%s\t%s\n", + env.out.Printf("%s\t%s\t%s\t%s\t%s\n", colors.Cyan(b.Id.Human()), colors.Yellow(b.Status), titleFmt+labelsFmt, diff --git a/commands/ls_test.go b/commands/ls_test.go index aff94e03..46728847 100644 --- a/commands/ls_test.go +++ b/commands/ls_test.go @@ -1,6 +1,8 @@ package commands import ( + "encoding/json" + "fmt" "testing" "github.com/stretchr/testify/require" @@ -41,3 +43,61 @@ func Test_repairQuery(t *testing.T) { require.Equal(t, tc.output, repairQuery(tc.args)) } } + +func TestLs_Format(t *testing.T) { + const expOrgMode = `^#+TODO: OPEN | CLOSED +[*] OPEN [0-9a-f]{7} \[\d\d\d\d-\d\d-\d\d [[:alpha:]]{3} \d\d:\d\d\] John Doe: this is a bug title :: +[*]{2} Last Edited: \[\d\d\d\d-\d\d-\d\d [[:alpha:]]{3} \d\d:\d\d\] +[*]{2} Actors: +: [0-9a-f]{7} John Doe +[*]{2} Participants: +: [0-9a-f]{7} John Doe +$` + + cases := []struct { + format string + exp string + }{ + {"default", "^[0-9a-f]{7}\topen\tthis is a bug title \tJohn Doe \t\n$"}, + {"plain", "^[0-9a-f]{7} \\[open\\] this is a bug title\n$"}, + {"compact", "^[0-9a-f]{7} open this is a bug title John Doe\n$"}, + {"org-mode", expOrgMode}, + } + + for _, testcase := range cases { + opts := lsOptions{ + sortDirection: "asc", + sortBy: "creation", + outputFormat: testcase.format, + } + + name := fmt.Sprintf("with %s format", testcase.format) + + t.Run(name, func(t *testing.T) { + env, _, _ := newTestEnvAndBug(t) + + require.NoError(t, runLs(env.env, opts, []string{})) + t.Log(env.out.String()) + require.Regexp(t, testcase.exp, env.out.String()) + require.Equal(t, "", env.err.String()) + }) + } + + t.Run("with JSON format", func(t *testing.T) { + opts := lsOptions{ + sortDirection: "asc", + sortBy: "creation", + outputFormat: "json", + } + + env, _, _ := newTestEnvAndBug(t) + + require.NoError(t, runLs(env.env, opts, []string{})) + + bugs := []JSONBugExcerpt{} + require.NoError(t, json.Unmarshal(env.out.Bytes(), &bugs)) + require.Empty(t, env.err.Bytes()) + + require.Len(t, bugs, 1) + }) +} -- cgit