package service

import (
	"testing"

	"github.com/pingcap/tidb/pkg/parser/mysql"
	"github.com/stretchr/testify/assert"
	"github.com/tidbcloud/pkgv2/bizerr"
	"github.com/tidbcloud/serverless-service/internal/domain/facade"
)

func TestParseSQLErrorUsesSafeActionableMessages(t *testing.T) {
	tests := []struct {
		name    string
		raw     string
		message string
	}{
		{
			name:    "invalid table format",
			raw:     "invalid table format: private_db.private_table",
			message: "invalid filters: the table format is invalid",
		},
		{
			name:    "invalid event class",
			raw:     "invalid event class name: secret_event",
			message: "invalid filters: the event class name is invalid",
		},
		{
			name:    "illegal user format",
			raw:     "illegal user format: private_user@10.0.0.1",
			message: "invalid users: the user format is invalid",
		},
	}

	for _, tt := range tests {
		t.Run(tt.name, func(t *testing.T) {
			err := facade.NewClusterProxyErr(mysql.ErrUnknown, tt.raw)

			got := parseSQLError(err)

			assert.Equal(t, bizerr.ErrCodeParams, got.RawErrCode())
			assert.Equal(t, tt.message, got.ErrMsg())
			assert.NotContains(t, got.ErrMsg(), "private")
			assert.NotContains(t, got.ErrMsg(), "secret")
			assert.NotContains(t, got.ErrMsg(), "10.0.0.1")
		})
	}
}
