github.com/kotalco/kotal@v0.3.0/apis/near/v1alpha1/node_validation_webhook_test.go (about) 1 package v1alpha1 2 3 import ( 4 "fmt" 5 6 "github.com/kotalco/kotal/apis/shared" 7 . "github.com/onsi/ginkgo/v2" 8 . "github.com/onsi/gomega" 9 "k8s.io/apimachinery/pkg/api/errors" 10 v1 "k8s.io/apimachinery/pkg/apis/meta/v1" 11 "k8s.io/apimachinery/pkg/util/validation/field" 12 ) 13 14 var _ = Describe("NEAR node validation", func() { 15 createCases := []struct { 16 Title string 17 Node *Node 18 Errors field.ErrorList 19 }{} 20 21 updateCases := []struct { 22 Title string 23 OldNode *Node 24 NewNode *Node 25 Errors field.ErrorList 26 }{ 27 { 28 Title: "updated network", 29 OldNode: &Node{ 30 ObjectMeta: v1.ObjectMeta{ 31 Name: "my-node", 32 }, 33 Spec: NodeSpec{ 34 Network: "mainnet", 35 }, 36 }, 37 NewNode: &Node{ 38 ObjectMeta: v1.ObjectMeta{ 39 Name: "my-node", 40 }, 41 Spec: NodeSpec{ 42 Network: "testnet", 43 }, 44 }, 45 Errors: field.ErrorList{ 46 { 47 Type: field.ErrorTypeInvalid, 48 Field: "spec.network", 49 BadValue: "testnet", 50 Detail: "field is immutable", 51 }, 52 }, 53 }, 54 } 55 56 Context("While creating node", func() { 57 for _, c := range createCases { 58 func() { 59 cc := c 60 It(fmt.Sprintf("Should validate %s", cc.Title), func() { 61 cc.Node.Default() 62 _, err := cc.Node.ValidateCreate() 63 64 errStatus := err.(*errors.StatusError) 65 66 causes := shared.ErrorsToCauses(cc.Errors) 67 68 Expect(errStatus.ErrStatus.Details.Causes).To(ContainElements(causes)) 69 }) 70 }() 71 } 72 }) 73 74 Context("While updating node", func() { 75 for _, c := range updateCases { 76 func() { 77 cc := c 78 It(fmt.Sprintf("Should validate %s", cc.Title), func() { 79 cc.OldNode.Default() 80 cc.NewNode.Default() 81 _, err := cc.NewNode.ValidateUpdate(cc.OldNode) 82 83 errStatus := err.(*errors.StatusError) 84 85 causes := shared.ErrorsToCauses(cc.Errors) 86 87 Expect(errStatus.ErrStatus.Details.Causes).To(ContainElements(causes)) 88 }) 89 }() 90 } 91 }) 92 93 })