mirror of
https://github.com/opentofu/opentofu.git
synced 2024-12-26 00:41:27 -06:00
75 lines
1.9 KiB
Go
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"`
|
|
}
|