feat(sidebar): group Purchase Order links under Purchasing #113
2 changed files with 43 additions and 5 deletions
|
|
@ -56,17 +56,21 @@ const HISTORY_ROLES: Role[] = [
|
|||
|
||||
const NAV_ITEMS: NavItem[] = [
|
||||
{ href: "/dashboard", label: "Dashboard", icon: LayoutDashboard },
|
||||
{ href: "/po/new", label: "New PO", icon: Plus, roles: ["TECHNICAL", "MANNING", "MANAGER", "SUPERUSER"] },
|
||||
{ href: "/my-orders", label: "Closed Purchase Orders", icon: FileText, roles: ["TECHNICAL", "MANNING", "MANAGER", "SUPERUSER"] },
|
||||
{ href: "/po/import", label: "Import PO", icon: Upload, roles: ["MANAGER", "SUPERUSER"] },
|
||||
{ href: "/approvals", label: "Approvals", icon: CheckSquare, roles: ["MANAGER", "SUPERUSER"] },
|
||||
{ href: "/payments", label: "Payments", icon: CreditCard, roles: ["ACCOUNTS"] },
|
||||
{ href: "/payments/history", label: "Payment History", icon: Receipt, roles: ["ACCOUNTS", "SUPERUSER"] },
|
||||
{ href: "/history", label: "History", icon: History, roles: HISTORY_ROLES },
|
||||
{ href: "/profile", label: "My Profile", icon: UserCircle },
|
||||
];
|
||||
|
||||
// ── Purchasing section ────────────────────────────────────────────────────────
|
||||
// Purchase Order actions (create / browse / import / history)
|
||||
const PURCHASING_PO: NavItem[] = [
|
||||
{ href: "/po/new", label: "New Purchase Order", icon: Plus, roles: ["TECHNICAL", "MANNING", "MANAGER", "SUPERUSER"] },
|
||||
{ href: "/my-orders", label: "Closed Purchase Orders", icon: FileText, roles: ["TECHNICAL", "MANNING", "MANAGER", "SUPERUSER"] },
|
||||
{ href: "/po/import", label: "Import Purchase Order", icon: Upload, roles: ["MANAGER", "SUPERUSER"] },
|
||||
{ href: "/history", label: "Purchase Order History", icon: History, roles: HISTORY_ROLES },
|
||||
];
|
||||
|
||||
// Staff browsing items (product catalogue + cart for PO creation)
|
||||
const PURCHASING_STAFF: NavItem[] = [
|
||||
{ href: "/catalogue/items", label: "Items", icon: Package, roles: ["TECHNICAL", "MANNING", "SUPERUSER"] },
|
||||
|
|
@ -85,7 +89,7 @@ const PURCHASING_MGMT: NavItem[] = [
|
|||
: []),
|
||||
];
|
||||
|
||||
const PURCHASING_ITEMS: NavItem[] = [...PURCHASING_STAFF, ...PURCHASING_MGMT];
|
||||
const PURCHASING_ITEMS: NavItem[] = [...PURCHASING_PO, ...PURCHASING_STAFF, ...PURCHASING_MGMT];
|
||||
|
||||
// ── Crewing section (feature-flagged) ─────────────────────────────────────────
|
||||
// Gated by CREWING_ENABLED. Phase 2 adds Requisitions (Manager + MPO, per
|
||||
|
|
|
|||
|
|
@ -100,3 +100,37 @@ describe("Sidebar collapsible sections", () => {
|
|||
expect(within(adminVendors).queryByText("Vendors")).toBeTruthy();
|
||||
});
|
||||
});
|
||||
|
||||
describe("Purchase Order links under Purchasing", () => {
|
||||
it("renders the renamed PO links inside the Purchasing section (not top-level)", () => {
|
||||
render(<Sidebar userRole="MANAGER" />);
|
||||
|
||||
// Collapsed by default → PO links are not in the DOM until Purchasing opens.
|
||||
expect(screen.queryByRole("link", { name: /New Purchase Order/i })).not.toBeInTheDocument();
|
||||
|
||||
fireEvent.click(headerButton("Purchasing"));
|
||||
|
||||
expect(screen.getByRole("link", { name: /New Purchase Order/i })).toBeInTheDocument();
|
||||
expect(screen.getByRole("link", { name: /Closed Purchase Orders/i })).toBeInTheDocument();
|
||||
expect(screen.getByRole("link", { name: /Import Purchase Order/i })).toBeInTheDocument();
|
||||
expect(screen.getByRole("link", { name: /Purchase Order History/i })).toBeInTheDocument();
|
||||
});
|
||||
|
||||
it("auto-expands Purchasing when a PO route is active", () => {
|
||||
mockPathname = "/po/new";
|
||||
render(<Sidebar userRole="MANAGER" />);
|
||||
|
||||
expect(headerButton("Purchasing")).toHaveAttribute("aria-expanded", "true");
|
||||
expect(screen.getByRole("link", { name: /New Purchase Order/i })).toBeInTheDocument();
|
||||
});
|
||||
|
||||
it("drops the old PO labels", () => {
|
||||
render(<Sidebar userRole="MANAGER" />);
|
||||
fireEvent.click(headerButton("Purchasing"));
|
||||
|
||||
// Old labels were "New PO" / "Import PO" / "History".
|
||||
expect(screen.queryByRole("link", { name: /^New PO$/i })).not.toBeInTheDocument();
|
||||
expect(screen.queryByRole("link", { name: /^Import PO$/i })).not.toBeInTheDocument();
|
||||
expect(screen.queryByRole("link", { name: /^History$/i })).not.toBeInTheDocument();
|
||||
});
|
||||
});
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue