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  })