package layoutrouting

import (
	"context"
	"testing"

	"github.com/DATA-DOG/go-sqlmock"
)

func TestLoadLiveWildcardTarget_UsesCaseInsensitiveObjectMatching(t *testing.T) {
	db, mock, err := sqlmock.New(sqlmock.QueryMatcherOption(sqlmock.QueryMatcherRegexp))
	if err != nil {
		t.Fatalf("sqlmock.New: %v", err)
	}
	defer db.Close()

	mock.ExpectQuery(`SELECT la\.` + "`Id`" + `, la\.` + "`LayoutId`" + `.*LOWER\(pl\.` + "`ObjectApiName`" + `\) = LOWER\(la\.` + "`ObjectApiName`" + `\).*WHERE LOWER\(la\.` + "`ObjectApiName`" + `\) = LOWER\(\?\)`).
		WithArgs("Opportunity").
		WillReturnRows(sqlmock.NewRows([]string{"Id", "LayoutId", "Source", "IsCustomized", "TargetPresent", "RouteSource"}).
			AddRow("la_legacy_default", "legacy_layout_default", "auto_generated", false, true, "admin_authored"))

	target, err := LoadLiveWildcardTarget(context.Background(), db, "Opportunity")
	if err != nil {
		t.Fatalf("LoadLiveWildcardTarget() error = %v", err)
	}
	if target == nil || target.LayoutID != "legacy_layout_default" {
		t.Fatalf("unexpected wildcard target: %#v", target)
	}
	if target.AssignmentID != "la_legacy_default" {
		t.Fatalf("assignment id = %q, want la_legacy_default", target.AssignmentID)
	}
	if target.RouteSource == nil || *target.RouteSource != "admin_authored" {
		t.Fatalf("route source = %#v, want admin_authored", target.RouteSource)
	}
	if err := mock.ExpectationsWereMet(); err != nil {
		t.Fatalf("expectations: %v", err)
	}
}
