diff --git a/playwright-report/index.html b/playwright-report/index.html new file mode 100644 index 0000000..98a06a2 --- /dev/null +++ b/playwright-report/index.html @@ -0,0 +1,85 @@ + + + + + + + + + Playwright Test Report + + + + +
+ + + \ No newline at end of file diff --git a/src/app/(frontend)/eod/actions.ts b/src/app/(frontend)/minigames/eod/actions.ts similarity index 100% rename from src/app/(frontend)/eod/actions.ts rename to src/app/(frontend)/minigames/eod/actions.ts diff --git a/src/app/(frontend)/eod/custom/[id]/page.tsx b/src/app/(frontend)/minigames/eod/custom/[id]/page.tsx similarity index 94% rename from src/app/(frontend)/eod/custom/[id]/page.tsx rename to src/app/(frontend)/minigames/eod/custom/[id]/page.tsx index b1dfba6..9e0a7da 100644 --- a/src/app/(frontend)/eod/custom/[id]/page.tsx +++ b/src/app/(frontend)/minigames/eod/custom/[id]/page.tsx @@ -5,7 +5,7 @@ import { headers as nextHeaders } from "next/headers"; import { notFound } from "next/navigation"; import Link from "next/link"; import { ArrowLeft, Bomb } from "lucide-react"; -import { CustomMinefieldArena } from "@/components/frontend/eod/CustomMinefieldArena"; +import { CustomMinefieldArena } from "@/components/frontend/minigames/eod/CustomMinefieldArena"; export const metadata: Metadata = { title: "Play Custom Minefield (Polaris Task Force)", @@ -51,7 +51,7 @@ export default async function CustomMinefieldPlayPage({
All custom minefields diff --git a/src/app/(frontend)/eod/custom/actions.ts b/src/app/(frontend)/minigames/eod/custom/actions.ts similarity index 99% rename from src/app/(frontend)/eod/custom/actions.ts rename to src/app/(frontend)/minigames/eod/custom/actions.ts index ed206ba..a3c70b8 100644 --- a/src/app/(frontend)/eod/custom/actions.ts +++ b/src/app/(frontend)/minigames/eod/custom/actions.ts @@ -6,7 +6,7 @@ import { emitGameEvent } from "@/utils/event-log/emit"; import { EventTypes } from "@/utils/event-log/eventTypes"; import { hasPermission } from "@/utils/access-control/hasPermission"; import { broadcastToUser } from "@/lib/realtime/bus"; -import { creditEodXp } from "@/lib/custom-minigames/payouts"; +import { creditEodXp } from "@/lib/minigames/custom/payouts"; import { applyCreatorBank, customPlayerXp, @@ -16,7 +16,7 @@ import { validateMinefieldName, validateMinefieldScore, validateMinePositions, -} from "@/lib/custom-minigames/eod"; +} from "@/lib/minigames/custom/eod"; interface ActionResult { success: boolean; diff --git a/src/app/(frontend)/eod/custom/page.tsx b/src/app/(frontend)/minigames/eod/custom/page.tsx similarity index 91% rename from src/app/(frontend)/eod/custom/page.tsx rename to src/app/(frontend)/minigames/eod/custom/page.tsx index b56527a..7c9dac9 100644 --- a/src/app/(frontend)/eod/custom/page.tsx +++ b/src/app/(frontend)/minigames/eod/custom/page.tsx @@ -3,8 +3,8 @@ import config from "@payload-config"; import { getPayload } from "payload"; import { headers as nextHeaders } from "next/headers"; import { Bomb } from "lucide-react"; -import { CustomMinefieldBrowser } from "@/components/frontend/eod/CustomMinefieldBrowser"; -import { isEodUnlocked } from "@/lib/custom-minigames/eod"; +import { CustomMinefieldBrowser } from "@/components/frontend/minigames/eod/CustomMinefieldBrowser"; +import { isEodUnlocked } from "@/lib/minigames/custom/eod"; export const metadata: Metadata = { title: "Custom Minefields (Polaris Task Force)", diff --git a/src/app/(frontend)/eod/page.tsx b/src/app/(frontend)/minigames/eod/page.tsx similarity index 93% rename from src/app/(frontend)/eod/page.tsx rename to src/app/(frontend)/minigames/eod/page.tsx index ff06f6d..9d7221e 100644 --- a/src/app/(frontend)/eod/page.tsx +++ b/src/app/(frontend)/minigames/eod/page.tsx @@ -4,7 +4,7 @@ import { getPayload } from "payload"; import { headers as nextHeaders } from "next/headers"; import { redirect } from "next/navigation"; import { Bomb } from "lucide-react"; -import { EodArena } from "@/components/frontend/eod/EodArena"; +import { EodArena } from "@/components/frontend/minigames/eod/EodArena"; export const metadata: Metadata = { title: "Minefield Clearance (Polaris Task Force)", @@ -18,7 +18,7 @@ export default async function EodPage() { const { user } = await payload.auth({ headers, canSetHeaders: false }); if (!user) { - redirect(`/login?returnTo=${encodeURIComponent("/eod")}`); + redirect(`/login?returnTo=${encodeURIComponent("/minigames/eod")}`); } const profileRes = await payload.find({ diff --git a/src/app/(frontend)/flappy/actions.ts b/src/app/(frontend)/minigames/flappy/actions.ts similarity index 100% rename from src/app/(frontend)/flappy/actions.ts rename to src/app/(frontend)/minigames/flappy/actions.ts diff --git a/src/app/(frontend)/flappy/page.tsx b/src/app/(frontend)/minigames/flappy/page.tsx similarity index 95% rename from src/app/(frontend)/flappy/page.tsx rename to src/app/(frontend)/minigames/flappy/page.tsx index cbe0ae7..5671ec0 100644 --- a/src/app/(frontend)/flappy/page.tsx +++ b/src/app/(frontend)/minigames/flappy/page.tsx @@ -4,7 +4,7 @@ import { getPayload } from "payload"; import { headers as nextHeaders } from "next/headers"; import { redirect } from "next/navigation"; import { Bird } from "lucide-react"; -import { FlappyArena } from "@/components/frontend/flappy/FlappyArena"; +import { FlappyArena } from "@/components/frontend/minigames/flappy/FlappyArena"; export const metadata: Metadata = { title: "Flight Simulator: Polaris Task Force", diff --git a/src/app/(frontend)/opord/actions.ts b/src/app/(frontend)/minigames/opord/actions.ts similarity index 99% rename from src/app/(frontend)/opord/actions.ts rename to src/app/(frontend)/minigames/opord/actions.ts index 8b6a1d6..d00a51c 100644 --- a/src/app/(frontend)/opord/actions.ts +++ b/src/app/(frontend)/minigames/opord/actions.ts @@ -12,7 +12,7 @@ import { isOpordDifficulty, minOpordRunTimeMs, type OpordDifficulty, -} from "@/lib/opord-recall"; +} from "@/lib/minigames/opord-recall"; import { emitGameEvent } from "@/utils/event-log/emit"; import { EventTypes } from "@/utils/event-log/eventTypes"; import { broadcastToUser } from "@/lib/realtime/bus"; diff --git a/src/app/(frontend)/opord/page.tsx b/src/app/(frontend)/minigames/opord/page.tsx similarity index 92% rename from src/app/(frontend)/opord/page.tsx rename to src/app/(frontend)/minigames/opord/page.tsx index ec53ba1..8a7e39b 100644 --- a/src/app/(frontend)/opord/page.tsx +++ b/src/app/(frontend)/minigames/opord/page.tsx @@ -4,7 +4,7 @@ import { getPayload } from "payload"; import { headers as nextHeaders } from "next/headers"; import { redirect } from "next/navigation"; import { ScrollText } from "lucide-react"; -import { OpordArena } from "@/components/frontend/opord/OpordArena"; +import { OpordArena } from "@/components/frontend/minigames/opord/OpordArena"; export const metadata: Metadata = { title: "OPORD Recall (Polaris Task Force)", @@ -18,7 +18,7 @@ export default async function OpordPage() { const { user } = await payload.auth({ headers, canSetHeaders: false }); if (!user) { - redirect(`/login?returnTo=${encodeURIComponent("/opord")}`); + redirect(`/login?returnTo=${encodeURIComponent("/minigames/opord")}`); } const profileRes = await payload.find({ diff --git a/src/app/(frontend)/qualification/actions.ts b/src/app/(frontend)/minigames/qualification/actions.ts similarity index 99% rename from src/app/(frontend)/qualification/actions.ts rename to src/app/(frontend)/minigames/qualification/actions.ts index 297e6dd..3989271 100644 --- a/src/app/(frontend)/qualification/actions.ts +++ b/src/app/(frontend)/minigames/qualification/actions.ts @@ -14,7 +14,7 @@ import { MAX_HITS, MAX_DESPAWNED_TARGETS, MAX_CIVILIAN_HITS, -} from "@/lib/aim-trainer"; +} from "@/lib/minigames/aim-trainer"; interface ActionResult { success: boolean; diff --git a/src/app/(frontend)/qualification/page.tsx b/src/app/(frontend)/minigames/qualification/page.tsx similarity index 89% rename from src/app/(frontend)/qualification/page.tsx rename to src/app/(frontend)/minigames/qualification/page.tsx index bec4983..bc84732 100644 --- a/src/app/(frontend)/qualification/page.tsx +++ b/src/app/(frontend)/minigames/qualification/page.tsx @@ -5,8 +5,8 @@ import { headers as nextHeaders } from "next/headers"; import { redirect } from "next/navigation"; import { Crosshair } from "lucide-react"; -import type { AimTrainerStats } from "@/app/(frontend)/qualification/actions"; -import { AimTrainerArena } from "@/components/frontend/qualification/AimTrainerArena"; +import type { AimTrainerStats } from "@/app/(frontend)/minigames/qualification/actions"; +import { AimTrainerArena } from "@/components/frontend/minigames/qualification/AimTrainerArena"; export const metadata: Metadata = { title: "Qualification Course: Polaris Task Force", @@ -20,7 +20,7 @@ export default async function QualificationPage() { const { user } = await payload.auth({ headers, canSetHeaders: false }); if (!user) { - redirect(`/login?returnTo=${encodeURIComponent("/qualification")}`); + redirect(`/login?returnTo=${encodeURIComponent("/minigames/qualification")}`); } const profileRes = await payload.find({ diff --git a/src/app/(frontend)/radio/actions.ts b/src/app/(frontend)/minigames/radio/actions.ts similarity index 100% rename from src/app/(frontend)/radio/actions.ts rename to src/app/(frontend)/minigames/radio/actions.ts diff --git a/src/app/(frontend)/radio/custom/[id]/page.tsx b/src/app/(frontend)/minigames/radio/custom/[id]/page.tsx similarity index 94% rename from src/app/(frontend)/radio/custom/[id]/page.tsx rename to src/app/(frontend)/minigames/radio/custom/[id]/page.tsx index 2f75189..cfea131 100644 --- a/src/app/(frontend)/radio/custom/[id]/page.tsx +++ b/src/app/(frontend)/minigames/radio/custom/[id]/page.tsx @@ -5,7 +5,7 @@ import { headers as nextHeaders } from "next/headers"; import { notFound } from "next/navigation"; import Link from "next/link"; import { ArrowLeft, Radio } from "lucide-react"; -import { CustomRadioArena } from "@/components/frontend/radio/CustomRadioArena"; +import { CustomRadioArena } from "@/components/frontend/minigames/radio/CustomRadioArena"; export const metadata: Metadata = { title: "Play Custom Radio Test (Polaris Task Force)", @@ -45,7 +45,7 @@ export default async function CustomRadioTestPlayPage({
All custom radio tests diff --git a/src/app/(frontend)/radio/custom/actions.ts b/src/app/(frontend)/minigames/radio/custom/actions.ts similarity index 99% rename from src/app/(frontend)/radio/custom/actions.ts rename to src/app/(frontend)/minigames/radio/custom/actions.ts index 2451d20..4d496a8 100644 --- a/src/app/(frontend)/radio/custom/actions.ts +++ b/src/app/(frontend)/minigames/radio/custom/actions.ts @@ -11,7 +11,7 @@ import { validateMessages, validateRadioScore, validateTestName, -} from "@/lib/custom-minigames/radio"; +} from "@/lib/minigames/custom/radio"; interface ActionResult { success: boolean; diff --git a/src/app/(frontend)/radio/custom/page.tsx b/src/app/(frontend)/minigames/radio/custom/page.tsx similarity index 91% rename from src/app/(frontend)/radio/custom/page.tsx rename to src/app/(frontend)/minigames/radio/custom/page.tsx index c55dd8e..960ed45 100644 --- a/src/app/(frontend)/radio/custom/page.tsx +++ b/src/app/(frontend)/minigames/radio/custom/page.tsx @@ -3,8 +3,8 @@ import config from "@payload-config"; import { getPayload } from "payload"; import { headers as nextHeaders } from "next/headers"; import { Radio } from "lucide-react"; -import { CustomTestBrowser } from "@/components/frontend/radio/CustomTestBrowser"; -import { isRadioUnlocked } from "@/lib/custom-minigames/radio"; +import { CustomTestBrowser } from "@/components/frontend/minigames/radio/CustomTestBrowser"; +import { isRadioUnlocked } from "@/lib/minigames/custom/radio"; export const metadata: Metadata = { title: "Custom Radio Tests (Polaris Task Force)", diff --git a/src/app/(frontend)/radio/page.tsx b/src/app/(frontend)/minigames/radio/page.tsx similarity index 94% rename from src/app/(frontend)/radio/page.tsx rename to src/app/(frontend)/minigames/radio/page.tsx index a1020d5..a3304d3 100644 --- a/src/app/(frontend)/radio/page.tsx +++ b/src/app/(frontend)/minigames/radio/page.tsx @@ -4,7 +4,7 @@ import { getPayload } from "payload"; import { headers as nextHeaders } from "next/headers"; import { redirect } from "next/navigation"; import { Radio } from "lucide-react"; -import { RadioArena } from "@/components/frontend/radio/RadioArena"; +import { RadioArena } from "@/components/frontend/minigames/radio/RadioArena"; export const metadata: Metadata = { title: "Radio Traffic (Polaris Task Force)", @@ -18,7 +18,7 @@ export default async function RadioPage() { const { user } = await payload.auth({ headers, canSetHeaders: false }); if (!user) { - redirect(`/login?returnTo=${encodeURIComponent("/radio")}`); + redirect(`/login?returnTo=${encodeURIComponent("/minigames/radio")}`); } const profileRes = await payload.find({ diff --git a/src/components/command-palette/commands/navigation.ts b/src/components/command-palette/commands/navigation.ts index 7fc9bf4..b5792ea 100644 --- a/src/components/command-palette/commands/navigation.ts +++ b/src/components/command-palette/commands/navigation.ts @@ -224,35 +224,35 @@ export const navigationCommands: NavigationCommand[] = [ id: "nav:qualification-course", label: "Qualification Course", icon: Crosshair, - href: "/qualification", + href: "/minigames/qualification", keywords: ["aim trainer", "minigame", "shooting", "practice"], }, { id: "nav:radio-traffic", label: "Radio Traffic", icon: Radio, - href: "/radio", + href: "/minigames/radio", keywords: ["minigame", "comms", "messages", "training"], }, { id: "nav:flight-simulator", label: "Flight Simulator", icon: PlaneTakeoff, - href: "/flappy", + href: "/minigames/flappy", keywords: ["minigame", "flappy", "fly", "training"], }, { id: "nav:minefield-clearance", label: "Minefield Clearance", icon: Bomb, - href: "/eod", + href: "/minigames/eod", keywords: ["minigame", "eod", "mines", "training"], }, { id: "nav:opord-recall", label: "OPORD Recall", icon: ScrollText, - href: "/opord", + href: "/minigames/opord", keywords: ["minigame", "briefing", "memory", "operations order", "training"], }, { diff --git a/src/components/frontend/blocks/NavUser.tsx b/src/components/frontend/blocks/NavUser.tsx index f88465d..315b9b0 100644 --- a/src/components/frontend/blocks/NavUser.tsx +++ b/src/components/frontend/blocks/NavUser.tsx @@ -144,31 +144,31 @@ export function NavUser({ - + Flight Simulator - + Minefield Clearance - + Radio Traffic - + Qualification Course - + OPORD Recall diff --git a/src/components/frontend/minigames/UgcLinkButton.tsx b/src/components/frontend/minigames/UgcLinkButton.tsx new file mode 100644 index 0000000..19b164a --- /dev/null +++ b/src/components/frontend/minigames/UgcLinkButton.tsx @@ -0,0 +1,51 @@ +import Link from "next/link"; +import { ExternalLink, Wrench } from "lucide-react"; +import { Button } from "@/components/ui/button"; +import { cn } from "@/lib/utils"; + +/** + * Fully-featured nav button for a minigame's custom (UGC) area: an eyebrow + * status line, a title, and a pitch subtitle. Neutral outline styling, and the + * eyebrow flips between the unlocked celebration and the locked state. + */ +export function UgcLinkButton({ + href, + title, + subtitle, + unlocked, + className, +}: { + href: string; + title: string; + subtitle: string; + unlocked: boolean; + className?: string; +}) { + return ( + + ); +} diff --git a/src/components/frontend/eod/CreateMinefieldDialog.tsx b/src/components/frontend/minigames/eod/CreateMinefieldDialog.tsx similarity index 99% rename from src/components/frontend/eod/CreateMinefieldDialog.tsx rename to src/components/frontend/minigames/eod/CreateMinefieldDialog.tsx index e78edd7..9616d90 100644 --- a/src/components/frontend/eod/CreateMinefieldDialog.tsx +++ b/src/components/frontend/minigames/eod/CreateMinefieldDialog.tsx @@ -16,7 +16,7 @@ import { } from "@/components/ui/dialog"; import { Input } from "@/components/ui/input"; import { cn } from "@/lib/utils"; -import { createMinefield } from "@/app/(frontend)/eod/custom/actions"; +import { createMinefield } from "@/app/(frontend)/minigames/eod/custom/actions"; const MIN_SIZE = 9; const MAX_SIZE = 500; diff --git a/src/components/frontend/eod/CustomMinefieldArena.tsx b/src/components/frontend/minigames/eod/CustomMinefieldArena.tsx similarity index 100% rename from src/components/frontend/eod/CustomMinefieldArena.tsx rename to src/components/frontend/minigames/eod/CustomMinefieldArena.tsx diff --git a/src/components/frontend/eod/CustomMinefieldBrowser.tsx b/src/components/frontend/minigames/eod/CustomMinefieldBrowser.tsx similarity index 98% rename from src/components/frontend/eod/CustomMinefieldBrowser.tsx rename to src/components/frontend/minigames/eod/CustomMinefieldBrowser.tsx index 9d41245..b1008e7 100644 --- a/src/components/frontend/eod/CustomMinefieldBrowser.tsx +++ b/src/components/frontend/minigames/eod/CustomMinefieldBrowser.tsx @@ -127,7 +127,7 @@ export function CustomMinefieldBrowser({
diff --git a/src/components/frontend/eod/CustomMinefieldLeaderboard.tsx b/src/components/frontend/minigames/eod/CustomMinefieldLeaderboard.tsx similarity index 100% rename from src/components/frontend/eod/CustomMinefieldLeaderboard.tsx rename to src/components/frontend/minigames/eod/CustomMinefieldLeaderboard.tsx diff --git a/src/components/frontend/eod/CustomMinesweeperBoard.tsx b/src/components/frontend/minigames/eod/CustomMinesweeperBoard.tsx similarity index 99% rename from src/components/frontend/eod/CustomMinesweeperBoard.tsx rename to src/components/frontend/minigames/eod/CustomMinesweeperBoard.tsx index 305513a..60dd4fe 100644 --- a/src/components/frontend/eod/CustomMinesweeperBoard.tsx +++ b/src/components/frontend/minigames/eod/CustomMinesweeperBoard.tsx @@ -3,9 +3,9 @@ import { useCallback, useEffect, useRef, useState, type CSSProperties, type PointerEvent } from "react"; import { Bomb, CircleHelp, Flag, RotateCcw, ShieldCheck, Timer, X } from "lucide-react"; import { Button } from "@/components/ui/button"; -import { submitCustomMinefieldScore } from "@/app/(frontend)/eod/custom/actions"; +import { submitCustomMinefieldScore } from "@/app/(frontend)/minigames/eod/custom/actions"; import { useSessionExpired } from "@/hooks/useSessionExpired"; -import { edgeMineIndices } from "@/lib/custom-minigames/eod"; +import { edgeMineIndices } from "@/lib/minigames/custom/eod"; import { cn } from "@/lib/utils"; import { playClear, playExplosion, playFlag, playReveal } from "./sounds"; diff --git a/src/components/frontend/eod/EodArena.tsx b/src/components/frontend/minigames/eod/EodArena.tsx similarity index 78% rename from src/components/frontend/eod/EodArena.tsx rename to src/components/frontend/minigames/eod/EodArena.tsx index fc6d026..86ae1c4 100644 --- a/src/components/frontend/eod/EodArena.tsx +++ b/src/components/frontend/minigames/eod/EodArena.tsx @@ -1,13 +1,12 @@ "use client"; import { useCallback, useEffect, useState } from "react"; -import Link from "next/link"; -import { Bomb } from "lucide-react"; -import type { EodDifficulty, EodStats } from "@/app/(frontend)/eod/actions"; -import { isEodUnlocked } from "@/lib/custom-minigames/eod"; +import type { EodDifficulty, EodStats } from "@/app/(frontend)/minigames/eod/actions"; +import { isEodUnlocked } from "@/lib/minigames/custom/eod"; import { useRealtimePresence } from "@/hooks/useRealtimePresence"; import { useSidebar } from "@/components/ui/sidebar"; import { UnlockNotice } from "@/components/frontend/minigames/UnlockNotice"; +import { UgcLinkButton } from "@/components/frontend/minigames/UgcLinkButton"; import { EodLeaderboard } from "./EodLeaderboard"; import { MinesweeperBoard } from "./MinesweeperBoard"; @@ -44,13 +43,13 @@ export function EodArena({ return (
- - - Custom minefields - + {!customUnlocked && ( -
+
{DIFFICULTY_KEYS.map((key) => { const option = DIFFICULTIES[key]; return ( @@ -684,8 +684,26 @@ export function MinesweeperBoard({ ); })} + {customUnlocked && ( + + )}
- {customUnlocked ? ( + {customUnlocked && difficulty === "custom" ? (
@@ -792,11 +810,11 @@ export function MinesweeperBoard({ {CUSTOM_MAX_SIZE}×{CUSTOM_MAX_SIZE} field.

- ) : ( + ) : !customUnlocked ? (

Clear all three standard locations to unlock custom minefields.

- )} + ) : null}
diff --git a/src/components/frontend/radio/CustomTestLeaderboard.tsx b/src/components/frontend/minigames/radio/CustomTestLeaderboard.tsx similarity index 100% rename from src/components/frontend/radio/CustomTestLeaderboard.tsx rename to src/components/frontend/minigames/radio/CustomTestLeaderboard.tsx diff --git a/src/components/frontend/radio/RadioArena.tsx b/src/components/frontend/minigames/radio/RadioArena.tsx similarity index 86% rename from src/components/frontend/radio/RadioArena.tsx rename to src/components/frontend/minigames/radio/RadioArena.tsx index 22110da..54eb5dd 100644 --- a/src/components/frontend/radio/RadioArena.tsx +++ b/src/components/frontend/minigames/radio/RadioArena.tsx @@ -1,16 +1,15 @@ "use client"; import { useCallback, useEffect, useState } from "react"; -import Link from "next/link"; -import { Radio } from "lucide-react"; -import type { RadioStats } from "@/app/(frontend)/radio/actions"; +import type { RadioStats } from "@/app/(frontend)/minigames/radio/actions"; import { isRadioUnlocked, SPRINT_ACCURACY_REQUIREMENT, WATCH_ACCURACY_REQUIREMENT, -} from "@/lib/custom-minigames/radio"; +} from "@/lib/minigames/custom/radio"; import { useRealtimePresence } from "@/hooks/useRealtimePresence"; import { UnlockNotice } from "@/components/frontend/minigames/UnlockNotice"; +import { UgcLinkButton } from "@/components/frontend/minigames/UgcLinkButton"; import { RadioLeaderboard } from "./RadioLeaderboard"; import { RadioTraffic } from "./RadioTraffic"; @@ -49,13 +48,13 @@ export function RadioArena({ return (
- - - Custom radio tests - + {!customUnlocked && ( { } async function playOpordRound(page: Page): Promise { - await page.goto(`/opord?seed=${FIXED_SEED}`); + await page.goto(`/minigames/opord?seed=${FIXED_SEED}`); await expect(page.getByRole("heading", { name: "OPORD Recall" })).toBeVisible(); await page.getByRole("button", { name: "Receive briefing" }).click(); diff --git a/tests/int/aim-trainer.int.spec.ts b/tests/int/aim-trainer.int.spec.ts index 8c3cc9a..e69f40a 100644 --- a/tests/int/aim-trainer.int.spec.ts +++ b/tests/int/aim-trainer.int.spec.ts @@ -29,7 +29,7 @@ import { resolveAimTrainerTargetHit, stepAimTrainerTarget, stepAimTrainerTargets, -} from "@/lib/aim-trainer"; +} from "@/lib/minigames/aim-trainer"; /** Deterministic LCG-style RNG so target creation is reproducible across runs. */ function seededRng(seed: number): () => number { diff --git a/tests/int/custom-minefields.int.spec.ts b/tests/int/custom-minefields.int.spec.ts index 751e163..2dfec59 100644 --- a/tests/int/custom-minefields.int.spec.ts +++ b/tests/int/custom-minefields.int.spec.ts @@ -17,8 +17,8 @@ import { validateMinefieldName, validateMinefieldScore, validateMinePositions, -} from "@/lib/custom-minigames/eod"; -import { creditEodXp } from "@/lib/custom-minigames/payouts"; +} from "@/lib/minigames/custom/eod"; +import { creditEodXp } from "@/lib/minigames/custom/payouts"; let payload: Payload; const RUN = `cmf-${Date.now().toString(36)}`; diff --git a/tests/int/custom-radio-tests.int.spec.ts b/tests/int/custom-radio-tests.int.spec.ts index b7291ec..f26043a 100644 --- a/tests/int/custom-radio-tests.int.spec.ts +++ b/tests/int/custom-radio-tests.int.spec.ts @@ -11,7 +11,7 @@ import { validateMessages, validateRadioScore, validateTestName, -} from "@/lib/custom-minigames/radio"; +} from "@/lib/minigames/custom/radio"; let payload: Payload; const RUN = `crt-${Date.now().toString(36)}`;