diff --git a/client/src/components/Admin/AuditLogPanel.test.tsx b/client/src/components/Admin/AuditLogPanel.test.tsx index a6e73507..4d076f0e 100644 --- a/client/src/components/Admin/AuditLogPanel.test.tsx +++ b/client/src/components/Admin/AuditLogPanel.test.tsx @@ -47,7 +47,7 @@ describe('AuditLogPanel', () => { }), ); render(); - expect(screen.getByText('Loading…')).toBeInTheDocument(); + expect(screen.getByText('Loading...')).toBeInTheDocument(); expect(document.querySelector('table')).not.toBeInTheDocument(); }); diff --git a/client/src/components/Admin/GitHubPanel.test.tsx b/client/src/components/Admin/GitHubPanel.test.tsx index 429bd042..617bdd88 100644 --- a/client/src/components/Admin/GitHubPanel.test.tsx +++ b/client/src/components/Admin/GitHubPanel.test.tsx @@ -55,7 +55,7 @@ describe('GitHubPanel', () => { it('FE-ADMIN-GH-002: all support links have correct href and target=_blank', async () => { render(); - await waitFor(() => expect(screen.queryByText('Loading…')).not.toBeInTheDocument()); + await waitFor(() => expect(screen.queryByText('Loading...')).not.toBeInTheDocument()); const kofi = screen.getByText('Ko-fi').closest('a')!; expect(kofi).toHaveAttribute('href', 'https://ko-fi.com/mauriceboe'); @@ -272,7 +272,7 @@ describe('GitHubPanel', () => { it('FE-ADMIN-GH-016: support card hover effects fire without error', async () => { render(); - await waitFor(() => expect(screen.queryByText('Loading…')).not.toBeInTheDocument()); + await waitFor(() => expect(screen.queryByText('Loading...')).not.toBeInTheDocument()); const kofiLink = screen.getByText('Ko-fi').closest('a')!; fireEvent.mouseEnter(kofiLink); diff --git a/client/src/components/Settings/NotificationsTab.test.tsx b/client/src/components/Settings/NotificationsTab.test.tsx index ef894d34..b3b808a4 100644 --- a/client/src/components/Settings/NotificationsTab.test.tsx +++ b/client/src/components/Settings/NotificationsTab.test.tsx @@ -35,14 +35,14 @@ describe('NotificationsTab', () => { http.get('/api/notifications/preferences', () => new Promise(() => {})), ); render(); - expect(screen.getByText('Loading…')).toBeInTheDocument(); + expect(screen.getByText('Loading...')).toBeInTheDocument(); }); it('FE-COMP-NOTIFICATIONS-002: renders the matrix after preferences load', async () => { render(); // The event label is translated; fallback is the key itself await waitFor(() => { - expect(screen.queryByText('Loading…')).not.toBeInTheDocument(); + expect(screen.queryByText('Loading...')).not.toBeInTheDocument(); }); // Should render a toggle (ToggleSwitch renders a button) const toggles = await screen.findAllByRole('button'); @@ -52,7 +52,7 @@ describe('NotificationsTab', () => { it('FE-COMP-NOTIFICATIONS-003: renders channel header labels', async () => { render(); await waitFor(() => { - expect(screen.queryByText('Loading…')).not.toBeInTheDocument(); + expect(screen.queryByText('Loading...')).not.toBeInTheDocument(); }); // inapp channel header should appear (either translated or raw key) const headers = screen.getAllByText(/inapp|in.?app/i); @@ -72,7 +72,7 @@ describe('NotificationsTab', () => { ); render(); await waitFor(() => { - expect(screen.queryByText('Loading…')).not.toBeInTheDocument(); + expect(screen.queryByText('Loading...')).not.toBeInTheDocument(); }); // Should show noChannels message (translated or key) const noChannelEl = await screen.findByText(/no.*channel|noChannels/i); @@ -97,7 +97,7 @@ describe('NotificationsTab', () => { ); render(); await waitFor(() => { - expect(screen.queryByText('Loading…')).not.toBeInTheDocument(); + expect(screen.queryByText('Loading...')).not.toBeInTheDocument(); }); // A dash should appear for non-implemented combos const dashes = await screen.findAllByText('—'); @@ -116,7 +116,7 @@ describe('NotificationsTab', () => { render(); await waitFor(() => { - expect(screen.queryByText('Loading…')).not.toBeInTheDocument(); + expect(screen.queryByText('Loading...')).not.toBeInTheDocument(); }); // minimalMatrix has inapp:true and email:false for trip_invite @@ -144,7 +144,7 @@ describe('NotificationsTab', () => { render(); await waitFor(() => { - expect(screen.queryByText('Loading…')).not.toBeInTheDocument(); + expect(screen.queryByText('Loading...')).not.toBeInTheDocument(); }); // Find the inapp toggle for trip_invite — it starts as "on" @@ -156,8 +156,8 @@ describe('NotificationsTab', () => { // After the error, the toggle should revert back (still rendered in the DOM) await waitFor(() => { - expect(screen.queryByText('Loading…')).not.toBeInTheDocument(); - expect(screen.queryByText('Saving…')).not.toBeInTheDocument(); + expect(screen.queryByText('Loading...')).not.toBeInTheDocument(); + expect(screen.queryByText('Saving...')).not.toBeInTheDocument(); }); // The toggle should still be present (not removed on error) @@ -178,20 +178,20 @@ describe('NotificationsTab', () => { render(); await waitFor(() => { - expect(screen.queryByText('Loading…')).not.toBeInTheDocument(); + expect(screen.queryByText('Loading...')).not.toBeInTheDocument(); }); const toggleButtons = await screen.findAllByRole('button'); await user.click(toggleButtons[0]); await waitFor(() => { - expect(screen.getByText('Saving…')).toBeInTheDocument(); + expect(screen.getByText('Saving...')).toBeInTheDocument(); }); resolveRequest(); await waitFor(() => { - expect(screen.queryByText('Saving…')).not.toBeInTheDocument(); + expect(screen.queryByText('Saving...')).not.toBeInTheDocument(); }); }); @@ -209,7 +209,7 @@ describe('NotificationsTab', () => { render(); await waitFor(() => { - expect(screen.queryByText('Loading…')).not.toBeInTheDocument(); + expect(screen.queryByText('Loading...')).not.toBeInTheDocument(); }); // Webhook URL input should be present @@ -238,7 +238,7 @@ describe('NotificationsTab', () => { render(); await waitFor(() => { - expect(screen.queryByText('Loading…')).not.toBeInTheDocument(); + expect(screen.queryByText('Loading...')).not.toBeInTheDocument(); }); const input = await screen.findByRole('textbox'); @@ -265,7 +265,7 @@ describe('NotificationsTab', () => { render(); await waitFor(() => { - expect(screen.queryByText('Loading…')).not.toBeInTheDocument(); + expect(screen.queryByText('Loading...')).not.toBeInTheDocument(); }); const input = await screen.findByRole('textbox'); @@ -297,7 +297,7 @@ describe('NotificationsTab', () => { render(); await waitFor(() => { - expect(screen.queryByText('Loading…')).not.toBeInTheDocument(); + expect(screen.queryByText('Loading...')).not.toBeInTheDocument(); }); await screen.findByRole('textbox'); @@ -330,7 +330,7 @@ describe('NotificationsTab', () => { ); await waitFor(() => { - expect(screen.queryByText('Loading…')).not.toBeInTheDocument(); + expect(screen.queryByText('Loading...')).not.toBeInTheDocument(); }); const input = await screen.findByRole('textbox'); @@ -371,7 +371,7 @@ describe('NotificationsTab', () => { ); await waitFor(() => { - expect(screen.queryByText('Loading…')).not.toBeInTheDocument(); + expect(screen.queryByText('Loading...')).not.toBeInTheDocument(); }); const input = await screen.findByRole('textbox'); diff --git a/client/src/components/Trips/TripFormModal.test.tsx b/client/src/components/Trips/TripFormModal.test.tsx index 9c1042a8..ed5bbac9 100644 --- a/client/src/components/Trips/TripFormModal.test.tsx +++ b/client/src/components/Trips/TripFormModal.test.tsx @@ -284,6 +284,6 @@ describe('TripFormModal', () => { const submitBtns = screen.getAllByText('Create New Trip'); const submitBtn = submitBtns.find(el => el.closest('button'))!; await user.click(submitBtn.closest('button')!); - await waitFor(() => expect(screen.getByText('Saving…')).toBeInTheDocument()); + await waitFor(() => expect(screen.getByText('Saving...')).toBeInTheDocument()); }); }); diff --git a/client/src/i18n/translations/en.ts b/client/src/i18n/translations/en.ts index f34f9475..13593e11 100644 --- a/client/src/i18n/translations/en.ts +++ b/client/src/i18n/translations/en.ts @@ -5,7 +5,7 @@ const en: Record = { 'common.delete': 'Delete', 'common.edit': 'Edit', 'common.add': 'Add', - 'common.loading': 'Loading…', + 'common.loading': 'Loading...', 'common.import': 'Import', 'common.error': 'Error', 'common.unknownError': 'Unknown error', @@ -27,7 +27,7 @@ const en: Record = { 'common.name': 'Name', 'common.email': 'Email', 'common.password': 'Password', - 'common.saving': 'Saving…', + 'common.saving': 'Saving...', 'common.justNow': 'just now', 'common.hoursAgo': '{count}h ago', 'common.daysAgo': '{count}d ago',