github.com/myhau/pulumi/pkg/v3@v3.70.2-0.20221116134521-f2775972e587/util/validation/stack_test.go (about)

     1  package validation
     2  
     3  import (
     4  	"fmt"
     5  	"strings"
     6  	"testing"
     7  
     8  	"github.com/pulumi/pulumi/sdk/v3/go/common/apitype"
     9  	"github.com/stretchr/testify/assert"
    10  )
    11  
    12  func TestValidateStackTag(t *testing.T) {
    13  	t.Parallel()
    14  
    15  	t.Run("valid tags", func(t *testing.T) {
    16  		t.Parallel()
    17  
    18  		names := []string{
    19  			"tag-name",
    20  			"-",
    21  			"..",
    22  			"foo:bar:baz",
    23  			"__underscores__",
    24  			"AaBb123",
    25  		}
    26  
    27  		for _, name := range names {
    28  			name := name
    29  			t.Run(name, func(t *testing.T) {
    30  				tags := map[apitype.StackTagName]string{
    31  					name: "tag-value",
    32  				}
    33  
    34  				err := ValidateStackTags(tags)
    35  				assert.NoError(t, err)
    36  			})
    37  		}
    38  	})
    39  
    40  	t.Run("invalid stack tag names", func(t *testing.T) {
    41  		t.Parallel()
    42  
    43  		var names = []string{
    44  			"tag!",
    45  			"something with spaces",
    46  			"escape\nsequences\there",
    47  			"😄",
    48  			"foo***bar",
    49  		}
    50  
    51  		for _, name := range names {
    52  			name := name
    53  			t.Run(name, func(t *testing.T) {
    54  				t.Parallel()
    55  
    56  				tags := map[apitype.StackTagName]string{
    57  					name: "tag-value",
    58  				}
    59  
    60  				err := ValidateStackTags(tags)
    61  				assert.Error(t, err)
    62  				msg := "stack tag names may only contain alphanumerics, hyphens, underscores, periods, or colons"
    63  				assert.Equal(t, err.Error(), msg)
    64  			})
    65  		}
    66  	})
    67  
    68  	t.Run("too long tag name", func(t *testing.T) {
    69  		t.Parallel()
    70  
    71  		tags := map[apitype.StackTagName]string{
    72  			strings.Repeat("v", 41): "tag-value",
    73  		}
    74  
    75  		err := ValidateStackTags(tags)
    76  		assert.Error(t, err)
    77  		msg := fmt.Sprintf("stack tag %q is too long (max length %d characters)", strings.Repeat("v", 41), 40)
    78  		assert.Equal(t, err.Error(), msg)
    79  	})
    80  
    81  	t.Run("too long tag value", func(t *testing.T) {
    82  		t.Parallel()
    83  
    84  		tags := map[apitype.StackTagName]string{
    85  			"tag-name": strings.Repeat("v", 257),
    86  		}
    87  
    88  		err := ValidateStackTags(tags)
    89  		assert.Error(t, err)
    90  		msg := fmt.Sprintf("stack tag %q value is too long (max length %d characters)", "tag-name", 256)
    91  		assert.Equal(t, err.Error(), msg)
    92  	})
    93  }