package connector_outboundintent

import (
	"strings"
	"testing"
)

func TestRepositoryKeepsTypedResultColumnsOptionalForLegacyReadiness(t *testing.T) {
	for _, column := range []string{"ResultFormatVersion", "ResultDigest", "CanonicalResult"} {
		if _, required := commandRequiredColumns[column]; required {
			t.Fatalf("legacy readiness requires optional column %s", column)
		}
		if strings.Contains(commandSelect, column) {
			t.Fatalf("released Command projection references optional column %s", column)
		}
	}

	complete := map[string]string{
		"ResultFormatVersion": "bigint",
		"ResultDigest":        "char",
		"CanonicalResult":     "mediumblob",
	}
	if available, err := classifyOptionalColumns("commands", map[string]string{}, typedResultColumns); err != nil || available {
		t.Fatalf("legacy optional schema = %t, %v", available, err)
	}
	if available, err := classifyOptionalColumns("commands", complete, typedResultColumns); err != nil || !available {
		t.Fatalf("complete optional schema = %t, %v", available, err)
	}
	for name, found := range map[string]map[string]string{
		"partial": {"ResultFormatVersion": "bigint"},
		"drifted": {
			"ResultFormatVersion": "varchar",
			"ResultDigest":        "char",
			"CanonicalResult":     "mediumblob",
		},
	} {
		if available, err := classifyOptionalColumns("commands", found, typedResultColumns); err == nil || available {
			t.Fatalf("%s optional schema = %t, %v", name, available, err)
		}
	}
}
