package provider

import (
	"testing"

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

func TestNormalizedGitHubConnectionInstallationIDs(t *testing.T) {
	t.Parallel()

	actual, err := canonicalGitHubConnectionInstallationIDs([]string{"10"})
	require.NoError(t, err)
	require.Equal(t, []string{"10"}, actual)

	for name, values := range map[string][]string{
		"empty":        nil,
		"duplicate":    {"1", "1"},
		"leading_zero": {"01"},
		"zero":         {"0"},
		"negative":     {"-1"},
		"whitespace":   {" 1"},
		"overflow":     {"9223372036854775808"},
	} {
		t.Run(name, func(t *testing.T) {
			t.Parallel()
			_, err := canonicalGitHubConnectionInstallationIDs(values)
			require.ErrorIs(t, err, ErrBadRequest)
		})
	}

	_, err = canonicalGitHubConnectionInstallationIDs([]string{"1", "2"})
	require.ErrorIs(t, err, ErrBadRequest)
}

func TestVerifiedGitHubConnectionTargetsRequiresServerIdentity(t *testing.T) {
	t.Parallel()

	actual, err := canonicalVerifiedGitHubConnectionTargets([]GitHubVerifiedConnectionTarget{{
		InstallationID: "10", DisplayLabel: "beta", AccountID: 20,
	}})
	require.NoError(t, err)
	require.Equal(t, []GitHubVerifiedConnectionTarget{
		{InstallationID: "10", DisplayLabel: "beta", AccountID: 20},
	}, actual)

	_, err = canonicalVerifiedGitHubConnectionTargets([]GitHubVerifiedConnectionTarget{{
		InstallationID: "1", DisplayLabel: "acme", AccountID: 0,
	}})
	require.ErrorIs(t, err, ErrConflict)
	_, err = canonicalVerifiedGitHubConnectionTargets([]GitHubVerifiedConnectionTarget{{
		InstallationID: "1", DisplayLabel: "", AccountID: 1,
	}})
	require.ErrorIs(t, err, ErrConflict)
}
