package aggregate

import (
	"reflect"
	"testing"

	"github.com/stretchr/testify/require"

	"github.com/pingcap-inc/clinic/pkg/ngm/statements/api"
)

func TestAggRegister(t *testing.T) {
	derivedFields := map[string]struct{}{
		// binary_plan_text is derived from binary_plan in service layer.
		"binary_plan_text": {},
	}

	// reflect get fields
	var fields []string
	typ := reflect.TypeOf(api.Model{})
	for i := 0; i < typ.NumField(); i++ {
		fields = append(fields, typ.Field(i).Tag.Get("json"))
	}

	for _, field := range fields {
		if _, ok := derivedFields[field]; ok {
			continue
		}
		require.Contains(t, StatementAggregatorFactories, field)
	}
}
