package metrics

import (
	"reflect"
	"testing"

	"github.com/prometheus/client_golang/prometheus"
	"github.com/stretchr/testify/require"
)

func TestArgsToLabels(t *testing.T) {
	testcases := []struct {
		name  string
		input []string
		want  prometheus.Labels
	}{
		{
			name:  "input is empty",
			input: []string{},
			want:  prometheus.Labels{},
		},
		{
			name:  "input is nil",
			input: nil,
			want:  prometheus.Labels{},
		},
		{
			name:  "valid",
			input: []string{"key", "value"},
			want:  prometheus.Labels{"key": "value"},
		},
		{
			name:  "multi valid",
			input: []string{"key", "value", "key1", "value1"},
			want:  prometheus.Labels{"key": "value", "key1": "value1"},
		},
		{
			name:  "bad key",
			input: []string{"value"},
			want:  prometheus.Labels{},
		},
		{
			name:  "multi bad key",
			input: []string{"key", "value", "value1"},
			want:  prometheus.Labels{"key": "value"},
		},
	}

	for _, tc := range testcases {
		t.Run(tc.name, func(t *testing.T) {
			got := GetLabelsFromKV(tc.input)
			require.True(t, reflect.DeepEqual(tc.want, got))
		})
	}
}