//go:build mysql package mysql import ( "strings" "testing" ) func TestEnsureIMHTTPInfrastructureTablesUsesSelectedTenantDatabase(t *testing.T) { exec := &recordingGroupSchemaExecutor{} if err := ensureIMHTTPInfrastructureTables(exec); err != nil { t.Fatal(err) } if len(exec.statements) != 9 { t.Fatalf("executed %d infrastructure schema statements, want 9", len(exec.statements)) } joined := strings.ToLower(strings.Join(exec.statements, "\n")) for _, table := range []string{ "im_http_idempotency", "im_kafka_consume_log", "im_kafka_dead_letters", "im_realname_appeals", "im_conversation_settings", "im_topic_drafts", } { if !strings.Contains(joined, table) { t.Fatalf("missing table %s", table) } } if strings.Contains(joined, "tinode.") || strings.Contains(joined, "create database") { t.Fatalf("infrastructure schema must stay inside the selected tenant database: %s", joined) } if !strings.Contains(joined, "tenant_id") || !strings.Contains(joined, "uk_im_http_idempotency_scope(tenant_id, user_id") { t.Fatalf("HTTP idempotency schema must be tenant scoped in shared DB mode: %s", joined) } if strings.Contains(joined, "im_kafka_outbox") { t.Fatalf("kafka outbox table must not be created: %s", joined) } if strings.Contains(joined, "im_business_events_outbox") { t.Fatalf("business event outbox table must not be created: %s", joined) } }