86 lines
1.9 KiB
JavaScript
86 lines
1.9 KiB
JavaScript
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"]);
|
|
});
|