get.porter.sh/porter@v1.3.0/pkg/cnab/parameter_sources_test.go (about)

     1  package cnab
     2  
     3  import (
     4  	"os"
     5  	"testing"
     6  
     7  	"github.com/cnabio/cnab-go/bundle"
     8  	"github.com/stretchr/testify/assert"
     9  	"github.com/stretchr/testify/require"
    10  )
    11  
    12  func TestProcessedExtensions_GetParameterSourcesExtension(t *testing.T) {
    13  	t.Parallel()
    14  
    15  	t.Run("extension present", func(t *testing.T) {
    16  		t.Parallel()
    17  
    18  		var ps ParameterSources
    19  		ps.SetParameterFromOutput("tfstate", "tfstate")
    20  		processed := ProcessedExtensions{
    21  			ParameterSourcesExtensionKey: ps,
    22  		}
    23  
    24  		ext, required, err := processed.GetParameterSources()
    25  		require.NoError(t, err, "GetParameterSources failed")
    26  		assert.True(t, required, "parameter-sources should be a required extension")
    27  		assert.Equal(t, ps, ext, "parameter-sources was not populated properly")
    28  	})
    29  
    30  	t.Run("extension missing", func(t *testing.T) {
    31  		t.Parallel()
    32  
    33  		processed := ProcessedExtensions{}
    34  
    35  		ext, required, err := processed.GetParameterSources()
    36  		require.NoError(t, err, "GetParameterSources failed")
    37  		assert.False(t, required, "parameter-sources should NOT be a required extension")
    38  		assert.Empty(t, ext, "parameter-sources should default to empty when not required")
    39  	})
    40  
    41  	t.Run("extension invalid", func(t *testing.T) {
    42  		t.Parallel()
    43  
    44  		processed := ProcessedExtensions{
    45  			ParameterSourcesExtensionKey: map[string]string{"ponies": "are great"},
    46  		}
    47  
    48  		ext, required, err := processed.GetParameterSources()
    49  		require.Error(t, err, "GetParameterSources should have failed")
    50  		assert.True(t, required, "parameter-sources should be a required extension")
    51  		assert.Empty(t, ext, "parameter-sources should default to empty when not required")
    52  	})
    53  }
    54  
    55  func TestReadParameterSourcesProperties(t *testing.T) {
    56  	t.Parallel()
    57  
    58  	data, err := os.ReadFile("testdata/bundle.json")
    59  	require.NoError(t, err, "cannot read bundle file")
    60  
    61  	b, err := bundle.Unmarshal(data)
    62  	require.NoError(t, err, "could not unmarshal the bundle")
    63  	bun := NewBundle(*b)
    64  	assert.True(t, bun.HasParameterSources())
    65  
    66  	ps, err := bun.ReadParameterSources()
    67  	require.NoError(t, err, "could not read parameter sources")
    68  
    69  	want := ParameterSources{}
    70  	want.SetParameterFromOutput("tfstate", "tfstate")
    71  	want.SetParameterFromDependencyOutput("mysql_connstr", "mysql", "connstr")
    72  	assert.Equal(t, want, ps)
    73  }
    74  
    75  func TestParameterSource_ListSourcesByPriority(t *testing.T) {
    76  	t.Parallel()
    77  
    78  	ps := ParameterSources{}
    79  	ps.SetParameterFromOutput("tfstate", "tfstate")
    80  	got := ps["tfstate"].ListSourcesByPriority()
    81  	want := []ParameterSourceDefinition{
    82  		OutputParameterSource{OutputName: "tfstate"},
    83  	}
    84  	assert.Equal(t, want, got)
    85  }
    86  
    87  func TestSupportsParameterSources(t *testing.T) {
    88  	t.Parallel()
    89  
    90  	t.Run("supported", func(t *testing.T) {
    91  		b := NewBundle(bundle.Bundle{
    92  			RequiredExtensions: []string{ParameterSourcesExtensionKey},
    93  		})
    94  
    95  		assert.True(t, b.SupportsParameterSources())
    96  	})
    97  	t.Run("unsupported", func(t *testing.T) {
    98  		b := ExtendedBundle{}
    99  
   100  		assert.False(t, b.SupportsParameterSources())
   101  	})
   102  }
   103  
   104  func TestHasParameterSources(t *testing.T) {
   105  	t.Parallel()
   106  
   107  	t.Run("has parameter sources", func(t *testing.T) {
   108  		b := NewBundle(bundle.Bundle{
   109  			RequiredExtensions: []string{ParameterSourcesExtensionKey},
   110  			Custom: map[string]interface{}{
   111  				ParameterSourcesExtensionKey: struct{}{},
   112  			},
   113  		})
   114  
   115  		assert.True(t, b.HasParameterSources())
   116  	})
   117  	t.Run("no parameter sources", func(t *testing.T) {
   118  		b := NewBundle(bundle.Bundle{
   119  			RequiredExtensions: []string{ParameterSourcesExtensionKey},
   120  		})
   121  
   122  		assert.False(t, b.HasParameterSources())
   123  	})
   124  }