github.com/kyma-incubator/compass/components/director@v0.0.0-20230623144113-d764f56ff805/pkg/namespacedname/namespacedname_test.go (about)

     1  package namespacedname
     2  
     3  import (
     4  	"fmt"
     5  	"testing"
     6  
     7  	"github.com/stretchr/testify/require"
     8  )
     9  
    10  func TestParse(t *testing.T) {
    11  	namespace := "namespace"
    12  	name := "resource-name"
    13  	emptyStr := ""
    14  
    15  	t.Run("Should return error if empty string is provided", func(t *testing.T) {
    16  		// given
    17  		str := emptyStr
    18  
    19  		// when
    20  		namespacedname, err := Parse(str)
    21  
    22  		// then
    23  		require.Error(t, err)
    24  		require.Contains(t, err.Error(), "the value cannot be empty")
    25  		require.Empty(t, namespacedname)
    26  	})
    27  
    28  	t.Run("Should return error when the string is not in the expected format", func(t *testing.T) {
    29  		// given
    30  		str := fmt.Sprintf("%s/%s/wrong", namespace, name)
    31  
    32  		// when
    33  		namespacedname, err := Parse(str)
    34  
    35  		// then
    36  		require.Error(t, err)
    37  		require.Contains(t, err.Error(), fmt.Sprintf("the given value: %s is not in the expected format - <namespace>/<name>", str))
    38  		require.Empty(t, namespacedname)
    39  	})
    40  
    41  	t.Run("If single value is provided should return it as resource name and use default namespace", func(t *testing.T) {
    42  		// given
    43  		str := name
    44  
    45  		// when
    46  		namespacedname, err := Parse(str)
    47  
    48  		// then
    49  		require.NoError(t, err)
    50  		require.Equal(t, namespacedname.Namespace, "default")
    51  		require.Equal(t, namespacedname.Name, name)
    52  	})
    53  
    54  	t.Run("Should return error when only slash is provided", func(t *testing.T) {
    55  		// given
    56  		str := "/"
    57  
    58  		// when
    59  		namespacedname, err := Parse(str)
    60  
    61  		// then
    62  		require.Error(t, err)
    63  		require.Contains(t, err.Error(), "resource name should not be empty")
    64  		require.Empty(t, namespacedname)
    65  	})
    66  
    67  	t.Run("If namespace is empty use the provided resource name with default namespace", func(t *testing.T) {
    68  		// given
    69  		str := fmt.Sprintf("%s/%s", emptyStr, name)
    70  
    71  		// when
    72  		namespacedname, err := Parse(str)
    73  
    74  		// then
    75  		require.NoError(t, err)
    76  		require.Equal(t, namespacedname.Namespace, "default")
    77  		require.Equal(t, namespacedname.Name, name)
    78  	})
    79  
    80  	t.Run("Successful when both namespace and resource name are provided", func(t *testing.T) {
    81  		// given
    82  		str := fmt.Sprintf("%s/%s", namespace, name)
    83  
    84  		// when
    85  		namespacedname, err := Parse(str)
    86  
    87  		// then
    88  		require.NoError(t, err)
    89  		require.Equal(t, namespacedname.Namespace, namespace)
    90  		require.Equal(t, namespacedname.Name, name)
    91  	})
    92  }