mirror of
https://github.com/pezkuwichain/pwap.git
synced 2026-04-22 06:47: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.
119 lines
2.2 KiB
TypeScript
119 lines
2.2 KiB
TypeScript
import React from 'react';
|
|
import { View, Text, StyleSheet, ViewStyle } from 'react-native';
|
|
import { KurdistanColors } from '../theme/colors';
|
|
|
|
interface BadgeProps {
|
|
label?: string;
|
|
children?: React.ReactNode;
|
|
variant?: 'primary' | 'secondary' | 'success' | 'warning' | 'danger' | 'info' | 'error';
|
|
size?: 'small' | 'medium' | 'large';
|
|
style?: ViewStyle;
|
|
icon?: React.ReactNode;
|
|
testID?: string;
|
|
}
|
|
|
|
/**
|
|
* Badge Component
|
|
* For tiki roles, status indicators, labels
|
|
*/
|
|
export const Badge: React.FC<BadgeProps> = ({
|
|
label,
|
|
children,
|
|
variant = 'primary',
|
|
size = 'medium',
|
|
style,
|
|
icon,
|
|
testID,
|
|
}) => {
|
|
const content = label || children;
|
|
|
|
return (
|
|
<View testID={testID} style={[styles.badge, styles[variant], styles[`${size}Size`], style]}>
|
|
{icon}
|
|
<Text style={[styles.text, styles[`${variant}Text`], styles[`${size}Text`]]}>
|
|
{content}
|
|
</Text>
|
|
</View>
|
|
);
|
|
};
|
|
|
|
const styles = StyleSheet.create({
|
|
badge: {
|
|
flexDirection: 'row',
|
|
alignItems: 'center',
|
|
borderRadius: 20,
|
|
paddingHorizontal: 12,
|
|
paddingVertical: 6,
|
|
gap: 4,
|
|
},
|
|
// Variants
|
|
primary: {
|
|
backgroundColor: `${KurdistanColors.kesk}15`,
|
|
},
|
|
secondary: {
|
|
backgroundColor: `${KurdistanColors.zer}15`,
|
|
},
|
|
success: {
|
|
backgroundColor: '#10B98115',
|
|
},
|
|
warning: {
|
|
backgroundColor: `${KurdistanColors.zer}20`,
|
|
},
|
|
danger: {
|
|
backgroundColor: `${KurdistanColors.sor}15`,
|
|
},
|
|
error: {
|
|
backgroundColor: `${KurdistanColors.sor}15`,
|
|
},
|
|
info: {
|
|
backgroundColor: '#3B82F615',
|
|
},
|
|
// Sizes
|
|
smallSize: {
|
|
paddingHorizontal: 8,
|
|
paddingVertical: 4,
|
|
},
|
|
mediumSize: {
|
|
paddingHorizontal: 12,
|
|
paddingVertical: 6,
|
|
},
|
|
largeSize: {
|
|
paddingHorizontal: 16,
|
|
paddingVertical: 8,
|
|
},
|
|
// Text styles
|
|
text: {
|
|
fontWeight: '600',
|
|
},
|
|
primaryText: {
|
|
color: KurdistanColors.kesk,
|
|
},
|
|
secondaryText: {
|
|
color: '#855D00',
|
|
},
|
|
successText: {
|
|
color: '#10B981',
|
|
},
|
|
warningText: {
|
|
color: '#D97706',
|
|
},
|
|
dangerText: {
|
|
color: KurdistanColors.sor,
|
|
},
|
|
errorText: {
|
|
color: KurdistanColors.sor,
|
|
},
|
|
infoText: {
|
|
color: '#3B82F6',
|
|
},
|
|
smallText: {
|
|
fontSize: 11,
|
|
},
|
|
mediumText: {
|
|
fontSize: 13,
|
|
},
|
|
largeText: {
|
|
fontSize: 15,
|
|
},
|
|
});
|