diff --git a/app/src/components/FilterBar.tsx b/app/src/components/FilterBar.tsx
index e02b151776..bf95b14a68 100644
--- a/app/src/components/FilterBar.tsx
+++ b/app/src/components/FilterBar.tsx
@@ -746,13 +746,15 @@ export function FilterBar({
return [
,
];
diff --git a/app/src/components/Footer.test.tsx b/app/src/components/Footer.test.tsx
index 650607de8a..9e6e78f042 100644
--- a/app/src/components/Footer.test.tsx
+++ b/app/src/components/Footer.test.tsx
@@ -8,8 +8,8 @@ describe('Footer', () => {
expect(screen.getByText('github')).toBeInTheDocument();
expect(screen.getByText('report')).toBeInTheDocument();
- expect(screen.getByText('about')).toBeInTheDocument();
- expect(screen.getByText('legal')).toBeInTheDocument();
+ expect(screen.getByText('.about()')).toBeInTheDocument();
+ expect(screen.getByText('.legal()')).toBeInTheDocument();
});
it('renders markus neusinger link', () => {
@@ -59,7 +59,7 @@ describe('Footer', () => {
render();
- await user.click(screen.getByText('about'));
+ await user.click(screen.getByText('.about()'));
expect(onTrackEvent).toHaveBeenCalledWith('internal_link', expect.objectContaining({ destination: 'about' }));
});
@@ -69,7 +69,7 @@ describe('Footer', () => {
render();
- await user.click(screen.getByText('legal'));
+ await user.click(screen.getByText('.legal()'));
expect(onTrackEvent).toHaveBeenCalledWith('internal_link', expect.objectContaining({ destination: 'legal' }));
});
@@ -107,14 +107,14 @@ describe('Footer', () => {
it('renders about as internal router link to /about', () => {
render();
- const aboutLink = screen.getByText('about').closest('a');
+ const aboutLink = screen.getByText('.about()').closest('a');
expect(aboutLink).toHaveAttribute('href', '/about');
});
it('renders legal as internal router link to /legal', () => {
render();
- const legalLink = screen.getByText('legal').closest('a');
+ const legalLink = screen.getByText('.legal()').closest('a');
expect(legalLink).toHaveAttribute('href', '/legal');
});
});
diff --git a/app/src/components/Footer.tsx b/app/src/components/Footer.tsx
index 2b960ae598..f0a630261a 100644
--- a/app/src/components/Footer.tsx
+++ b/app/src/components/Footer.tsx
@@ -91,18 +91,20 @@ export function Footer({ onTrackEvent, selectedSpec, selectedLibrary }: FooterPr
component={RouterLink}
to="/about"
onClick={trackInternal('about')}
+ aria-label="About anyplot"
sx={linkSx}
>
- about
+ .about()
·
- legal
+ .legal()
);
diff --git a/app/src/components/LibraryCard.tsx b/app/src/components/LibraryCard.tsx
index 0ed46e6704..95238bbe6c 100644
--- a/app/src/components/LibraryCard.tsx
+++ b/app/src/components/LibraryCard.tsx
@@ -24,6 +24,7 @@ export function LibraryCard({ name, count, onClick }: LibraryCardProps) {
-
- browse →
+ .explore()
);
diff --git a/app/src/components/RouteErrorBoundary.test.tsx b/app/src/components/RouteErrorBoundary.test.tsx
index 79ff70a56a..224f75610e 100644
--- a/app/src/components/RouteErrorBoundary.test.tsx
+++ b/app/src/components/RouteErrorBoundary.test.tsx
@@ -80,8 +80,8 @@ describe('RouteErrorBoundary', () => {
);
- expect(await screen.findByText('404')).toBeInTheDocument();
- expect(screen.getByText('page not found')).toBeInTheDocument();
+ expect(await screen.findByRole('heading', { level: 1, name: /page not found/i })).toBeInTheDocument();
+ expect(screen.getByText(/404 — no route matched/i)).toBeInTheDocument();
});
it('auto-reloads once on chunk load errors', async () => {
diff --git a/app/src/pages/MapPage.tsx b/app/src/pages/MapPage.tsx
index 09b202b67c..cc3314ddf3 100644
--- a/app/src/pages/MapPage.tsx
+++ b/app/src/pages/MapPage.tsx
@@ -825,13 +825,17 @@ export function MapPage() {
boxShadow: '0 4px 16px rgba(0,0,0,0.08)',
}}>
{searchMatches.length === 0 ? (
-
- no matches
+
+ results.empty()
) : (
searchMatches.map((s, i) => (
diff --git a/app/src/pages/NotFoundPage.test.tsx b/app/src/pages/NotFoundPage.test.tsx
index 57df3a6d1b..0c93ac3682 100644
--- a/app/src/pages/NotFoundPage.test.tsx
+++ b/app/src/pages/NotFoundPage.test.tsx
@@ -8,19 +8,19 @@ vi.mock('react-helmet-async', () => ({
}));
describe('NotFoundPage', () => {
- it('renders 404 heading', () => {
+ it('renders page.miss() heading', () => {
render();
- expect(screen.getByText('404')).toBeInTheDocument();
+ expect(screen.getByRole('heading', { level: 1, name: /page not found/i })).toBeInTheDocument();
});
- it('renders page not found message', () => {
+ it('renders 404 sub-message', () => {
render();
- expect(screen.getByText('page not found')).toBeInTheDocument();
+ expect(screen.getByText(/404 — no route matched/i)).toBeInTheDocument();
});
it('renders link back to home', () => {
render();
- const link = screen.getByText('back to anyplot.ai');
- expect(link.closest('a')).toHaveAttribute('href', '/');
+ const link = screen.getByRole('link', { name: /go home/i });
+ expect(link).toHaveAttribute('href', '/');
});
});
diff --git a/app/src/pages/NotFoundPage.tsx b/app/src/pages/NotFoundPage.tsx
index 14766aadf2..f4a3fb0672 100644
--- a/app/src/pages/NotFoundPage.tsx
+++ b/app/src/pages/NotFoundPage.tsx
@@ -15,19 +15,29 @@ export function NotFoundPage() {
- 404
+ page.miss()
- page not found
+ 404 — no route matched
- back to anyplot.ai
+
+ page.home()
+
>
diff --git a/app/src/pages/SpecPage.test.tsx b/app/src/pages/SpecPage.test.tsx
index 63f87d61a1..3e5dd5fd0d 100644
--- a/app/src/pages/SpecPage.test.tsx
+++ b/app/src/pages/SpecPage.test.tsx
@@ -125,9 +125,9 @@ describe('SpecPage', () => {
render();
await waitFor(() => {
- expect(screen.getByText('404')).toBeInTheDocument();
+ expect(screen.getByRole('heading', { level: 1, name: /page not found/i })).toBeInTheDocument();
});
- expect(screen.getByText('page not found')).toBeInTheDocument();
+ expect(screen.getByText(/404 — no route matched/i)).toBeInTheDocument();
});
it('handles fetch error', async () => {