github.com/kotalco/kotal@v0.3.0/apis/filecoin/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  	"k8s.io/apimachinery/pkg/util/validation/field"
    11  )
    12  
    13  var _ = Describe("Filecoin node validation", func() {
    14  
    15  	updateCases := []struct {
    16  		Title   string
    17  		OldNode *Node
    18  		NewNode *Node
    19  		Errors  field.ErrorList
    20  	}{
    21  		{
    22  			Title: "network #1",
    23  			OldNode: &Node{
    24  				Spec: NodeSpec{
    25  					Network: MainNetwork,
    26  				},
    27  			},
    28  			NewNode: &Node{
    29  				Spec: NodeSpec{
    30  					Network: CalibrationNetwork,
    31  				},
    32  			},
    33  			Errors: field.ErrorList{
    34  				{
    35  					Type:     field.ErrorTypeInvalid,
    36  					Field:    "spec.network",
    37  					BadValue: CalibrationNetwork,
    38  					Detail:   "field is immutable",
    39  				},
    40  			},
    41  		},
    42  	}
    43  
    44  	Context("While updating node", func() {
    45  		for _, c := range updateCases {
    46  			func() {
    47  				cc := c
    48  				It(fmt.Sprintf("Should validate %s", cc.Title), func() {
    49  					cc.NewNode.Default()
    50  					cc.OldNode.Default()
    51  					_, err := cc.NewNode.ValidateUpdate(cc.OldNode)
    52  
    53  					errStatus := err.(*errors.StatusError)
    54  
    55  					causes := shared.ErrorsToCauses(cc.Errors)
    56  
    57  					Expect(errStatus.ErrStatus.Details.Causes).To(ContainElements(causes))
    58  				})
    59  			}()
    60  		}
    61  	})
    62  
    63  })