opentofu/internal/command/metadata_functions_test.go
2023-05-02 15:33:06 +00:00

75 lines
1.9 KiB
Go

// Copyright (c) HashiCorp, Inc.
// SPDX-License-Identifier: MPL-2.0
package command
import (
"encoding/json"
"testing"
"github.com/mitchellh/cli"
)
func TestMetadataFunctions_error(t *testing.T) {
ui := new(cli.MockUi)
c := &MetadataFunctionsCommand{
Meta: Meta{
Ui: ui,
},
}
// This test will always error because it's missing the -json flag
if code := c.Run(nil); code != 1 {
t.Fatalf("expected error, got:\n%s", ui.OutputWriter.String())
}
}
func TestMetadataFunctions_output(t *testing.T) {
ui := new(cli.MockUi)
m := Meta{Ui: ui}
c := &MetadataFunctionsCommand{Meta: m}
if code := c.Run([]string{"-json"}); code != 0 {
t.Fatalf("wrong exit status %d; want 0\nstderr: %s", code, ui.ErrorWriter.String())
}
var got functions
gotString := ui.OutputWriter.String()
err := json.Unmarshal([]byte(gotString), &got)
if err != nil {
t.Fatal(err)
}
if len(got.Signatures) < 100 {
t.Fatalf("expected at least 100 function signatures, got %d", len(got.Signatures))
}
// check if one particular stable function is correct
gotMax, ok := got.Signatures["max"]
wantMax := "{\"description\":\"`max` takes one or more numbers and returns the greatest number from the set.\",\"return_type\":\"number\",\"variadic_parameter\":{\"name\":\"numbers\",\"type\":\"number\"}}"
if !ok {
t.Fatal(`missing function signature for "max"`)
}
if string(gotMax) != wantMax {
t.Fatalf("wrong function signature for \"max\":\ngot: %q\nwant: %q", gotMax, wantMax)
}
stderr := ui.ErrorWriter.String()
if stderr != "" {
t.Fatalf("expected empty stderr, got:\n%s", stderr)
}
// test that ignored functions are not part of the json
for _, v := range ignoredFunctions {
_, ok := got.Signatures[v]
if ok {
t.Fatalf("found ignored function %q inside output", v)
}
}
}
type functions struct {
FormatVersion string `json:"format_version"`
Signatures map[string]json.RawMessage `json:"function_signatures,omitempty"`
}