package jsonpatch import ( "errors" "testing" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" corev1 "k8s.io/api/core/v1" v1ien "edge-infra.dev/pkg/sds/ien/k8s/apis/v1" "edge-infra.dev/pkg/sds/ien/node" ) func TestOperationsToString(t *testing.T) { testCases := []struct { ops []Operation expectedStr string err error }{ { ops: []Operation{ { Op: Add, Path: "/spec/template/spec/affinity", Value: corev1.Affinity{ NodeAffinity: &corev1.NodeAffinity{ RequiredDuringSchedulingIgnoredDuringExecution: &corev1.NodeSelector{ NodeSelectorTerms: []corev1.NodeSelectorTerm{ { MatchExpressions: []corev1.NodeSelectorRequirement{ { Key: node.ClassLabel, Operator: corev1.NodeSelectorOpNotIn, Values: []string{string(v1ien.Server)}, }, }, }, }, }, }, }, }, }, expectedStr: `- op: add path: /spec/template/spec/affinity value: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: node.ncr.com/class operator: NotIn values: - server `, err: nil, }, { ops: []Operation{ { Op: Replace, Path: "/spec/nodeSelectorTerms", Value: []corev1.NodeSelectorTerm{ { MatchExpressions: []corev1.NodeSelectorRequirement{ { Key: node.ClassLabel, Operator: corev1.NodeSelectorOpNotIn, Values: []string{string(v1ien.Server)}, }, }, }, }, }, { Op: Add, Path: "/spec/template/metadata/annotations", Value: map[string]string{ "edge.ncr.com/helm-edge-id": "ce77374f-0b5b-4092-bd8b-3b6ee9e96061", }, }, }, expectedStr: `- op: replace path: /spec/nodeSelectorTerms value: - matchExpressions: - key: node.ncr.com/class operator: NotIn values: - server - op: add path: /spec/template/metadata/annotations value: edge.ncr.com/helm-edge-id: ce77374f-0b5b-4092-bd8b-3b6ee9e96061 `, err: nil, }, } for _, tc := range testCases { patch := NewPatch(tc.ops...) actualStr, err := patch.String() require.True(t, errors.Is(err, tc.err)) assert.Equal(t, tc.expectedStr, actualStr) } }