package edge

import (
	"testing"

	"github.com/stretchr/testify/assert"
	"github.com/stretchr/testify/require"
)

func TestGetPortainerURLFromEdgeKey(t *testing.T) {
	t.Parallel()
	tests := []struct {
		name     string
		edgeKey  string
		expected string
	}{
		{
			name:     "ValidEdgeKey",
			edgeKey:  "aHR0cHM6Ly9wb3J0YWluZXIuaW98cG9ydGFpbmVyLmlvOjgwMDB8YXNkZnwx",
			expected: "https://portainer.io",
		},
	}

	for _, tt := range tests {
		t.Run(tt.name, func(t *testing.T) {
			result, err := GetPortainerURLFromEdgeKey(tt.edgeKey)
			require.NoError(t, err)
			assert.Equal(t, tt.expected, result)
		})
	}
}

func TestIsValidEdgeStackName(t *testing.T) {
	t.Parallel()
	f := func(name string, expected bool) {
		if IsValidEdgeStackName(name) != expected {
			t.Fatalf("expected %v, found %v", expected, IsValidEdgeStackName(name))
		}
	}

	f("edge-stack", true)
	f("edge_stack", true)
	f("edgestack", true)
	f("edgestack11", true)
	f("111", true)
	f("111edgestack", true)
	f("edge#stack", false)
	f("edge stack", false)
	f("Edge_stack", false)
	f("EdgeStack", false)
	f("-edgestack", false)
	f("_edgestack", false)
	f("#edgestack", false)
	f("/edgestack", false)
	f("#edgestack", false)
	f("édgestack", false)
	f("", false)
	f(" ", false)
	f("-", false)
	f("_", false)
	f("E", false)
	f("eedgestackedgestackedgestackedgestackedgestackedgestackedgestackedgestackedgestackedgestackedgestackedgestackedgestackedgestackedgestackedgestackedgestackedgestackedgestackedgestackedgestackdgeedgestackedgestackedgestackedgestackedgestackedgestackedgestackedgestackedgestackedgestackedgestackstack", false)
}
