command: test `get` with const variables

pull/38303/head
Daniel Banck 1 month ago
parent 734cda934b
commit 0d751be30b
No known key found for this signature in database

@ -8,6 +8,10 @@ import (
"testing"
"github.com/hashicorp/cli"
"github.com/hashicorp/terraform/internal/backend"
backendInit "github.com/hashicorp/terraform/internal/backend/init"
backendCloud "github.com/hashicorp/terraform/internal/cloud"
)
func TestGet(t *testing.T) {
@ -113,3 +117,89 @@ func TestGet_cancel(t *testing.T) {
t.Fatalf("wrong error message\nshould contain: %s\ngot:\n%s", want, got)
}
}
func TestGet_constVariable(t *testing.T) {
// Scenario 1: no value for variable -> diagnostic
t.Run("missing value", func(t *testing.T) {
wd := tempWorkingDirFixture(t, "dynamic-module-sources/get-const-var")
t.Chdir(wd.RootModuleDir())
ui := cli.NewMockUi()
c := &GetCommand{
Meta: Meta{
testingOverrides: metaOverridesForProvider(testProvider()),
Ui: ui,
WorkingDir: wd,
},
}
args := []string{}
if code := c.Run(args); code == 0 {
t.Fatalf("expected error, got 0")
}
errStr := ui.ErrorWriter.String()
if !strings.Contains(errStr, "No value for required variable") {
t.Fatalf("expected missing variable error, got: %s", errStr)
}
})
// Scenario 2: value via cli -> works
t.Run("value via cli", func(t *testing.T) {
wd := tempWorkingDirFixture(t, "dynamic-module-sources/get-const-var")
t.Chdir(wd.RootModuleDir())
ui := cli.NewMockUi()
c := &GetCommand{
Meta: Meta{
testingOverrides: metaOverridesForProvider(testProvider()),
Ui: ui,
WorkingDir: wd,
},
}
args := []string{"-var", "module_name=example"}
if code := c.Run(args); code != 0 {
t.Fatalf("bad: \n%s", ui.ErrorWriter.String())
}
output := ui.OutputWriter.String()
if !strings.Contains(output, "- example in") {
t.Fatalf("doesn't look like get: %s", output)
}
})
// Scenario 3: value via backend
t.Run("value via backend", func(t *testing.T) {
server := cloudTestServerWithVars(t)
defer server.Close()
d := testDisco(server)
previousBackend := backendInit.Backend("cloud")
backendInit.Set("cloud", func() backend.Backend { return backendCloud.New(d) })
defer backendInit.Set("cloud", previousBackend)
wd := tempWorkingDirFixture(t, "dynamic-module-sources/get-const-var-backend")
t.Chdir(wd.RootModuleDir())
ui := cli.NewMockUi()
c := &GetCommand{
Meta: Meta{
testingOverrides: metaOverridesForProvider(testProvider()),
Ui: ui,
WorkingDir: wd,
Services: d,
},
}
args := []string{}
if code := c.Run(args); code != 0 {
t.Fatalf("bad: \n%s", ui.ErrorWriter.String())
}
output := ui.OutputWriter.String()
if !strings.Contains(output, "- example in") {
t.Fatalf("doesn't look like get: %s", output)
}
})
}

@ -0,0 +1,18 @@
{
"version": 3,
"terraform_version": "1.15.0",
"backend": {
"type": "cloud",
"config": {
"hostname": null,
"organization": "hashicorp",
"token": null,
"workspaces": {
"name": "test",
"project": null,
"tags": null
}
},
"hash": 1816475682
}
}

@ -0,0 +1,17 @@
terraform {
cloud {
organization = "hashicorp"
workspaces {
name = "test"
}
}
}
variable "module_name" {
type = string
const = true
}
module "example" {
source = "./modules/${var.module_name}"
}

@ -0,0 +1,8 @@
variable "module_name" {
type = string
const = true
}
module "example" {
source = "./modules/${var.module_name}"
}
Loading…
Cancel
Save