package bootstrapimpl

import "testing"

func TestRollupDeltaTableExistsWithBlockedCrudAndLaneIndexes(t *testing.T) {
	const tableName = "_System_RollupDelta"
	defs := GetManagedTableDefinitions()
	for _, def := range defs {
		if def.TableName != tableName {
			continue
		}
		if def.RequiredReadPermission != "BLOCKED" || def.RequiredWritePermission != "BLOCKED" {
			t.Fatalf("%s CRUD gates = read:%q write:%q, want BLOCKED/BLOCKED", tableName, def.RequiredReadPermission, def.RequiredWritePermission)
		}
		cols := map[string]bool{}
		for _, col := range def.Columns {
			cols[col.Name] = true
		}
		for _, col := range []string{"Id", "SourceObject", "SourceRecordId", "ParentObject", "ParentRecordId", "RollupField", "Delta", "DedupeKey", "Status", "RetryCount", "NextAttemptAt", "ProcessedAt"} {
			if !cols[col] {
				t.Fatalf("%s missing column %s", tableName, col)
			}
		}
		var foundDedupe, foundLane bool
		for _, idx := range def.Indices {
			if idx.Name == "uniq_rollup_delta_dedupe" && idx.Unique && len(idx.Columns) == 1 && idx.Columns[0] == "DedupeKey" {
				foundDedupe = true
			}
			if idx.Name == "idx_rollup_delta_parent_lane" {
				foundLane = true
			}
		}
		if !foundDedupe || !foundLane {
			t.Fatalf("%s indices found dedupe=%v lane=%v, want both", tableName, foundDedupe, foundLane)
		}
		return
	}
	t.Fatalf("%s not found in system_tables.json", tableName)
}
