| // 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"` |
| } |