apply_test.go 2.58 KB
Newer Older
bryanl's avatar
bryanl committed
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
// Copyright 2018 The ksonnet authors
//
//
//    Licensed under the Apache License, Version 2.0 (the "License");
//    you may not use this file except in compliance with the License.
//    You may obtain a copy of the License at
//
//      http://www.apache.org/licenses/LICENSE-2.0
//
//    Unless required by applicable law or agreed to in writing, software
//    distributed under the License is distributed on an "AS IS" BASIS,
//    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
//    See the License for the specific language governing permissions and
//    limitations under the License.

package actions

import (
	"testing"

	"github.com/ksonnet/ksonnet/client"
bryanl's avatar
bryanl committed
22
	amocks "github.com/ksonnet/ksonnet/pkg/app/mocks"
bryanl's avatar
bryanl committed
23 24 25 26 27 28
	"github.com/ksonnet/ksonnet/pkg/cluster"
	"github.com/stretchr/testify/assert"
	"github.com/stretchr/testify/require"
)

func TestApply(t *testing.T) {
bryanl's avatar
bryanl committed
29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
	cases := []struct {
		name        string
		isSetupErr  bool
		currentName string
		envName     string
	}{
		{
			name:    "with a supplied env",
			envName: "default",
		},
		{
			name:        "with a current env",
			currentName: "default",
		},
		{
			name:       "without supplied or current env",
			isSetupErr: true,
		},
	}
bryanl's avatar
bryanl committed
48

bryanl's avatar
bryanl committed
49 50 51 52
	for _, tc := range cases {
		t.Run(tc.name, func(t *testing.T) {
			withApp(t, func(appMock *amocks.App) {
				appMock.On("CurrentEnvironment").Return(tc.currentName)
bryanl's avatar
bryanl committed
53

bryanl's avatar
bryanl committed
54 55 56 57 58 59 60 61 62 63
				in := map[string]interface{}{
					OptionApp:            appMock,
					OptionClientConfig:   &client.Config{},
					OptionComponentNames: []string{},
					OptionCreate:         true,
					OptionDryRun:         true,
					OptionEnvName:        tc.envName,
					OptionGcTag:          "gc-tag",
					OptionSkipGc:         true,
				}
bryanl's avatar
bryanl committed
64

bryanl's avatar
bryanl committed
65 66 67 68 69 70 71 72 73 74
				expected := cluster.ApplyConfig{
					App:            appMock,
					ClientConfig:   &client.Config{},
					ComponentNames: []string{},
					Create:         true,
					DryRun:         true,
					EnvName:        "default",
					GcTag:          "gc-tag",
					SkipGc:         true,
				}
bryanl's avatar
bryanl committed
75

bryanl's avatar
bryanl committed
76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94
				runApplyOpt := func(a *Apply) {
					a.runApplyFn = func(config cluster.ApplyConfig, opts ...cluster.ApplyOpts) error {
						assert.Equal(t, expected, config)
						return nil
					}
				}

				a, err := newApply(in, runApplyOpt)
				if tc.isSetupErr {
					require.Error(t, err)
					return
				}
				require.NoError(t, err)

				err = a.run()
				require.NoError(t, err)
			})
		})
	}
bryanl's avatar
bryanl committed
95 96 97 98 99 100 101 102 103 104 105 106
}

func TestApply_invalid_input(t *testing.T) {
	withApp(t, func(appMock *amocks.App) {
		in := map[string]interface{}{
			OptionClientConfig: "invalid",
		}

		_, err := newApply(in)
		require.Error(t, err)
	})
}