package controlplane

import (
	"testing"

	"github.com/pingcap/tidb/pkg/parser"
	_ "github.com/pingcap/tidb/pkg/parser/test_driver"
)

func TestVerifyActionTableConsistencySQLParsesWithTiDBParser(t *testing.T) {
	p := parser.New()
	p.EnableWindowFunc(true)

	if _, _, err := p.Parse(orphanStandardActionSatelliteQuery, "", ""); err != nil {
		t.Fatalf("orphan standard-action satellite query does not parse with TiDB parser: %v", err)
	}
}

func TestVerifyProfilePermissionCoverageSQLParsesWithTiDBParser(t *testing.T) {
	p := parser.New()
	p.EnableWindowFunc(true)
	filterOpts := businessObjectFilterOptions{ExcludeDerivedSelfPermissions: true}
	queries := map[string]string{
		"expected business objects": "SELECT COUNT(*) FROM `_System_Object` o WHERE " + businessObjectFilter(filterOpts, permKindObject),
		"expected business fields":  "SELECT COUNT(*) FROM `_System_Field` f JOIN `_System_Object` o ON f.`ObjectId` = o.`Id` WHERE f.`IsDeleted` = 0 AND " + businessObjectFilter(filterOpts, permKindField),
		"profile coverage counts":   profilePermissionCoverageCountsQuery(filterOpts),
	}

	for name, query := range queries {
		t.Run(name, func(t *testing.T) {
			if _, _, err := p.Parse(query, "", ""); err != nil {
				t.Fatalf("%s query does not parse with TiDB parser: %v\nSQL:\n%s", name, err, query)
			}
		})
	}
}
