Onboarding

This commit is contained in:
2026-04-22 21:37:52 +02:00
parent c16fee77af
commit 3e9f863121
21 changed files with 2524 additions and 184 deletions

View File

@@ -0,0 +1,112 @@
import React from 'react';
import { fireEvent, render } from '@testing-library/react-native';
import SearchScreen from '../../app/(tabs)/search';
const mockPush = jest.fn();
jest.mock('expo-router', () => ({
useRouter: () => ({
push: mockPush,
}),
}));
jest.mock('react-native-safe-area-context', () => {
const React = require('react');
const { View } = require('react-native');
return {
SafeAreaView: ({ children }: { children: React.ReactNode }) => <View>{children}</View>,
};
});
jest.mock('../../context/AppContext', () => ({
useApp: () => ({
plants: [],
isDarkMode: false,
colorPalette: 'forest',
language: 'de',
billingSummary: { credits: { available: 5 } },
refreshBillingSummary: jest.fn().mockResolvedValue(undefined),
t: {
searchTitle: 'Suche',
searchPlaceholder: 'Pflanzen suchen...',
catCareEasy: 'Pflegeleicht',
catLowLight: 'Wenig Licht',
catBrightLight: 'Helles Licht',
catSun: 'Sonnig',
catPetFriendly: 'Tierfreundlich',
catAirPurifier: 'Luftreiniger',
catHighHumidity: 'Hohe Luftfeuchte',
catHanging: 'Hängend',
catPatterned: 'Gemustert',
catFlowering: 'Blühend',
catSucculents: 'Sukkulenten',
catTree: 'Bäume',
catLarge: 'Groß',
catMedicinal: 'Heilpflanzen',
lexiconTitle: 'Pflanzen-Lexikon',
lexiconDesc: 'Lexikon Beschreibung',
browseLexicon: 'Im Lexikon stöbern',
},
}),
}));
jest.mock('../../constants/Colors', () => ({
useColors: () => ({
background: '#ffffff',
text: '#111111',
textSecondary: '#444444',
textMuted: '#666666',
cardBg: '#ffffff',
cardBorder: '#dddddd',
cardShadow: '#000000',
chipBorder: '#dddddd',
successTint: '#dff5e3',
success: '#2d8a4b',
infoTint: '#d9f1ff',
info: '#2469a7',
primaryTint: '#e8f2ea',
primaryDark: '#1f5a37',
warningTint: '#fff3d6',
warning: '#b7791f',
dangerTint: '#fde3e3',
danger: '#b91c1c',
surfaceStrong: '#eeeeee',
surface: '#f5f5f5',
heroButtonBorder: '#cad7cc',
iconOnImage: '#ffffff',
textOnImage: '#ffffff',
heroButton: '#dce9df',
primary: '#2f855a',
onPrimary: '#ffffff',
fabShadow: '#000000',
}),
}));
jest.mock('../../components/ThemeBackdrop', () => ({
ThemeBackdrop: () => null,
}));
jest.mock('../../services/plantDatabaseService', () => ({
PlantDatabaseService: {
searchPlants: jest.fn().mockResolvedValue([]),
},
}));
describe('SearchScreen category navigation', () => {
beforeEach(() => {
mockPush.mockClear();
});
it('navigates to lexicon with categoryId only when a category chip is tapped', () => {
const { getByText } = render(<SearchScreen />);
fireEvent.press(getByText('Pflegeleicht'));
expect(mockPush).toHaveBeenCalledWith({
pathname: '/lexicon',
params: {
categoryId: 'easy',
},
});
});
});