RUN  v4.1.2 F:/Coding/MeshiTrack/packages/web node.exe : stderr | src/app/(dashboard)/shopping-lists/__tests__/page.test.tsx > ShoppingListsPage > loads and displays shopping lists At line:1 char:1 + & "C:\nodejs/node.exe" "C:\nodejs/node_modules/npm/bin/npx-cli.js" vi ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : NotSpecified: (stderr... shopping lists:String) [], RemoteException + FullyQualifiedErrorId : NativeCommandError Each child in a list should have a unique "key" prop. Check the render method of `ShoppingListsPage`. See https://react.dev/link/warning-keys for more information. ✓ src/components/__tests__/ThemeProvider.test.tsx (8 tests) 102ms ✓ src/app/__tests__/page.test.tsx (2 tests) 198ms ✓ src/app/(dashboard)/medicines/__tests__/page.test.tsx (3 tests) 136ms ✓ src/app/(dashboard)/products/__tests__/ImportDialog.test.tsx (11 tests) 353ms ✓ src/components/__tests__/ui.test.tsx (11 tests) 284ms stderr | src/app/(dashboard)/dashboard/__tests__/page.test.tsx > DashboardPage > shows "good shape" message when no critical alerts Each child in a list should have a unique "key" prop. Check the render method of `DashboardPage`. See https://react.dev/link/warning-keys for more information. ✓ src/components/__tests__/TopBar.test.tsx (4 tests) 331ms ✓ src/components/__tests__/Sidebar.test.tsx (8 tests) 340ms ✓ src/app/(dashboard)/dashboard/__tests__/page.test.tsx (13 tests) 401ms ✓ src/app/(dashboard)/medicines/schedule/__tests__/page.test.tsx (14 tests) 388ms ✓ src/app/(dashboard)/shopping-lists/__tests__/page.test.tsx (6 tests) 685ms ✓ toggles create list modal and submits  332ms stderr | src/app/(dashboard)/refills/__tests__/page.test.tsx > RefillsPage > renders Refills heading when householdId exists An update to AlertsPanel inside a test was not wrapped in act(...). When testing, code that causes React state updates should be wrapped into act(...): act(() => { /* fire events that update state */ }); /* assert on the output */ This ensures that you're testing the behavior the user would see in the browser. Learn more at https://react.dev/link/wrap-tests-with-act An update to AlertsPanel inside a test was not wrapped in act(...). When testing, code that causes React state updates should be wrapped into act(...): act(() => { /* fire events that update state */ }); /* assert on the output */ This ensures that you're testing the behavior the user would see in the browser. Learn more at https://react.dev/link/wrap-tests-with-act An update to RefillListsPanel inside a test was not wrapped in act(...). When testing, code that causes React state updates should be wrapped into act(...): act(() => { /* fire events that update state */ }); /* assert on the output */ This ensures that you're testing the behavior the user would see in the browser. Learn more at https://react.dev/link/wrap-tests-with-act An update to RefillListsPanel inside a test was not wrapped in act(...). When testing, code that causes React state updates should be wrapped into act(...): act(() => { /* fire events that update state */ }); /* assert on the output */ This ensures that you're testing the behavior the user would see in the browser. Learn more at https://react.dev/link/wrap-tests-with-act stderr | src/app/(dashboard)/medicine-prices/__tests__/page.test.tsx > MedicinePricesPage > renders Medicine Prices heading when householdId exists An update to MedicinePricesContent inside a test was not wrapped in act(...). When testing, code that causes React state updates should be wrapped into act(...): act(() => { /* fire events that update state */ }); /* assert on the output */ This ensures that you're testing the behavior the user would see in the browser. Learn more at https://react.dev/link/wrap-tests-with-act An update to MedicinePricesContent inside a test was not wrapped in act(...). When testing, code that causes React state updates should be wrapped into act(...): act(() => { /* fire events that update state */ }); /* assert on the output */ This ensures that you're testing the behavior the user would see in the browser. Learn more at https://react.dev/link/wrap-tests-with-act ✓ src/app/(dashboard)/recipes/new/__tests__/page.test.tsx (3 tests) 216ms ✓ src/app/(dashboard)/recipes/[id]/edit/__tests__/page.test.tsx (4 tests) 285ms ✓ src/app/(dashboard)/recipes/[id]/__tests__/page.test.tsx (11 tests) 556ms ✓ src/app/(dashboard)/recipes/__tests__/page.test.tsx (22 tests) 801ms ✓ src/app/(dashboard)/pantry/__tests__/page.test.tsx (15 tests) 809ms stderr | src/app/(dashboard)/medicines/__tests__/ActivityTab.test.tsx > ActivityTab > loads more events when Load more is clicked Encountered two children with the same key, `ev-1`. Keys should be unique so that components maintain their identity across updates. Non-unique keys may cause children to be duplicated and/or omitted — the behavior is unsupported and could change in a future version. ✓ src/app/(dashboard)/recipes/__tests__/RecipeEditor.test.tsx (9 tests) 891ms stderr | src/app/(dashboard)/medicine-prices/__tests__/page.test.tsx > MedicinePricesPage > shows Load more button in price history Encountered two children with the same key, `pr-1`. Keys should be unique so that components maintain their identity across updates. Non-unique keys may cause children to be duplicated and/or omitted — the behavior is unsupported and could change in a future version. ❯ src/app/(dashboard)/shopping-lists/prices/__tests__/page.test.tsx (3 tests | 3 failed) 2108ms  × renders loading initially 62ms  × loads and displays analytics 1022ms  × handles fetch errors gracefully 1020ms ✓ src/app/(dashboard)/medicines/__tests__/ActivityTab.test.tsx (18 tests) 940ms ✓ src/app/(dashboard)/stores/__tests__/page.test.tsx (22 tests) 2353ms ✓ toggles a preset tag and adds a custom tag  491ms ✓ src/app/(dashboard)/purchases/__tests__/page.test.tsx (26 tests) 2386ms ✓ adds and removes purchase items  304ms ✓ src/app/(dashboard)/products/__tests__/page.test.tsx (11 tests) 1243ms ✓ filters by search input with debounce  442ms ✓ src/app/(dashboard)/medicines/__tests__/OrganizerTab.test.tsx (20 tests) 1354ms stderr | src/app/(dashboard)/medicines/__tests__/LibraryTab.test.tsx > LibraryTab > filters medicines by search, category, and form An update to LibraryTab inside a test was not wrapped in act(...). When testing, code that causes React state updates should be wrapped into act(...): act(() => { /* fire events that update state */ }); /* assert on the output */ This ensures that you're testing the behavior the user would see in the browser. Learn more at https://react.dev/link/wrap-tests-with-act An update to LibraryTab inside a test was not wrapped in act(...). When testing, code that causes React state updates should be wrapped into act(...): act(() => { /* fire events that update state */ }); /* assert on the output */ This ensures that you're testing the behavior the user would see in the browser. Learn more at https://react.dev/link/wrap-tests-with-act An update to LibraryTab inside a test was not wrapped in act(...). When testing, code that causes React state updates should be wrapped into act(...): act(() => { /* fire events that update state */ }); /* assert on the output */ This ensures that you're testing the behavior the user would see in the browser. Learn more at https://react.dev/link/wrap-tests-with-act An update to LibraryTab inside a test was not wrapped in act(...). When testing, code that causes React state updates should be wrapped into act(...): act(() => { /* fire events that update state */ }); /* assert on the output */ This ensures that you're testing the behavior the user would see in the browser. Learn more at https://react.dev/link/wrap-tests-with-act An update to LibraryTab inside a test was not wrapped in act(...). When testing, code that causes React state updates should be wrapped into act(...): act(() => { /* fire events that update state */ }); /* assert on the output */ This ensures that you're testing the behavior the user would see in the browser. Learn more at https://react.dev/link/wrap-tests-with-act ✓ src/app/(dashboard)/medicine-prices/__tests__/page.test.tsx (15 tests) 1433ms stderr | src/app/(dashboard)/medicines/__tests__/CabinetTab.test.tsx > CabinetTab > changes quantity and unit in AddToCabinetForm An update to AddToCabinetForm inside a test was not wrapped in act(...). When testing, code that causes React state updates should be wrapped into act(...): act(() => { /* fire events that update state */ }); /* assert on the output */ This ensures that you're testing the behavior the user would see in the browser. Learn more at https://react.dev/link/wrap-tests-with-act ✓ src/app/(dashboard)/products/__tests__/ProductModal.test.tsx (18 tests) 1767ms ✓ calls onSave with correct data on valid submit  342ms ❯ src/app/(dashboard)/shopping-lists/[id]/__tests__/page.test.tsx (5 tests | 4 failed) 4156ms ✓ renders loading initially 59ms  × loads and displays the list 1012ms  × toggles an item check 1047ms  × adds a new item to the list 1010ms  × completes the trip and syncs to pantry 1023ms ✓ src/app/(dashboard)/medicines/__tests__/LibraryTab.test.tsx (14 tests) 2143ms ✓ creates medicine and refreshes list  495ms ✓ shows fallback error when non-Error is thrown on create medicine  448ms ✓ src/app/(dashboard)/settings/__tests__/page.test.tsx (20 tests) 3791ms ✓ creates a household on form submit  303ms ✓ allows editing the household name  505ms ✓ shows error when name update fails  460ms ✓ shows fallback error when non-Error thrown on name update  324ms ✓ src/app/(dashboard)/medicines/__tests__/RegimensTab.test.tsx (32 tests) 3041ms ✓ src/app/(dashboard)/medicines/__tests__/CabinetTab.test.tsx (29 tests) 3127ms ✓ src/app/(dashboard)/refills/__tests__/page.test.tsx (26 tests) 3150ms ✓ src/app/(dashboard)/medicines/[id]/__tests__/page.test.tsx (34 tests) 3835ms ✓ toggles Add Product form  367ms ✓ src/app/(dashboard)/medicines/organizer/__tests__/page.test.tsx (3 tests) 103ms ✓ src/app/(dashboard)/medicines/activity/__tests__/page.test.tsx (3 tests) 104ms ✓ src/lib/__tests__/useApi.test.ts (7 tests) 41ms ✓ src/app/(dashboard)/medicines/library/__tests__/page.test.tsx (3 tests) 97ms ✓ src/app/(dashboard)/medicines/regimens/__tests__/page.test.tsx (3 tests) 92ms ✓ src/app/(dashboard)/medicines/cabinet/__tests__/page.test.tsx (3 tests) 102ms stdout | src/lib/useShoppingListSync.test.ts > useShoppingListSync > handles incoming item_updated messages correctly 🛒 Connected to shopping list real-time sync: list1 ✓ src/app/(dashboard)/__tests__/loading.test.tsx (1 test) 37ms stdout | src/lib/useShoppingListSync.test.ts > useShoppingListSync > broadcasts toggle item messages when connected 🛒 Connected to shopping list real-time sync: list1 stdout | src/lib/useShoppingListSync.test.ts > useShoppingListSync > handles disconnect and reconnect backoff 🛒 Connected to shopping list real-time sync: list1 🔌 Sync severed: test 🔄 Attempting sync handshake reconnect (1/5)... ✓ src/lib/useShoppingListSync.test.ts (4 tests) 44ms ✓ src/app/(dashboard)/__tests__/layout.test.tsx (1 test) 40ms ✓ src/services/__tests__/api-client.test.ts (14 tests) 20ms ✓ src/services/__tests__/products.test.ts (12 tests) 19ms ✓ src/services/__tests__/organizer.test.ts (7 tests) 12ms ✓ src/services/meal-plans.test.ts (9 tests) 12ms ✓ src/services/__tests__/medicines.test.ts (12 tests) 16ms ✓ src/services/__tests__/regimens.test.ts (8 tests) 12ms ✓ src/services/__tests__/pantry.test.ts (13 tests) 12ms ✓ src/services/__tests__/stores.test.ts (6 tests) 12ms ✓ src/services/__tests__/cabinet-events.test.ts (7 tests) 14ms ✓ src/services/__tests__/cabinet.test.ts (11 tests) 12ms ✓ src/services/__tests__/purchases.test.ts (7 tests) 14ms ✓ src/services/__tests__/refills.test.ts (9 tests) 13ms ✓ src/services/shopping-lists.test.ts (12 tests) 8ms ✓ src/services/nutrition-targets.test.ts (4 tests) 8ms ✓ src/services/prices.test.ts (5 tests) 6ms ✓ src/services/__tests__/medicine-prices.test.ts (7 tests) 12ms ✓ src/services/__tests__/recipes.test.ts (11 tests) 12ms ✓ src/services/__tests__/households.test.ts (5 tests) 7ms ⎯⎯⎯⎯⎯⎯⎯ Failed Tests 7 ⎯⎯⎯⎯⎯⎯⎯  FAIL  src/app/(dashboard)/shopping-lists/prices/__tests__/page.test.tsx > ShoppingListPricesPage > renders loading initially TestingLibraryElementError: Unable to find an element with the text: Price Intelligence. This could be because the text is broken up by multiple elements. In this case, you can provide a function for your text matcher to make your matcher more flexible. Ignored nodes: comments, script, style  
  Synthesizing financial graphs... 
    ❯ Object.getElementError ../../node_modules/@testing-library/dom/dist/config.js:37:19  ❯ ../../node_modules/@testing-library/dom/dist/query-helpers.js:76:38  ❯ ../../node_modules/@testing-library/dom/dist/query-helpers.js:52:17  ❯ ../../node_modules/@testing-library/dom/dist/query-helpers.js:95:19  ❯ src/app/(dashboard)/shopping-lists/prices/__tests__/page.test.tsx:56:19  54| vi.mocked(useApiModule.useApi).mockReturnValue({ householdId: null…  55| render(<ShoppingListPricesPage />);  56| expect(screen.getByText('Price Intelligence')).toBeInTheDocument();  | ^  57| });  58| ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[1/7]⎯  FAIL  src/app/(dashboard)/shopping-lists/prices/__tests__/page.test.tsx > ShoppingListPricesPage > loads and displays analytics TestingLibraryElementError: Unable to find an element with the text: $150.00. This could be because the text is broken up by multiple elements. In this case, you can provide a function for your text matcher to make your matcher more flexible. Ignored nodes: comments, script, style  
  Inflation & Spend Metrics         Back to Checklists  
    Monthly Spending Velocities    No historical spend records found.      Spending Distrubution by Category    No categorized allocations recorded yet.       Average Complete Basket Totals per Store   Create multiple shopping trips to visualize basket trends.      Ignored nodes: comments, script, style    
  Inflation & Spend Metrics         Back to Checklists  
    Monthly Spending Velocities    No historical spend records found.      Spending Distrubution by Category    No categorized allocations recorded yet.       Average Complete Basket Totals per Store   Create multiple shopping trips to visualize basket trends.        ❯ Proxy.waitForWrapper ../../node_modules/@testing-library/dom/dist/wait-for.js:163:27  ❯ src/app/(dashboard)/shopping-lists/prices/__tests__/page.test.tsx:61:11  59| it('loads and displays analytics', async () => {  60| render(<ShoppingListPricesPage />);  61| await waitFor(() => {  | ^  62| expect(screen.getByText('$150.00')).toB eInTheDocument();  63| expect(screen.getByText('Costco')).toBe InTheDocument(); ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[2/7]⎯  FAIL  src/app/(dashboard)/shopping-lists/prices/__tests__/page.test.tsx > ShoppingListPricesPage > handles fetch errors gracefully TestingLibraryElementError: Unable to find an element with the text: Analytics failed. This could be because the text is broken up by multiple elements. In this case, you can provide a function for your text matcher to make your matcher more flexible. Ignored nodes: comments, script, style  
  Error:  Analytics failed 
   Ignored nodes: comments, script, style    
  Error:  Analytics failed 
     ❯ Proxy.waitForWrapper ../../node_modules/@testing-library/dom/dist/wait-for.js:163:27  ❯ src/app/(dashboard)/shopping-lists/prices/__tests__/page.test.tsx:72:11  70| render(<ShoppingListPricesPage />);  71|  72| await waitFor(() => {  | ^  73| expect(screen.getByText('Analytics failed')).toBeInTheDocument();  74| }); ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[3/7]⎯  FAIL  src/app/(dashboard)/shopping-lists/[id]/__tests__/page.test.tsx > ShoppingListDetailPage > loads and displays the list TestingLibraryElementError: Found multiple elements with the text: Apple Here are the matching elements: Ignored nodes: comments, script, style  Apple  Ignored nodes: comments, script, style  Apple  (If this is intentional, then use the `*AllBy*` variant of the query (like `queryAllByText`, `getAllByText`, or `findAllByText`)). Ignored nodes: comments, script, style  
  Test List    active    Live Sync Channel Operational 
         Back to Hub         Check Lowest Store Options     
  
  Other / Misc       Apple 
   Qty:  5   pcs  
   ... Ignored nodes: comments, script, style    
  Test List    active    Live Sync Channel Operational 
         Back to Hub         Check Lowest Store Options     
  
  Other / Misc       Apple 
   Qty:  5   pcs   {  65| render(<ShoppingListDetailPage />);  66| await waitFor(() => {  | ^  67| expect(screen.getByText('Test List')).toBeInTheDocument();  68| expect(screen.getByText('Apple')).toBeI nTheDocument(); ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[4/7]⎯  FAIL  src/app/(dashboard)/shopping-lists/[id]/__tests__/page.test.tsx > ShoppingListDetailPage > toggles an item check TestingLibraryElementError: Found multiple elements with the text: Apple Here are the matching elements: Ignored nodes: comments, script, style  Apple 
 Ignored nodes: comments, script, style  Apple  (If this is intentional, then use the `*AllBy*` variant of the query (like `queryAllByText`, `getAllByText`, or `findAllByText`)). Ignored nodes: comments, script, style  
  Test List    active    Live Sync Channel Operational 
         Back to Hub         Check Lowest Store Options     
  
  Other / Misc       Apple 
   Qty:  5   pcs  
   ... Ignored nodes: comments, script, style    
  Test List    active    Live Sync Channel Operational 
         Back to Hub         Check Lowest Store Options     
  
  Other / Misc       Apple 
   Qty:  5   pcs   {  73| render(<ShoppingListDetailPage />);  74| await waitFor(() => expect(screen.getByText('Apple')).toBeInTheDoc…  | ^  75|  76| const checkbox = screen.getByRole('button', { name: /Toggle check … ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[5/7]⎯  FAIL  src/app/(dashboard)/shopping-lists/[id]/__tests__/page.test.tsx > ShoppingListDetailPage > adds a new item to the list TestingLibraryElementError: Found multiple elements with the text: Apple Here are the matching elements: Ignored nodes: comments, script, style  Apple 
 Ignored nodes: comments, script, style  Apple  (If this is intentional, then use the `*AllBy*` variant of the query (like `queryAllByText`, `getAllByText`, or `findAllByText`)). Ignored nodes: comments, script, style  
  Test List    active    Live Sync Channel Operational 
         Back to Hub         Check Lowest Store Options     
  
  Other / Misc       Apple 
   Qty:  5   pcs  
   ... Ignored nodes: comments, script, style    
  Test List    active    Live Sync Channel Operational 
         Back to Hub         Check Lowest Store Options     
  
  Other / Misc       Apple 
   Qty:  5   pcs  );  92| await waitFor(() => expect(screen.getByText('Apple')).toBeInTheDoc…  | ^  93|  94| const customInput = screen.getByPlaceholderText(/e.g., Generic Flo… ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[6/7]⎯  FAIL  src/app/(dashboard)/shopping-lists/[id]/__tests__/page.test.tsx > ShoppingListDetailPage > completes the trip and syncs to pantry TestingLibraryElementError: Found multiple elements with the text: Apple Here are the matching elements: Ignored nodes: comments, script, style  Apple 
 Ignored nodes: comments, script, style  Apple  (If this is intentional, then use the `*AllBy*` variant of the query (like `queryAllByText`, `getAllByText`, or `findAllByText`)). Ignored nodes: comments, script, style  
  Test List    active    Live Sync Channel Operational 
         Back to Hub         Check Lowest Store Options        Sync  1  items to Pantry     
  
  Other / Misc      
  Test List    active    Live Sync Channel Operational 
 
        Back to Hub         Check Lowest Store Options        Sync  1  items to Pantry  
   
  
  Other / Misc  ); 124| await waitFor(() => expect(screen.getByText('Apple')).toBeInTheDoc…  | ^ 125| 126| const syncBtn = screen.getByRole('button', { name: /Sync.*items to… ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[7/7]⎯