diff options
| author | Adam Malczewski <[email protected]> | 2026-06-26 22:21:55 +0900 |
|---|---|---|
| committer | Adam Malczewski <[email protected]> | 2026-06-26 22:23:39 +0900 |
| commit | c333fcec32b1f90bf0da6bb14d2609c20e38a74f (patch) | |
| tree | 0db3ec77a6838c4f800c362df0de3c6cd8544431 /src/features/settings/logic | |
| parent | 1285564f12238b22f6b39b9f3fbcecaca8456911 (diff) | |
| download | dispatch-web-c333fcec32b1f90bf0da6bb14d2609c20e38a74f.tar.gz dispatch-web-c333fcec32b1f90bf0da6bb14d2609c20e38a74f.zip | |
style: switch from tabs to 2-space indentation (incl. svelte)
Diffstat (limited to 'src/features/settings/logic')
| -rw-r--r-- | src/features/settings/logic/view-model.test.ts | 104 | ||||
| -rw-r--r-- | src/features/settings/logic/view-model.ts | 32 |
2 files changed, 68 insertions, 68 deletions
diff --git a/src/features/settings/logic/view-model.test.ts b/src/features/settings/logic/view-model.test.ts index 65fcae9..93c4786 100644 --- a/src/features/settings/logic/view-model.test.ts +++ b/src/features/settings/logic/view-model.test.ts @@ -3,59 +3,59 @@ import { MAX_CHAT_LIMIT, MIN_CHAT_LIMIT } from "../../../core/chunks"; import { chatLimitChanged, parseChatLimit } from "./view-model"; describe("parseChatLimit", () => { - it("parses a plain integer", () => { - expect(parseChatLimit("256")).toEqual({ ok: true, value: 256 }); - expect(parseChatLimit("100")).toEqual({ ok: true, value: 100 }); - }); - - it("trims surrounding whitespace", () => { - expect(parseChatLimit(" 50 ")).toEqual({ ok: true, value: 50 }); - }); - - it("floors a decimal", () => { - expect(parseChatLimit("100.9")).toEqual({ ok: true, value: 100 }); - }); - - it("clamps below the floor to MIN_CHAT_LIMIT", () => { - expect(parseChatLimit("0")).toEqual({ ok: true, value: MIN_CHAT_LIMIT }); - expect(parseChatLimit("-5")).toEqual({ ok: true, value: MIN_CHAT_LIMIT }); - expect(parseChatLimit("5")).toEqual({ ok: true, value: MIN_CHAT_LIMIT }); - }); - - it("clamps above the ceiling to MAX_CHAT_LIMIT", () => { - expect(parseChatLimit("99999999")).toEqual({ ok: true, value: MAX_CHAT_LIMIT }); - }); - - it("rejects an empty string", () => { - expect(parseChatLimit("")).toEqual({ ok: false, error: expect.any(String) }); - expect(parseChatLimit(" ")).toEqual({ ok: false, error: expect.any(String) }); - }); - - it("rejects non-numeric input", () => { - expect(parseChatLimit("abc")).toEqual({ ok: false, error: expect.any(String) }); - expect(parseChatLimit("twelve")).toEqual({ ok: false, error: expect.any(String) }); - }); + it("parses a plain integer", () => { + expect(parseChatLimit("256")).toEqual({ ok: true, value: 256 }); + expect(parseChatLimit("100")).toEqual({ ok: true, value: 100 }); + }); + + it("trims surrounding whitespace", () => { + expect(parseChatLimit(" 50 ")).toEqual({ ok: true, value: 50 }); + }); + + it("floors a decimal", () => { + expect(parseChatLimit("100.9")).toEqual({ ok: true, value: 100 }); + }); + + it("clamps below the floor to MIN_CHAT_LIMIT", () => { + expect(parseChatLimit("0")).toEqual({ ok: true, value: MIN_CHAT_LIMIT }); + expect(parseChatLimit("-5")).toEqual({ ok: true, value: MIN_CHAT_LIMIT }); + expect(parseChatLimit("5")).toEqual({ ok: true, value: MIN_CHAT_LIMIT }); + }); + + it("clamps above the ceiling to MAX_CHAT_LIMIT", () => { + expect(parseChatLimit("99999999")).toEqual({ ok: true, value: MAX_CHAT_LIMIT }); + }); + + it("rejects an empty string", () => { + expect(parseChatLimit("")).toEqual({ ok: false, error: expect.any(String) }); + expect(parseChatLimit(" ")).toEqual({ ok: false, error: expect.any(String) }); + }); + + it("rejects non-numeric input", () => { + expect(parseChatLimit("abc")).toEqual({ ok: false, error: expect.any(String) }); + expect(parseChatLimit("twelve")).toEqual({ ok: false, error: expect.any(String) }); + }); }); describe("chatLimitChanged", () => { - it("is false when the typed value normalizes to the current limit", () => { - expect(chatLimitChanged("256", 256)).toBe(false); - }); - - it("is true when the typed value differs", () => { - expect(chatLimitChanged("100", 256)).toBe(true); - expect(chatLimitChanged("256", 100)).toBe(true); - }); - - it("is false for empty / invalid input (nothing submittable)", () => { - expect(chatLimitChanged("", 256)).toBe(false); - expect(chatLimitChanged("abc", 256)).toBe(false); - }); - - it("is false when the typed value clamps to the current limit", () => { - // 5 clamps to MIN (10); current is already 10 → no change. - expect(chatLimitChanged("5", MIN_CHAT_LIMIT)).toBe(false); - // A huge value clamps to MAX; current is already MAX → no change. - expect(chatLimitChanged("99999999", MAX_CHAT_LIMIT)).toBe(false); - }); + it("is false when the typed value normalizes to the current limit", () => { + expect(chatLimitChanged("256", 256)).toBe(false); + }); + + it("is true when the typed value differs", () => { + expect(chatLimitChanged("100", 256)).toBe(true); + expect(chatLimitChanged("256", 100)).toBe(true); + }); + + it("is false for empty / invalid input (nothing submittable)", () => { + expect(chatLimitChanged("", 256)).toBe(false); + expect(chatLimitChanged("abc", 256)).toBe(false); + }); + + it("is false when the typed value clamps to the current limit", () => { + // 5 clamps to MIN (10); current is already 10 → no change. + expect(chatLimitChanged("5", MIN_CHAT_LIMIT)).toBe(false); + // A huge value clamps to MAX; current is already MAX → no change. + expect(chatLimitChanged("99999999", MAX_CHAT_LIMIT)).toBe(false); + }); }); diff --git a/src/features/settings/logic/view-model.ts b/src/features/settings/logic/view-model.ts index caf76ee..73f6d17 100644 --- a/src/features/settings/logic/view-model.ts +++ b/src/features/settings/logic/view-model.ts @@ -17,8 +17,8 @@ import { normalizeChatLimit } from "../../../core/chunks"; /** Outcome of persisting a chat-limit setting. */ export type ChatLimitSaveResult = - | { readonly ok: true; readonly chatLimit: number } - | { readonly ok: false; readonly error: string }; + | { readonly ok: true; readonly chatLimit: number } + | { readonly ok: false; readonly error: string }; export type SaveChatLimit = (value: number) => Promise<ChatLimitSaveResult>; @@ -26,8 +26,8 @@ export type SaveChatLimit = (value: number) => Promise<ChatLimitSaveResult>; /** Result of parsing a typed chat-limit string. */ export type ChatLimitParse = - | { readonly ok: true; readonly value: number } - | { readonly ok: false; readonly error: string }; + | { readonly ok: true; readonly value: number } + | { readonly ok: false; readonly error: string }; /** * Parse a typed chat-limit string into a normalized limit (floored + clamped to @@ -37,15 +37,15 @@ export type ChatLimitParse = * from user typing. */ export function parseChatLimit(raw: string): ChatLimitParse { - const trimmed = raw.trim(); - if (trimmed.length === 0) { - return { ok: false, error: "Enter a number." }; - } - const n = Number(trimmed); - if (!Number.isFinite(n)) { - return { ok: false, error: "Must be a number." }; - } - return { ok: true, value: normalizeChatLimit(n) }; + const trimmed = raw.trim(); + if (trimmed.length === 0) { + return { ok: false, error: "Enter a number." }; + } + const n = Number(trimmed); + if (!Number.isFinite(n)) { + return { ok: false, error: "Must be a number." }; + } + return { ok: true, value: normalizeChatLimit(n) }; } /** @@ -54,7 +54,7 @@ export function parseChatLimit(raw: string): ChatLimitParse { * dirty-check for the input — it must NOT mutate or clamp, only compare. */ export function chatLimitChanged(typed: string, current: number): boolean { - const parsed = parseChatLimit(typed); - if (!parsed.ok) return false; - return parsed.value !== current; + const parsed = parseChatLimit(typed); + if (!parsed.ok) return false; + return parsed.value !== current; } |
