1
0
Fork 0
mirror of https://github.com/kyverno/kyverno.git synced 2025-03-07 00:17:13 +00:00
kyverno/pkg/cel/utils/convert_test.go
Charles-Edouard Brétéché 7313c7c11b
chore: add CEL unit tests (#12230)
Signed-off-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
2025-02-24 12:12:51 +00:00

95 lines
1.9 KiB
Go

package utils
import (
"testing"
"github.com/google/cel-go/common/types"
"github.com/google/cel-go/common/types/ref"
"github.com/stretchr/testify/assert"
corev1 "k8s.io/api/core/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
)
func TestConvertToNative(t *testing.T) {
tests := []struct {
name string
value ref.Val
want any
wantErr bool
}{{
name: "bool ok",
value: types.False,
want: false,
}, {
name: "string ko",
value: types.String("false"),
wantErr: true,
}}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
got, err := ConvertToNative[bool](tt.value)
if tt.wantErr {
assert.Error(t, err)
} else {
assert.NoError(t, err)
assert.Equal(t, tt.want, got)
}
})
}
}
func TestConvertObjectToUnstructured(t *testing.T) {
tests := []struct {
name string
obj any
want *unstructured.Unstructured
wantErr bool
}{{
name: "nil",
obj: nil,
want: &unstructured.Unstructured{},
}, {
name: "error",
obj: map[string]string{
"foo": "bar",
},
wantErr: true,
}, {
name: "ok",
obj: &corev1.Namespace{
TypeMeta: metav1.TypeMeta{
APIVersion: corev1.SchemeGroupVersion.String(),
Kind: "Namespace",
},
ObjectMeta: metav1.ObjectMeta{
Name: "foo",
},
},
want: &unstructured.Unstructured{
Object: map[string]any{
"apiVersion": "v1",
"kind": "Namespace",
"metadata": map[string]any{
"name": "foo",
"creationTimestamp": nil,
},
"spec": map[string]any{},
"status": map[string]any{},
},
},
},
// TODO: Add test cases.
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
got, err := ConvertObjectToUnstructured(tt.obj)
if tt.wantErr {
assert.Error(t, err)
} else {
assert.NoError(t, err)
assert.Equal(t, tt.want, got)
}
})
}
}