func/cmd/templates_test.go

156 lines
3.1 KiB
Go

package cmd
import (
"errors"
"testing"
"github.com/google/go-cmp/cmp"
"gotest.tools/v3/assert"
. "knative.dev/func/pkg/testing"
)
// TestTemplates_Default ensures that the default behavior is listing all
// templates for all language runtimes.
func TestTemplates_Default(t *testing.T) {
_ = FromTempDirectory(t)
buf := piped(t) // gather output
cmd := NewTemplatesCmd(NewClient)
cmd.SetArgs([]string{})
if err := cmd.Execute(); err != nil {
t.Fatal(err)
}
expected := `LANGUAGE TEMPLATE
go cloudevents
go http
node cloudevents
node http
python cloudevents
python flask
python http
python wsgi
quarkus cloudevents
quarkus http
rust cloudevents
rust http
springboot cloudevents
springboot http
typescript cloudevents
typescript http`
if d := cmp.Diff(expected, buf()); d != "" {
t.Error("output missmatch (-want, +got):", d)
}
}
// TestTemplates_JSON ensures that listing templates respects the --json
// output format.
func TestTemplates_JSON(t *testing.T) {
_ = FromTempDirectory(t)
buf := piped(t) // gather output
cmd := NewTemplatesCmd(NewClient)
cmd.SetArgs([]string{"--json"})
if err := cmd.Execute(); err != nil {
t.Fatal(err)
}
expected := `{
"go": [
"cloudevents",
"http"
],
"node": [
"cloudevents",
"http"
],
"python": [
"cloudevents",
"flask",
"http",
"wsgi"
],
"quarkus": [
"cloudevents",
"http"
],
"rust": [
"cloudevents",
"http"
],
"springboot": [
"cloudevents",
"http"
],
"typescript": [
"cloudevents",
"http"
]
}`
if d := cmp.Diff(expected, buf()); d != "" {
t.Error("output missmatch (-want, +got):", d)
}
}
// TestTemplates_ByLanguage ensures that the output is correctly filtered
// by language runtime when provided.
func TestTemplates_ByLanguage(t *testing.T) {
_ = FromTempDirectory(t)
cmd := NewTemplatesCmd(NewClient)
cmd.SetArgs([]string{"go"})
// Test plain text
buf := piped(t)
if err := cmd.Execute(); err != nil {
t.Fatal(err)
}
expected := `cloudevents
http`
output := buf()
if output != expected {
t.Fatalf("expected plain text:\n'%v'\ngot:\n'%v'\n", expected, output)
}
// Test JSON output
buf = piped(t)
cmd.SetArgs([]string{"go", "--json"})
if err := cmd.Execute(); err != nil {
t.Fatal(err)
}
expected = `[
"cloudevents",
"http"
]`
output = buf()
if output != expected {
t.Fatalf("expected JSON:\n'%v'\ngot:\n'%v'\n", expected, output)
}
}
func TestTemplates_ErrTemplateRepoDoesNotExist(t *testing.T) {
_ = FromTempDirectory(t)
cmd := NewTemplatesCmd(NewClient)
cmd.SetArgs([]string{"--repository", "https://github.com/boson-project/repo-does-not-exist"})
err := cmd.Execute()
assert.Assert(t, err != nil)
assert.Assert(t, errors.Is(err, ErrTemplateRepoDoesNotExist))
}
func TestTemplates_WrongRepositoryUrl(t *testing.T) {
_ = FromTempDirectory(t)
cmd := NewTemplatesCmd(NewClient)
cmd.SetArgs([]string{"--repository", "wrong://github.com/boson-project/repo-does-not-exist"})
err := cmd.Execute()
assert.Assert(t, err != nil)
}