github.com/1aal/kubeblocks@v0.0.0-20231107070852-e1c03e598921/pkg/cli/edit/custom_edit_test.go (about) 1 /* 2 Copyright (C) 2022-2023 ApeCloud Co., Ltd 3 4 This file is part of KubeBlocks project 5 6 This program is free software: you can redistribute it and/or modify 7 it under the terms of the GNU Affero General Public License as published by 8 the Free Software Foundation, either version 3 of the License, or 9 (at your option) any later version. 10 11 This program is distributed in the hope that it will be useful 12 but WITHOUT ANY WARRANTY; without even the implied warranty of 13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 GNU Affero General Public License for more details. 15 16 You should have received a copy of the GNU Affero General Public License 17 along with this program. If not, see <http://www.gnu.org/licenses/>. 18 */ 19 20 package edit 21 22 import ( 23 . "github.com/onsi/ginkgo/v2" 24 . "github.com/onsi/gomega" 25 26 "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" 27 "k8s.io/cli-runtime/pkg/genericiooptions" 28 clientfake "k8s.io/client-go/rest/fake" 29 cmdtesting "k8s.io/kubectl/pkg/cmd/testing" 30 31 "github.com/1aal/kubeblocks/pkg/cli/testing" 32 ) 33 34 var _ = Describe("Custom edit", func() { 35 var ( 36 streams genericiooptions.IOStreams 37 tf *cmdtesting.TestFactory 38 ) 39 40 BeforeEach(func() { 41 streams, _, _, _ = genericiooptions.NewTestIOStreams() 42 tf = cmdtesting.NewTestFactory().WithNamespace(testing.Namespace) 43 tf.Client = &clientfake.RESTClient{} 44 }) 45 46 AfterEach(func() { 47 tf.Cleanup() 48 }) 49 50 It("test edit the cluster resource before updating", func() { 51 options := NewCustomEditOptions(tf, streams, "patched") 52 options.TestEnv = true 53 resObj := &unstructured.Unstructured{ 54 Object: map[string]interface{}{ 55 "apiVersion": "v1", 56 "kind": "Namespace", 57 "metadata": map[string]interface{}{ 58 "name": "test", 59 }, 60 "spec": map[string]interface{}{ 61 "clusterDefinitionRef": "apecloud-mysql", 62 }, 63 }, 64 } 65 Expect(options.Run(resObj)).Should(Succeed()) 66 }) 67 68 It("test edit the cluster resource before creating", func() { 69 options := NewCustomEditOptions(tf, streams, "create") 70 options.TestEnv = true 71 resObj := &unstructured.Unstructured{ 72 Object: map[string]interface{}{ 73 "apiVersion": "v1", 74 "kind": "Namespace", 75 "metadata": map[string]interface{}{ 76 "name": "test", 77 }, 78 "spec": map[string]interface{}{ 79 "clusterDefinitionRef": "apecloud-mysql", 80 }, 81 }, 82 } 83 Expect(options.Run(resObj)).Should(Succeed()) 84 }) 85 })