Odoo18-Base/addons/web/static/tests/core/cache.test.js

86 lines
1.9 KiB
JavaScript
Raw Permalink Normal View History

2025-01-06 10:57:38 +07:00
import { describe, expect, test } from "@odoo/hoot";
import { Deferred } from "@odoo/hoot-mock";
import { Cache } from "@web/core/utils/cache";
describe.current.tags("headless");
test("do not call getValue if already cached", () => {
const cache = new Cache((key) => {
expect.step(key);
return key.toUpperCase();
});
expect(cache.read("a")).toBe("A");
expect(cache.read("b")).toBe("B");
expect(cache.read("a")).toBe("A");
expect.verifySteps(["a", "b"]);
});
test("multiple cache key", async () => {
const cache = new Cache((...keys) => expect.step(keys.join("-")));
cache.read("a", 1);
cache.read("a", 2);
cache.read("a", 1);
expect.verifySteps(["a-1", "a-2"]);
});
test("compute key", async () => {
const cache = new Cache(
(key) => expect.step(key),
(key) => key.toLowerCase()
);
cache.read("a");
cache.read("A");
expect.verifySteps(["a"]);
});
test("cache promise", async () => {
const cache = new Cache((key) => {
expect.step(`read ${key}`);
return new Deferred();
});
cache.read("a").then((k) => expect.step(`then ${k}`));
cache.read("b").then((k) => expect.step(`then ${k}`));
cache.read("a").then((k) => expect.step(`then ${k}`));
cache.read("a").resolve("a");
cache.read("b").resolve("b");
await Promise.resolve();
expect.verifySteps(["read a", "read b", "then a", "then a", "then b"]);
});
test("clear cache", async () => {
const cache = new Cache((key) => expect.step(key));
cache.read("a");
cache.read("b");
expect.verifySteps(["a", "b"]);
cache.read("a");
cache.read("b");
expect.verifySteps([]);
cache.clear("a");
cache.read("a");
cache.read("b");
expect.verifySteps(["a"]);
cache.clear();
cache.read("a");
cache.read("b");
expect.verifySteps([]);
cache.invalidate();
cache.read("a");
cache.read("b");
expect.verifySteps(["a", "b"]);
});