Skip to content

Commit a4a7eab

Browse files
Add unit tests (#278)
1 parent 54d89c9 commit a4a7eab

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

45 files changed

+7524
-690
lines changed

package-lock.json

Lines changed: 574 additions & 473 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 22 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -43,50 +43,52 @@
4343
"@radix-ui/react-toggle": "^1.1.10",
4444
"@radix-ui/react-toggle-group": "^1.1.11",
4545
"@radix-ui/react-tooltip": "^1.2.8",
46-
"@tailwindcss/vite": "^4.1.17",
47-
"@tanstack/react-query": "^5.90.12",
48-
"@tanstack/react-router": "^1.139.14",
49-
"@tanstack/zod-adapter": "^1.139.14",
46+
"@tailwindcss/vite": "^4.1.18",
47+
"@tanstack/react-query": "^5.90.13",
48+
"@tanstack/react-router": "^1.144.0",
49+
"@tanstack/zod-adapter": "^1.144.0",
5050
"@turf/turf": "^7.3.1",
51-
"@watergis/maplibre-gl-terradraw": "^1.9.6",
51+
"@watergis/maplibre-gl-terradraw": "^1.9.8",
5252
"axios": "^1.13.2",
5353
"class-variance-authority": "^0.7.1",
5454
"clsx": "^2.1.1",
5555
"cmdk": "^1.1.1",
5656
"d3": "^7.9.0",
5757
"date-fns": "^4.1.0",
58-
"lucide-react": "^0.556.0",
59-
"maplibre-gl": "^5.14.0",
58+
"lucide-react": "^0.562.0",
59+
"maplibre-gl": "^5.15.0",
6060
"next-themes": "^0.4.6",
6161
"react": "^18.3.1",
6262
"react-dom": "^18.3.1",
6363
"react-map-gl": "^8.1.0",
6464
"sonner": "^2.0.7",
6565
"tailwind-merge": "^3.4.0",
66-
"tailwindcss": "^4.1.17",
66+
"tailwindcss": "^4.1.18",
6767
"throttle-debounce": "^5.0.2",
6868
"zod": "^3.25.76",
6969
"zustand": "^5.0.9"
7070
},
7171
"devDependencies": {
7272
"@playwright/test": "^1.57.0",
7373
"@tanstack/eslint-plugin-query": "^5.91.2",
74-
"@tanstack/eslint-plugin-router": "^1.139.0",
75-
"@tanstack/react-devtools": "^0.8.2",
74+
"@tanstack/eslint-plugin-router": "^1.141.0",
75+
"@tanstack/react-devtools": "^0.8.6",
7676
"@tanstack/react-query-devtools": "^5.91.1",
77-
"@tanstack/react-router-devtools": "^1.139.15",
77+
"@tanstack/react-router-devtools": "^1.144.0",
7878
"@testing-library/dom": "^10.4.1",
79-
"@testing-library/react": "^16.3.0",
79+
"@testing-library/jest-dom": "^6.9.1",
80+
"@testing-library/react": "^16.3.1",
81+
"@testing-library/user-event": "^14.6.1",
8082
"@types/d3": "^7.4.3",
8183
"@types/eslint-plugin-jsx-a11y": "^6.10.1",
82-
"@types/node": "^24.10.1",
84+
"@types/node": "^24.10.4",
8385
"@types/react-dom": "^18.3.7",
8486
"@types/throttle-debounce": "^5.0.2",
8587
"@types/turf": "^3.5.32",
86-
"@vitejs/plugin-react": "^5.1.1",
87-
"@vitest/coverage-v8": "^4.0.15",
88+
"@vitejs/plugin-react": "^5.1.2",
89+
"@vitest/coverage-v8": "^4.0.16",
8890
"dotenv": "^17.2.3",
89-
"eslint": "^9.39.1",
91+
"eslint": "^9.39.2",
9092
"eslint-config-prettier": "^10.1.8",
9193
"eslint-import-resolver-typescript": "^4.4.4",
9294
"eslint-plugin-check-file": "^3.3.1",
@@ -97,15 +99,15 @@
9799
"eslint-plugin-react-hooks": "^7.0.1",
98100
"gh-pages": "^6.3.0",
99101
"husky": "^9.1.7",
100-
"jsdom": "^27.2.0",
102+
"jsdom": "^27.4.0",
101103
"lint-staged": "^16.2.7",
102104
"prettier": "^3.7.4",
103105
"tw-animate-css": "^1.4.0",
104106
"typescript": "^5.9.3",
105-
"typescript-eslint": "^8.48.1",
106-
"vite": "^7.2.6",
107+
"typescript-eslint": "^8.50.1",
108+
"vite": "^7.3.0",
107109
"vite-plugin-svgr": "^4.5.0",
108-
"vitest": "^4.0.15"
110+
"vitest": "^4.0.16"
109111
},
110112
"lint-staged": {
111113
"*.{js,jsx,ts,tsx}": "eslint --fix",

src/app.spec.tsx

Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
import { describe, it, expect, vi } from 'vitest';
2+
import { render, screen } from '@testing-library/react';
3+
import { App } from './app';
4+
5+
vi.mock('react-map-gl/maplibre', () => ({
6+
MapProvider: ({ children }: { children: React.ReactNode }) => (
7+
<div data-testid="map-provider">{children}</div>
8+
),
9+
}));
10+
11+
vi.mock('./components/map', () => ({
12+
MapComponent: () => <div data-testid="map-component">MapComponent</div>,
13+
}));
14+
15+
vi.mock('./components/route-planner', () => ({
16+
RoutePlanner: () => <div data-testid="route-planner">RoutePlanner</div>,
17+
}));
18+
19+
vi.mock('./components/settings-panel/settings-panel', () => ({
20+
SettingsPanel: () => <div data-testid="settings-panel">SettingsPanel</div>,
21+
}));
22+
23+
vi.mock('@/components/ui/sonner', () => ({
24+
Toaster: ({ position, duration }: { position: string; duration: number }) => (
25+
<div
26+
data-testid="toaster"
27+
data-position={position}
28+
data-duration={duration}
29+
>
30+
Toaster
31+
</div>
32+
),
33+
}));
34+
35+
describe('App', () => {
36+
it('should render without crashing', () => {
37+
expect(() => render(<App />)).not.toThrow();
38+
});
39+
40+
it('should render MapProvider as wrapper', () => {
41+
render(<App />);
42+
expect(screen.getByTestId('map-provider')).toBeInTheDocument();
43+
});
44+
45+
it('should render MapComponent', () => {
46+
render(<App />);
47+
expect(screen.getByTestId('map-component')).toBeInTheDocument();
48+
});
49+
50+
it('should render RoutePlanner', () => {
51+
render(<App />);
52+
expect(screen.getByTestId('route-planner')).toBeInTheDocument();
53+
});
54+
55+
it('should render SettingsPanel', () => {
56+
render(<App />);
57+
expect(screen.getByTestId('settings-panel')).toBeInTheDocument();
58+
});
59+
60+
it('should render Toaster with correct props', () => {
61+
render(<App />);
62+
const toaster = screen.getByTestId('toaster');
63+
expect(toaster).toBeInTheDocument();
64+
expect(toaster).toHaveAttribute('data-position', 'bottom-center');
65+
expect(toaster).toHaveAttribute('data-duration', '5000');
66+
});
67+
68+
it('should render all components inside MapProvider', () => {
69+
render(<App />);
70+
const mapProvider = screen.getByTestId('map-provider');
71+
expect(mapProvider).toContainElement(screen.getByTestId('map-component'));
72+
expect(mapProvider).toContainElement(screen.getByTestId('route-planner'));
73+
expect(mapProvider).toContainElement(screen.getByTestId('settings-panel'));
74+
expect(mapProvider).toContainElement(screen.getByTestId('toaster'));
75+
});
76+
});

0 commit comments

Comments
 (0)