one
Version:
One is a new React Framework that makes Vite serve both native and web.
99 lines (98 loc) • 4.31 kB
JavaScript
var import_vitest = require("vitest");
class ReadOnlyURLSearchParams extends URLSearchParams {
set(_name, _value) {
throw new Error("useSearchParams returns a read-only URLSearchParams object");
}
append(_name, _value) {
throw new Error("useSearchParams returns a read-only URLSearchParams object");
}
delete(_name, _value) {
throw new Error("useSearchParams returns a read-only URLSearchParams object");
}
}
(0, import_vitest.describe)("ReadOnlyURLSearchParams", () => {
(0, import_vitest.it)("should allow reading values", () => {
const params = new ReadOnlyURLSearchParams([
["sort", "price"],
["category", "electronics"]
]);
(0, import_vitest.expect)(params.get("sort")).toBe("price"), (0, import_vitest.expect)(params.get("category")).toBe("electronics"), (0, import_vitest.expect)(params.get("nonexistent")).toBe(null);
}), (0, import_vitest.it)("should support has()", () => {
const params = new ReadOnlyURLSearchParams([["key", "value"]]);
(0, import_vitest.expect)(params.has("key")).toBe(!0), (0, import_vitest.expect)(params.has("missing")).toBe(!1);
}), (0, import_vitest.it)("should support getAll() for repeated params", () => {
const params = new ReadOnlyURLSearchParams([
["tag", "a"],
["tag", "b"],
["tag", "c"]
]);
(0, import_vitest.expect)(params.getAll("tag")).toEqual(["a", "b", "c"]);
}), (0, import_vitest.it)("should support iteration", () => {
const params = new ReadOnlyURLSearchParams([
["a", "1"],
["b", "2"]
]), entries = Array.from(params.entries());
(0, import_vitest.expect)(entries).toEqual([
["a", "1"],
["b", "2"]
]);
}), (0, import_vitest.it)("should support toString()", () => {
const params = new ReadOnlyURLSearchParams([
["sort", "price"],
["page", "1"]
]);
(0, import_vitest.expect)(params.toString()).toBe("sort=price&page=1");
}), (0, import_vitest.it)("should throw on set()", () => {
const params = new ReadOnlyURLSearchParams([["key", "value"]]);
(0, import_vitest.expect)(() => params.set("key", "new")).toThrow(
"useSearchParams returns a read-only URLSearchParams object"
);
}), (0, import_vitest.it)("should throw on append()", () => {
const params = new ReadOnlyURLSearchParams([["key", "value"]]);
(0, import_vitest.expect)(() => params.append("key", "another")).toThrow(
"useSearchParams returns a read-only URLSearchParams object"
);
}), (0, import_vitest.it)("should throw on delete()", () => {
const params = new ReadOnlyURLSearchParams([["key", "value"]]);
(0, import_vitest.expect)(() => params.delete("key")).toThrow(
"useSearchParams returns a read-only URLSearchParams object"
);
});
});
(0, import_vitest.describe)("useSearchParams param conversion", () => {
function paramsToEntries(params) {
return Object.entries(params).flatMap(([key, value]) => value === void 0 ? [] : Array.isArray(value) ? value.map((v) => [key, String(v)]) : [[key, String(value)]]);
}
(0, import_vitest.it)("should convert simple string params", () => {
const entries = paramsToEntries({ sort: "price", page: "1" });
(0, import_vitest.expect)(entries).toEqual([
["sort", "price"],
["page", "1"]
]);
}), (0, import_vitest.it)("should expand array params into multiple entries", () => {
const entries = paramsToEntries({ tags: ["a", "b", "c"] });
(0, import_vitest.expect)(entries).toEqual([
["tags", "a"],
["tags", "b"],
["tags", "c"]
]);
}), (0, import_vitest.it)("should filter out undefined values", () => {
const entries = paramsToEntries({ present: "yes", missing: void 0 });
(0, import_vitest.expect)(entries).toEqual([["present", "yes"]]);
}), (0, import_vitest.it)("should handle mixed params", () => {
const entries = paramsToEntries({
single: "value",
multiple: ["x", "y"],
absent: void 0
});
(0, import_vitest.expect)(entries).toEqual([
["single", "value"],
["multiple", "x"],
["multiple", "y"]
]);
}), (0, import_vitest.it)("should handle empty params", () => {
const entries = paramsToEntries({});
(0, import_vitest.expect)(entries).toEqual([]);
});
});
//# sourceMappingURL=hooks.test.js.map