package utils

import (
	"net/url"
	"testing"

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

func TestRedactSourceURI(t *testing.T) {
	t.Run("azure sas-token", func(t *testing.T) {
		in := "azure://acc/container/path/file.csv?sas-token=sv%3D2020-08-04%26sig%3Dabc&foo=bar"
		out := RedactSourceURI(in)

		u, err := url.Parse(out)
		require.NoError(t, err)
		q := u.Query()
		require.Equal(t, "redacted", q.Get("sas-token"))
		require.Equal(t, "bar", q.Get("foo"))
	})

	t.Run("s3 secret-access-key", func(t *testing.T) {
		in := "s3://bucket/prefix?access-key=AKIA&secret-access-key=SECRET&region=us-west-2"
		out := RedactSourceURI(in)

		u, err := url.Parse(out)
		require.NoError(t, err)
		q := u.Query()
		require.Equal(t, "AKIA", q.Get("access-key"))
		require.Equal(t, "redacted", q.Get("secret-access-key"))
		require.Equal(t, "us-west-2", q.Get("region"))
	})

	t.Run("case-insensitive keys", func(t *testing.T) {
		in := "https://example.com/a?SAS-TOKEN=AAA&SeCrEt-AccEsS-KeY=BBB&x=y"
		out := RedactSourceURI(in)

		u, err := url.Parse(out)
		require.NoError(t, err)
		q := u.Query()
		require.Equal(t, "redacted", q.Get("SAS-TOKEN"))
		require.Equal(t, "redacted", q.Get("SeCrEt-AccEsS-KeY"))
		require.Equal(t, "y", q.Get("x"))
	})
}
