diff --git a/backend/__tests__/api/controllers/result.spec.ts b/backend/__tests__/api/controllers/result.spec.ts index e5fee5001c8a..a0b3fbe38c48 100644 --- a/backend/__tests__/api/controllers/result.spec.ts +++ b/backend/__tests__/api/controllers/result.spec.ts @@ -631,6 +631,7 @@ describe("result controller test", () => { xp: 0, dailyXpBonus: false, xpBreakdown: { + configMultiplier: 0, accPenalty: 28, base: 20, incomplete: 5, diff --git a/backend/src/api/controllers/result.ts b/backend/src/api/controllers/result.ts index 996e1746b69b..eb9e94875d5b 100644 --- a/backend/src/api/controllers/result.ts +++ b/backend/src/api/controllers/result.ts @@ -584,6 +584,18 @@ export async function addResult( streak, ); + if (isNaN(xpGained.xp)) { + throw new MonkeyError( + 500, + "Calculated XP is NaN", + JSON.stringify({ + xpGained, + result: completedEvent, + }), + uid, + ); + } + if (xpGained.xp < 0) { throw new MonkeyError( 500, @@ -813,7 +825,7 @@ async function calculateXp( const totalXp = Math.round((xpAfterAccuracy + incompleteXp) * gainMultiplier) + dailyBonus; - if (gainMultiplier > 1) { + if (gainMultiplier !== 1) { // breakdown.push([ // "configMultiplier", // Math.round((xpAfterAccuracy + incompleteXp) * (gainMultiplier - 1)), diff --git a/frontend/__tests__/components/ui/form/InputField.spec.tsx b/frontend/__tests__/components/ui/form/InputField.spec.tsx index b9228192d38c..2e27b11bb5bc 100644 --- a/frontend/__tests__/components/ui/form/InputField.spec.tsx +++ b/frontend/__tests__/components/ui/form/InputField.spec.tsx @@ -16,6 +16,7 @@ function makeField(name: string, value = "") { errors: [], }, }, + options: {}, handleBlur: vi.fn(), handleChange: vi.fn(), getMeta: () => ({ hasWarning: false, warnings: [] }), @@ -85,6 +86,7 @@ describe("InputField", () => { it("shows FieldIndicator", () => { const field = makeField("name"); + field.options = { validators: { onChange: () => undefined } }; field.state.meta.isValidating = true; const { container } = render(() => field} />); diff --git a/frontend/src/ts/commandline/commandline-metadata.ts b/frontend/src/ts/commandline/commandline-metadata.ts index 0f53145a8f2e..f8e26655076e 100644 --- a/frontend/src/ts/commandline/commandline-metadata.ts +++ b/frontend/src/ts/commandline/commandline-metadata.ts @@ -14,6 +14,9 @@ import * as UI from "../ui"; import { typedKeys } from "../utils/misc"; import { Validation } from "../types/validation"; +//TODO: remove display property and instead use optionsMetadata from configMetadata +// eventually this file should be fully merged into config metadata, probably under the 'commandline' property + type ConfigKeysWithoutCommands = | "minWpmCustomSpeed" | "minAccCustom"