35 lines
1018 B
TypeScript
35 lines
1018 B
TypeScript
import { expect, it } from "vitest";
|
|
import { projectsFields, selectsSomeFields } from "./environmentStateRules.js";
|
|
import { queryValues } from "./environmentStateVariants.js";
|
|
|
|
it("uses decoded names while retaining every recorded query value in order", () => {
|
|
expect(
|
|
queryValues(
|
|
"?%66ields=*&fields=id&fields=two+words&=empty&flag&fields=%FF",
|
|
),
|
|
).toEqual(
|
|
new Map([
|
|
["fields", ["*", "id", "two words", "\uFFFD"]],
|
|
["", ["empty"]],
|
|
["flag", [""]],
|
|
]),
|
|
);
|
|
});
|
|
|
|
it.each([
|
|
[undefined, false, false],
|
|
["?q=fields%3Did", false, false],
|
|
["?%66ields=%2A", true, false],
|
|
["?%66ields=%2A&fields=id", true, true],
|
|
["?fields%5Barticle%5D=", true, true],
|
|
["?%24SELECT=%2A", true, false],
|
|
["?fields=%FF", true, true],
|
|
["??fields=id", false, false],
|
|
] as const)(
|
|
"preserves projection meaning for recorded query %s",
|
|
(query, projects, selects) => {
|
|
expect(projectsFields(query)).toBe(projects);
|
|
expect(selectsSomeFields(query)).toBe(selects);
|
|
},
|
|
);
|