Jelajahi Sumber

Unit tests for simple functions

Signed-off-by: Sean Holcomb <seanholcomb@gmail.com>
Sean Holcomb 1 bulan lalu
induk
melakukan
74accef170

+ 41 - 0
core/pkg/model/kubemodel/owner_test.go

@@ -0,0 +1,41 @@
+package kubemodel
+
+import (
+	"testing"
+)
+
+func TestParseOwnerKind(t *testing.T) {
+	tests := []struct {
+		input    string
+		expected OwnerKind
+	}{
+		// Exact canonical values
+		{"deployment", OwnerKindDeployment},
+		{"statefulset", OwnerKindStatefulSet},
+		{"daemonset", OwnerKindDaemonSet},
+		{"job", OwnerKindJob},
+		{"cronjob", OwnerKindCronJob},
+		{"replicaset", OwnerKindReplicaSet},
+		// Case-insensitive
+		{"Deployment", OwnerKindDeployment},
+		{"StatefulSet", OwnerKindStatefulSet},
+		{"DaemonSet", OwnerKindDaemonSet},
+		{"Job", OwnerKindJob},
+		{"CronJob", OwnerKindCronJob},
+		{"ReplicaSet", OwnerKindReplicaSet},
+		{"DEPLOYMENT", OwnerKindDeployment},
+		// Unknown input: lowercased passthrough (no mapping)
+		{"Rollout", OwnerKind("rollout")},
+		{"CustomController", OwnerKind("customcontroller")},
+		{"", OwnerKind("")},
+	}
+
+	for _, tt := range tests {
+		t.Run(tt.input, func(t *testing.T) {
+			got := ParseOwnerKind(tt.input)
+			if got != tt.expected {
+				t.Errorf("ParseOwnerKind(%q) = %q, want %q", tt.input, got, tt.expected)
+			}
+		})
+	}
+}

+ 41 - 0
core/pkg/model/kubemodel/service_test.go

@@ -0,0 +1,41 @@
+package kubemodel
+
+import (
+	"testing"
+)
+
+func TestParseServiceType(t *testing.T) {
+	tests := []struct {
+		input    string
+		expected ServiceType
+	}{
+		// Exact canonical values
+		{"ClusterIP", ServiceTypeClusterIP},
+		{"NodePort", ServiceTypeNodePort},
+		{"LoadBalancer", ServiceTypeLoadBalancer},
+		{"ExternalName", ServiceTypeExternalName},
+		// Case-insensitive
+		{"clusterip", ServiceTypeClusterIP},
+		{"nodeport", ServiceTypeNodePort},
+		{"loadbalancer", ServiceTypeLoadBalancer},
+		{"externalname", ServiceTypeExternalName},
+		{"CLUSTERIP", ServiceTypeClusterIP},
+		{"LOADBALANCER", ServiceTypeLoadBalancer},
+		// "lb" alias
+		{"lb", ServiceTypeLoadBalancer},
+		{"LB", ServiceTypeLoadBalancer},
+		// Unknown input defaults to ClusterIP
+		{"", ServiceTypeClusterIP},
+		{"unknown", ServiceTypeClusterIP},
+		{"ingress", ServiceTypeClusterIP},
+	}
+
+	for _, tt := range tests {
+		t.Run(tt.input, func(t *testing.T) {
+			got := ParseServiceType(tt.input)
+			if got != tt.expected {
+				t.Errorf("ParseServiceType(%q) = %q, want %q", tt.input, got, tt.expected)
+			}
+		})
+	}
+}

+ 55 - 0
core/pkg/model/shared/provider_test.go

@@ -0,0 +1,55 @@
+package shared
+
+import (
+	"testing"
+)
+
+func TestParseProvider(t *testing.T) {
+	tests := []struct {
+		input    string
+		expected Provider
+	}{
+		// Canonical values
+		{"AWS", ProviderAWS},
+		{"GCP", ProviderGCP},
+		{"Azure", ProviderAzure},
+		{"Alibaba", ProviderAlibaba},
+		{"DigitalOcean", ProviderDigitalOcean},
+		{"Oracle", ProviderOracle},
+		// Case-insensitive
+		{"aws", ProviderAWS},
+		{"gcp", ProviderGCP},
+		{"azure", ProviderAzure},
+		{"alibaba", ProviderAlibaba},
+		{"digitalocean", ProviderDigitalOcean},
+		{"oracle", ProviderOracle},
+		{"AWS", ProviderAWS},
+		{"AZURE", ProviderAzure},
+		// Aliases
+		{"amazon", ProviderAWS},
+		{"Amazon", ProviderAWS},
+		{"gce", ProviderGCP},
+		{"GCE", ProviderGCP},
+		{"google", ProviderGCP},
+		{"Google", ProviderGCP},
+		{"microsoft", ProviderAzure},
+		{"Microsoft", ProviderAzure},
+		{"do", ProviderDigitalOcean},
+		{"DO", ProviderDigitalOcean},
+		{"oci", ProviderOracle},
+		{"OCI", ProviderOracle},
+		// Unknown input returns empty
+		{"", ProviderEmpty},
+		{"unknown", ProviderEmpty},
+		{"scaleway", ProviderEmpty},
+	}
+
+	for _, tt := range tests {
+		t.Run(tt.input, func(t *testing.T) {
+			got := ParseProvider(tt.input)
+			if got != tt.expected {
+				t.Errorf("ParseProvider(%q) = %q, want %q", tt.input, got, tt.expected)
+			}
+		})
+	}
+}