Files
element-call/src/lotus/lotusVolumeMemory.test.ts
T

61 lines
2.0 KiB
TypeScript
Raw Normal View History

/*
Copyright 2026 Lotus Guild
SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial
Please see LICENSE in the repository root for full details.
*/
import { beforeEach, describe, expect, it } from "vitest";
import {
MAX_REMEMBERED,
getRememberedVolume,
rememberVolume,
} from "./lotusVolumeMemory";
describe("lotusVolumeMemory", () => {
beforeEach(() => localStorage.clear());
it("defaults to 1 and remembers a set volume", () => {
expect(getRememberedVolume("@bob:x")).toBe(1);
rememberVolume("@bob:x", 0.4);
expect(getRememberedVolume("@bob:x")).toBe(0.4);
});
it("forgets the entry when set back to 1", () => {
rememberVolume("@bob:x", 0.4);
rememberVolume("@bob:x", 1);
expect(getRememberedVolume("@bob:x")).toBe(1);
expect(localStorage.getItem("lotus-per-user-volume")).toBe("{}");
});
it("keeps only the most recently set entries", () => {
for (let i = 0; i < MAX_REMEMBERED + 5; i++) rememberVolume(`@u${i}:x`, 0.5);
expect(getRememberedVolume("@u0:x")).toBe(1);
expect(getRememberedVolume("@u4:x")).toBe(1);
expect(getRememberedVolume("@u5:x")).toBe(0.5);
expect(getRememberedVolume(`@u${MAX_REMEMBERED + 4}:x`)).toBe(0.5);
});
it("re-setting an old entry makes it recent", () => {
for (let i = 0; i < MAX_REMEMBERED; i++) rememberVolume(`@u${i}:x`, 0.5);
rememberVolume("@u0:x", 0.7);
rememberVolume("@new:x", 0.3);
expect(getRememberedVolume("@u0:x")).toBe(0.7);
expect(getRememberedVolume("@u1:x")).toBe(1);
});
it("ignores junk in storage and invalid volumes", () => {
localStorage.setItem(
"lotus-per-user-volume",
JSON.stringify({ "@a:x": "loud", "@b:x": 0.2 }),
);
expect(getRememberedVolume("@a:x")).toBe(1);
expect(getRememberedVolume("@b:x")).toBe(0.2);
rememberVolume("@c:x", Number.NaN);
expect(getRememberedVolume("@c:x")).toBe(1);
localStorage.setItem("lotus-per-user-volume", "not json");
expect(getRememberedVolume("@b:x")).toBe(1);
});
});