Files
Randify.pro/tests/open5e-types.test.ts
T
emil 25f43ec4e2 feat(dm-dashboard): Wave 1 — auth fixes, DB schema, Open5e interfaces, AI clients
- Fix auth anti-patterns (JWT, OAuth, logout, middleware, url.origin)
- Extend DB schema with tier, npcs, counters, translations, notes, initiative
- Expand Open5e TypeScript interfaces (Monster, Spell) to full V2
- Build OpenRouter API client for FREE tier
- Build Kimi API client for PRO tier
- Add comprehensive tests for all modules
2026-05-15 21:28:42 +03:00

64 lines
1.3 KiB
TypeScript

import { describe, it, expect } from "vitest";
import type { Monster, Spell } from "../src/lib/open5e/client";
// Type-level assertions: verify interfaces contain all required fields.
// If a listed key is missing from the interface, TypeScript will error at compile time.
type AssertKeys<T, K extends keyof T> = K;
type _MonsterHasAllFields = AssertKeys<
Monster,
| "name"
| "key"
| "challenge_rating_decimal"
| "type"
| "hit_points"
| "armor_class"
| "speed"
| "actions"
| "special_abilities"
| "legendary_actions"
| "senses"
| "languages"
| "strength"
| "dexterity"
| "constitution"
| "intelligence"
| "wisdom"
| "charisma"
| "size"
| "subtype"
| "alignment"
| "damage_immunities"
| "damage_resistances"
| "damage_vulnerabilities"
| "condition_immunities"
>;
type _SpellHasAllFields = AssertKeys<
Spell,
| "name"
| "key"
| "level"
| "school"
| "casting_time"
| "range"
| "components"
| "duration"
| "desc"
| "higher_level"
| "ritual"
| "concentration"
| "classes"
>;
// Runtime dummy test so Vitest recognizes this file.
describe("Open5e type assertions", () => {
it("Monster interface contains all required keys at compile time", () => {
expect(true).toBe(true);
});
it("Spell interface contains all required keys at compile time", () => {
expect(true).toBe(true);
});
});