| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110 |
- /* @vitest-environment node */
- import { describe, it, expect } from "vitest";
- import {
- ADMIN_USERS_SORT,
- normalizeAdminUsersSortMode,
- sortAdminUsers,
- } from "./usersSorting.js";
- function mapRows(rows) {
- return rows.map((x) => ({
- id: x.id,
- role: x.role,
- branchId: x.branchId,
- username: x.username,
- }));
- }
- describe("lib/frontend/admin/users/usersSorting", () => {
- it("normalizes known sort modes and rejects invalid values", () => {
- expect(normalizeAdminUsersSortMode(undefined)).toBe(
- ADMIN_USERS_SORT.DEFAULT,
- );
- expect(normalizeAdminUsersSortMode("")).toBe(ADMIN_USERS_SORT.DEFAULT);
- expect(normalizeAdminUsersSortMode(ADMIN_USERS_SORT.ROLE_RIGHTS)).toBe(
- ADMIN_USERS_SORT.ROLE_RIGHTS,
- );
- expect(normalizeAdminUsersSortMode("nope")).toBe(null);
- });
- it("sorts by role rights with deterministic tie-breakers", () => {
- const items = [
- {
- id: "6",
- role: "admin",
- branchId: null,
- username: "z-admin",
- },
- {
- id: "1",
- role: "branch",
- branchId: "NL10",
- username: "branch-z",
- },
- {
- id: "2",
- role: "branch",
- branchId: "NL2",
- username: "branch-a",
- },
- {
- id: "3",
- role: "dev",
- branchId: null,
- username: "dev",
- },
- {
- id: "4",
- role: "superadmin",
- branchId: null,
- username: "root",
- },
- {
- id: "5",
- role: "admin",
- branchId: null,
- username: "a-admin",
- },
- ];
- const out = sortAdminUsers(items, ADMIN_USERS_SORT.ROLE_RIGHTS);
- expect(mapRows(out)).toEqual([
- { id: "4", role: "superadmin", branchId: null, username: "root" },
- { id: "3", role: "dev", branchId: null, username: "dev" },
- { id: "5", role: "admin", branchId: null, username: "a-admin" },
- { id: "6", role: "admin", branchId: null, username: "z-admin" },
- { id: "2", role: "branch", branchId: "NL2", username: "branch-a" },
- { id: "1", role: "branch", branchId: "NL10", username: "branch-z" },
- ]);
- });
- it("sorts by branch asc (numeric) with null branch at the end", () => {
- const items = [
- { id: "1", role: "branch", branchId: "NL10", username: "b1" },
- { id: "2", role: "branch", branchId: "NL2", username: "b2" },
- { id: "3", role: "admin", branchId: null, username: "admin" },
- { id: "4", role: "superadmin", branchId: null, username: "super" },
- { id: "5", role: "branch", branchId: "NL01", username: "b0" },
- ];
- const out = sortAdminUsers(items, ADMIN_USERS_SORT.BRANCH_ASC);
- expect(mapRows(out)).toEqual([
- { id: "5", role: "branch", branchId: "NL01", username: "b0" },
- { id: "2", role: "branch", branchId: "NL2", username: "b2" },
- { id: "1", role: "branch", branchId: "NL10", username: "b1" },
- { id: "4", role: "superadmin", branchId: null, username: "super" },
- { id: "3", role: "admin", branchId: null, username: "admin" },
- ]);
- });
- it("returns a shallow copy for default mode", () => {
- const items = [{ id: "1" }, { id: "2" }];
- const out = sortAdminUsers(items, ADMIN_USERS_SORT.DEFAULT);
- expect(out).toEqual(items);
- expect(out).not.toBe(items);
- });
- });
|