163 lines
3.3 KiB
Go
163 lines
3.3 KiB
Go
package export
|
|
|
|
import (
|
|
"bytes"
|
|
"fmt"
|
|
"io"
|
|
"strings"
|
|
"testing"
|
|
"time"
|
|
|
|
"github.com/MakeNowJust/heredoc"
|
|
)
|
|
|
|
func Test_jsonScalarToString(t *testing.T) {
|
|
tests := []struct {
|
|
name string
|
|
input interface{}
|
|
want string
|
|
wantErr bool
|
|
}{
|
|
{
|
|
name: "string",
|
|
input: "hello",
|
|
want: "hello",
|
|
},
|
|
{
|
|
name: "int",
|
|
input: float64(1234),
|
|
want: "1234",
|
|
},
|
|
{
|
|
name: "float",
|
|
input: float64(12.34),
|
|
want: "12.34",
|
|
},
|
|
{
|
|
name: "null",
|
|
input: nil,
|
|
want: "",
|
|
},
|
|
{
|
|
name: "true",
|
|
input: true,
|
|
want: "true",
|
|
},
|
|
{
|
|
name: "false",
|
|
input: false,
|
|
want: "false",
|
|
},
|
|
{
|
|
name: "object",
|
|
input: map[string]interface{}{},
|
|
wantErr: true,
|
|
},
|
|
}
|
|
for _, tt := range tests {
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
got, err := jsonScalarToString(tt.input)
|
|
if (err != nil) != tt.wantErr {
|
|
t.Errorf("jsonScalarToString() error = %v, wantErr %v", err, tt.wantErr)
|
|
return
|
|
}
|
|
if got != tt.want {
|
|
t.Errorf("jsonScalarToString() = %v, want %v", got, tt.want)
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
func Test_executeTemplate(t *testing.T) {
|
|
type args struct {
|
|
json io.Reader
|
|
template string
|
|
colorize bool
|
|
}
|
|
tests := []struct {
|
|
name string
|
|
args args
|
|
wantW string
|
|
wantErr bool
|
|
}{
|
|
{
|
|
name: "color",
|
|
args: args{
|
|
json: strings.NewReader(`{}`),
|
|
template: `{{color "blue+h" "songs are like tattoos"}}`,
|
|
colorize: false,
|
|
},
|
|
wantW: "\x1b[0;94msongs are like tattoos\x1b[0m",
|
|
},
|
|
{
|
|
name: "autocolor enabled",
|
|
args: args{
|
|
json: strings.NewReader(`{}`),
|
|
template: `{{autocolor "red" "stop"}}`,
|
|
colorize: true,
|
|
},
|
|
wantW: "\x1b[0;31mstop\x1b[0m",
|
|
},
|
|
{
|
|
name: "autocolor disabled",
|
|
args: args{
|
|
json: strings.NewReader(`{}`),
|
|
template: `{{autocolor "red" "go"}}`,
|
|
colorize: false,
|
|
},
|
|
wantW: "go",
|
|
},
|
|
{
|
|
name: "timefmt",
|
|
args: args{
|
|
json: strings.NewReader(`{"created_at":"2008-02-25T20:18:33Z"}`),
|
|
template: `{{.created_at | timefmt "Mon Jan 2, 2006"}}`,
|
|
colorize: false,
|
|
},
|
|
wantW: "Mon Feb 25, 2008",
|
|
},
|
|
{
|
|
name: "timeago",
|
|
args: args{
|
|
json: strings.NewReader(fmt.Sprintf(`{"created_at":"%s"}`, time.Now().Add(-5*time.Minute).Format(time.RFC3339))),
|
|
template: `{{.created_at | timeago}}`,
|
|
colorize: false,
|
|
},
|
|
wantW: "5 minutes ago",
|
|
},
|
|
{
|
|
name: "pluck",
|
|
args: args{
|
|
json: strings.NewReader(heredoc.Doc(`[
|
|
{"name": "bug"},
|
|
{"name": "feature request"},
|
|
{"name": "chore"}
|
|
]`)),
|
|
template: `{{range(pluck "name" .)}}{{. | printf "%s\n"}}{{end}}`,
|
|
colorize: false,
|
|
},
|
|
wantW: "bug\nfeature request\nchore\n",
|
|
},
|
|
{
|
|
name: "join",
|
|
args: args{
|
|
json: strings.NewReader(`[ "bug", "feature request", "chore" ]`),
|
|
template: `{{join "\t" .}}`,
|
|
colorize: false,
|
|
},
|
|
wantW: "bug\tfeature request\tchore",
|
|
},
|
|
}
|
|
for _, tt := range tests {
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
w := &bytes.Buffer{}
|
|
if err := ExecuteTemplate(w, tt.args.json, tt.args.template, tt.args.colorize); (err != nil) != tt.wantErr {
|
|
t.Errorf("executeTemplate() error = %v, wantErr %v", err, tt.wantErr)
|
|
return
|
|
}
|
|
if gotW := w.String(); gotW != tt.wantW {
|
|
t.Errorf("executeTemplate() = %q, want %q", gotW, tt.wantW)
|
|
}
|
|
})
|
|
}
|
|
}
|