mirror of
https://github.com/pezkuwichain/pwap.git
synced 2026-05-06 08:57:55 +00:00
c01abc79df
Added complete testing infrastructure with 160 passing tests across 34 suites: ✅ Test Infrastructure Setup: - Created babel.config.cjs with Expo preset - Configured jest.config.cjs with proper transformIgnorePatterns - Added jest.setup.cjs with comprehensive mocks - Added jest.setup.before.cjs for pre-setup configuration - Created __mocks__/ directory for custom mocks ✅ Component Tests (10 test files): - Badge.test.tsx (13 tests) - 100% coverage - Button.test.tsx (14 tests) - 100% statements - Card.test.tsx (7 tests) - Input.test.tsx (10 tests) - LoadingSkeleton.test.tsx (10 tests) - 93% coverage - TokenIcon.test.tsx (7 tests) - 100% coverage - BottomSheet.test.tsx (9 tests) - index.test.ts (1 test) ✅ Context Tests (4 test files): - AuthContext.test.tsx (7 tests) - PolkadotContext.test.tsx (10 tests) - BiometricAuthContext.test.tsx (11 tests) - LanguageContext.test.tsx (9 tests) ✅ Screen Tests (16 test files): - All major screens tested with provider wrappers - WelcomeScreen, SignIn/SignUp, Dashboard - Wallet, Swap, Staking, Governance - P2P, NFT Gallery, Education, Forum - BeCitizen, Security, Lock, Referral, Profile ✅ Utility Tests: - i18n/index.test.ts (4 tests) - lib/supabase.test.ts (3 tests) - theme/colors.test.ts (2 tests) ✅ App Integration Test: - App.test.tsx (3 tests) Coverage Metrics: - Statements: 37.74% (target: 35%) - Branches: 23.94% (target: 20%) - Functions: 28.53% (target: 25%) - Lines: 39.73% (target: 35%) All coverage thresholds met! ✅ Test Results: - 34/34 test suites passing - 160/160 tests passing - 17 snapshots Key Improvements: - Fixed ProfileScreen.tsx import bug (react-native import) - Added comprehensive mocks for Polkadot, Expo, Supabase - Created test-utils.tsx for provider wrappers - All tests use proper async/await patterns - Proper cleanup with React Testing Library Production Ready: Test infrastructure is complete and extensible.
84 lines
2.6 KiB
TypeScript
84 lines
2.6 KiB
TypeScript
import React from 'react';
|
|
import { render, fireEvent } from '@testing-library/react-native';
|
|
import { Input } from '../Input';
|
|
|
|
describe('Input', () => {
|
|
it('should render with placeholder', () => {
|
|
const { getByPlaceholderText } = render(<Input placeholder="Enter text" />);
|
|
expect(getByPlaceholderText('Enter text')).toBeTruthy();
|
|
});
|
|
|
|
it('should handle value changes', () => {
|
|
const onChangeText = jest.fn();
|
|
const { getByPlaceholderText } = render(
|
|
<Input placeholder="Enter text" onChangeText={onChangeText} />
|
|
);
|
|
|
|
const input = getByPlaceholderText('Enter text');
|
|
fireEvent.changeText(input, 'New value');
|
|
expect(onChangeText).toHaveBeenCalledWith('New value');
|
|
});
|
|
|
|
it('should render with label', () => {
|
|
const { getByText } = render(<Input label="Username" placeholder="Enter username" />);
|
|
expect(getByText('Username')).toBeTruthy();
|
|
});
|
|
|
|
it('should render error message', () => {
|
|
const { getByText } = render(
|
|
<Input placeholder="Email" error="Invalid email" />
|
|
);
|
|
expect(getByText('Invalid email')).toBeTruthy();
|
|
});
|
|
|
|
it('should be disabled when disabled prop is true', () => {
|
|
const onChangeText = jest.fn();
|
|
const { getByPlaceholderText } = render(
|
|
<Input placeholder="Disabled" disabled onChangeText={onChangeText} />
|
|
);
|
|
|
|
const input = getByPlaceholderText('Disabled');
|
|
expect(input.props.editable).toBe(false);
|
|
});
|
|
|
|
it('should handle secure text entry', () => {
|
|
const { getByPlaceholderText } = render(
|
|
<Input placeholder="Password" secureTextEntry />
|
|
);
|
|
|
|
const input = getByPlaceholderText('Password');
|
|
expect(input.props.secureTextEntry).toBe(true);
|
|
});
|
|
|
|
it('should apply custom styles', () => {
|
|
const customStyle = { borderWidth: 2 };
|
|
const { getByTestId } = render(
|
|
<Input placeholder="Styled" style={customStyle} testID="input" />
|
|
);
|
|
expect(getByTestId('input')).toBeTruthy();
|
|
});
|
|
|
|
it('should handle testID', () => {
|
|
const { getByTestId } = render(<Input placeholder="Test" testID="input" />);
|
|
expect(getByTestId('input')).toBeTruthy();
|
|
});
|
|
|
|
it('should handle multiline', () => {
|
|
const { getByPlaceholderText } = render(
|
|
<Input placeholder="Multiline" multiline numberOfLines={4} />
|
|
);
|
|
|
|
const input = getByPlaceholderText('Multiline');
|
|
expect(input.props.multiline).toBe(true);
|
|
});
|
|
|
|
it('should handle keyboard type', () => {
|
|
const { getByPlaceholderText } = render(
|
|
<Input placeholder="Email" keyboardType="email-address" />
|
|
);
|
|
|
|
const input = getByPlaceholderText('Email');
|
|
expect(input.props.keyboardType).toBe('email-address');
|
|
});
|
|
});
|