diff --git a/CHANGELOG.md b/CHANGELOG.md index 69d52eb52..9593ac299 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,9 @@ # Unreleased +## Bug Fixes + +Fix an issue where stack creation panics if no project is provided in the `StackCreateOptions` creation options structure by @arybolovlev [#1284](https://github.com/hashicorp/go-tfe/pull/1284) + # v1.101.0 ## Enhancements diff --git a/stack.go b/stack.go index 0e70bb719..3bc091839 100644 --- a/stack.go +++ b/stack.go @@ -310,7 +310,7 @@ func (s StackCreateOptions) valid() error { return ErrRequiredName } - if s.Project.ID == "" { + if s.Project == nil || s.Project.ID == "" { return ErrRequiredProject } diff --git a/stack_test.go b/stack_test.go new file mode 100644 index 000000000..ce59527f9 --- /dev/null +++ b/stack_test.go @@ -0,0 +1,52 @@ +// Copyright IBM Corp. 2018, 2025 +// SPDX-License-Identifier: MPL-2.0 + +package tfe + +import ( + "testing" + + "github.com/stretchr/testify/assert" +) + +func Test_validStackCreateOptions(t *testing.T) { + t.Parallel() + + t.Run("with empty stack name", func(t *testing.T) { + s := &StackCreateOptions{ + Name: "", + } + err := s.valid() + assert.Error(t, err, ErrRequiredName.Error()) + }) + + t.Run("with empty project option", func(t *testing.T) { + s := &StackCreateOptions{ + Name: "test", + } + err := s.valid() + assert.Error(t, err, ErrRequiredProject.Error()) + }) + + t.Run("with empty project ID", func(t *testing.T) { + s := &StackCreateOptions{ + Name: "test", + Project: &Project{ + ID: "", + }, + } + err := s.valid() + assert.Error(t, err, ErrRequiredProject.Error()) + }) + + t.Run("with valid options", func(t *testing.T) { + s := &StackCreateOptions{ + Name: "test", + Project: &Project{ + ID: "prj-test", + }, + } + err := s.valid() + assert.NoError(t, err) + }) +}