github.com/replicatedhq/ship@v0.55.0/pkg/lifecycle/terraform/when_test.go (about)

     1  package terraform
     2  
     3  import (
     4  	"testing"
     5  
     6  	"github.com/replicatedhq/ship/pkg/api"
     7  	"github.com/replicatedhq/ship/pkg/state"
     8  	"github.com/replicatedhq/ship/pkg/testing/logger"
     9  	"github.com/spf13/afero"
    10  	"github.com/spf13/viper"
    11  	"github.com/stretchr/testify/require"
    12  )
    13  
    14  func TestEvaluateWhen(t *testing.T) {
    15  	tests := []struct {
    16  		name    string
    17  		State   state.State
    18  		when    string
    19  		release api.Release
    20  		want    bool
    21  	}{
    22  		{
    23  			name:    "no when",
    24  			State:   state.State{V1: &state.V1{}},
    25  			when:    "",
    26  			release: api.Release{Metadata: api.ReleaseMetadata{}},
    27  			want:    true,
    28  		},
    29  		{
    30  			name:    "true when",
    31  			State:   state.State{V1: &state.V1{}},
    32  			when:    "true",
    33  			release: api.Release{Metadata: api.ReleaseMetadata{}},
    34  			want:    true,
    35  		},
    36  		{
    37  			name:    "false when",
    38  			State:   state.State{V1: &state.V1{}},
    39  			when:    "false",
    40  			release: api.Release{Metadata: api.ReleaseMetadata{}},
    41  			want:    false,
    42  		},
    43  		{
    44  			name:    "trivial template when true",
    45  			State:   state.State{V1: &state.V1{}},
    46  			when:    "{{repl eq 1 1}}",
    47  			release: api.Release{Metadata: api.ReleaseMetadata{}},
    48  			want:    true,
    49  		},
    50  		{
    51  			name:    "trivial template when false",
    52  			State:   state.State{V1: &state.V1{}},
    53  			when:    "{{repl eq 1 2}}",
    54  			release: api.Release{Metadata: api.ReleaseMetadata{}},
    55  			want:    false,
    56  		},
    57  		{
    58  			name:    "configOption template when true",
    59  			State:   state.State{V1: &state.V1{Config: map[string]interface{}{"theOption": "hello_world"}}},
    60  			when:    `{{repl ConfigOptionEquals "theOption" "hello_world"}}`,
    61  			release: api.Release{Metadata: api.ReleaseMetadata{}},
    62  			want:    true,
    63  		},
    64  		{
    65  			name:    "configOption template when false",
    66  			State:   state.State{V1: &state.V1{Config: map[string]interface{}{"theOption": "hello_world"}}},
    67  			when:    `{{repl ConfigOptionEquals "theOption" "something else"}}`,
    68  			release: api.Release{Metadata: api.ReleaseMetadata{}},
    69  			want:    false,
    70  		},
    71  	}
    72  	for _, tt := range tests {
    73  		t.Run(tt.name, func(t *testing.T) {
    74  			req := require.New(t)
    75  			fs := afero.Afero{Fs: afero.NewMemMapFs()}
    76  			tlogger := &logger.TestLogger{T: t}
    77  			tviper := viper.New()
    78  			stateManager, err := state.NewDisposableManager(tlogger, fs, tviper)
    79  			req.NoError(err)
    80  
    81  			req.NoError(stateManager.Save(tt.State))
    82  			req.NoError(stateManager.SerializeAppMetadata(tt.release.Metadata))
    83  
    84  			forkTF := &ForkTerraformer{
    85  				Logger:       tlogger,
    86  				Viper:        tviper,
    87  				StateManager: stateManager,
    88  			}
    89  			daemonlessTF := &DaemonlessTerraformer{
    90  				Logger:       tlogger,
    91  				Viper:        tviper,
    92  				StateManager: stateManager,
    93  			}
    94  
    95  			req.Equal(tt.want, forkTF.evaluateWhen(tt.when, tt.release), "ForkTerraformer.evaluateWhen()")
    96  			req.Equal(tt.want, daemonlessTF.evaluateWhen(tt.when, tt.release), "DaemonlessTerraformer.evaluateWhen()")
    97  		})
    98  	}
    99  }