forked from syntaxbullet/aurorabot
Scripts: - remote.sh: remove unused open_browser() function - deploy-remote.sh: add DB backup before deploy, --skip-backup flag, step numbering - db-backup.sh: fix macOS compat (xargs -r is GNU-only), use portable approach - db-restore.sh: add safety backup before restore, SQL file validation, file size display - logs.sh: default to no-follow with --tail=100, order-independent arg parsing - docker-cleanup.sh: add Docker health check, colored output - test-sequential.sh: exclude *.integration.test.ts by default, add --integration flag - simulate-ci.sh: pass --integration flag (has real DB) Tests: - db.test.ts: fix mock path from ./DrizzleClient to @shared/db/DrizzleClient - server.settings.test.ts: rewrite mocks for gameSettingsService (old config/saveConfig removed) - server.test.ts: add missing config.lootdrop and BotClient mocks, complete DrizzleClient chain - indexes.test.ts: rename to indexes.integration.test.ts (requires live DB) Config: - package.json: test script uses sequential runner, add test:ci and db:restore aliases - deploy.yml: use --integration flag in CI (has Postgres service)
45 lines
1.8 KiB
TypeScript
45 lines
1.8 KiB
TypeScript
import { expect, test, describe } from "bun:test";
|
|
import { DrizzleClient } from "./DrizzleClient";
|
|
import { sql } from "drizzle-orm";
|
|
|
|
describe("Database Indexes", () => {
|
|
test("should have indexes on users table", async () => {
|
|
const result = await DrizzleClient.execute(sql`
|
|
SELECT indexname FROM pg_indexes
|
|
WHERE tablename = 'users'
|
|
`);
|
|
const indexNames = result.map(r => r.indexname);
|
|
expect(indexNames).toContain("users_balance_idx");
|
|
expect(indexNames).toContain("users_level_xp_idx");
|
|
});
|
|
|
|
test("should have index on transactions table", async () => {
|
|
const result = await DrizzleClient.execute(sql`
|
|
SELECT indexname FROM pg_indexes
|
|
WHERE tablename = 'transactions'
|
|
`);
|
|
const indexNames = result.map(r => r.indexname);
|
|
expect(indexNames).toContain("transactions_created_at_idx");
|
|
});
|
|
|
|
test("should have indexes on moderation_cases table", async () => {
|
|
const result = await DrizzleClient.execute(sql`
|
|
SELECT indexname FROM pg_indexes
|
|
WHERE tablename = 'moderation_cases'
|
|
`);
|
|
const indexNames = result.map(r => r.indexname);
|
|
expect(indexNames).toContain("moderation_cases_user_id_idx");
|
|
expect(indexNames).toContain("moderation_cases_case_id_idx");
|
|
});
|
|
|
|
test("should have indexes on user_timers table", async () => {
|
|
const result = await DrizzleClient.execute(sql`
|
|
SELECT indexname FROM pg_indexes
|
|
WHERE tablename = 'user_timers'
|
|
`);
|
|
const indexNames = result.map(r => r.indexname);
|
|
expect(indexNames).toContain("user_timers_expires_at_idx");
|
|
expect(indexNames).toContain("user_timers_lookup_idx");
|
|
});
|
|
});
|