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 }