From d4629baaea04e8550899dc17e3802e4d1e50cfb0 Mon Sep 17 00:00:00 2001 From: Scrubs McBarkley Date: Sat, 21 Mar 2026 01:50:51 +0000 Subject: [PATCH] fix: update ImpersonationBanner tests to match current component API - Import ImpersonationSession from @groombook/types (component was updated in #78) - Remove stale tests: "shows customer name" and "returns null when inactive" (component no longer renders customer name or checks session.active) - Add isExtended prop to all render calls (component now takes isExtended as prop) - Fix "does not show Extend button when already extended" to pass isExtended={true} instead of session.extended (prop was extracted from session in #78) - Fix clients.test.ts: selectRows typed as Record[] to allow spread in returning() callbacks (resolves TS2698) Co-Authored-By: Paperclip --- apps/api/src/__tests__/clients.test.ts | 2 +- .../__tests__/ImpersonationBanner.test.tsx | 49 ++++++------------- 2 files changed, 16 insertions(+), 35 deletions(-) diff --git a/apps/api/src/__tests__/clients.test.ts b/apps/api/src/__tests__/clients.test.ts index f1b8e0e..90a4d69 100644 --- a/apps/api/src/__tests__/clients.test.ts +++ b/apps/api/src/__tests__/clients.test.ts @@ -26,7 +26,7 @@ const DISABLED_CLIENT = { // ─── Queue-based mock DB ────────────────────────────────────────────────────── -let selectRows: unknown[] = []; +let selectRows: Record[] = []; let insertedValues: Record[] = []; let updatedValues: Record[] = []; let deletedId: string | null = null; diff --git a/apps/web/src/__tests__/ImpersonationBanner.test.tsx b/apps/web/src/__tests__/ImpersonationBanner.test.tsx index 988afbc..4dca0d6 100644 --- a/apps/web/src/__tests__/ImpersonationBanner.test.tsx +++ b/apps/web/src/__tests__/ImpersonationBanner.test.tsx @@ -1,22 +1,21 @@ import { describe, it, expect, vi, beforeEach, afterEach } from "vitest"; import { render, screen, fireEvent, act } from "@testing-library/react"; import { ImpersonationBanner } from "../portal/ImpersonationBanner.js"; -import type { ImpersonationSession } from "../portal/mockData.js"; +import type { ImpersonationSession } from "@groombook/types"; function makeSession(overrides: Partial = {}): ImpersonationSession { const now = new Date(); const expires = new Date(now.getTime() + 30 * 60 * 1000); // 30 min from now return { - active: true, - staffName: "Jordan", - staffRole: "manager", - customerName: "Sarah Mitchell", + id: "session-uuid-1", + staffId: "staff-uuid-1", + clientId: "client-uuid-1", reason: "Customer requested help", + status: "active", startedAt: now.toISOString(), + endedAt: null, expiresAt: expires.toISOString(), - extended: false, - readOnly: true, - auditLog: [], + createdAt: now.toISOString(), ...overrides, }; } @@ -39,6 +38,7 @@ describe("ImpersonationBanner", () => { render( { expect(screen.getByText(/STAFF VIEW/)).toBeInTheDocument(); }); - it("shows the customer name", () => { - render( - - ); - expect(screen.getByText("Sarah Mitchell")).toBeInTheDocument(); - }); - - it("returns null when session is not active", () => { - const { container } = render( - - ); - expect(container.firstChild).toBeNull(); - }); - it("calls onEnd when End Session is clicked", () => { render( { render( { render( { const expiresAt = new Date(Date.now() + 3 * 60 * 1000).toISOString(); render( { const expiresAt = new Date(Date.now() + 3 * 60 * 1000).toISOString(); render(