1814 lines
86 KiB
Plaintext
1814 lines
86 KiB
Plaintext
|
|
> ruixin-website-react@0.1.0 test:unit
|
|
> jest --coverage --coverageReporters=json --coverageReporters=text
|
|
|
|
PASS src/lib/animations.test.tsx
|
|
Animation Variants
|
|
inkVariants
|
|
✓ should have correct hidden state (1303 ms)
|
|
✓ should have correct visible state (2 ms)
|
|
✓ should have correct transition configuration (1 ms)
|
|
sealStampVariants
|
|
✓ should have correct hidden state (1 ms)
|
|
✓ should have correct visible state (1 ms)
|
|
✓ should use spring animation
|
|
brushStrokeVariants
|
|
✓ should have correct hidden state (1 ms)
|
|
✓ should have correct visible state (1 ms)
|
|
fadeUpVariants
|
|
✓ should have correct hidden state (1 ms)
|
|
✓ should have correct visible state (1 ms)
|
|
staggerContainerVariants
|
|
✓ should have staggerChildren configured (2 ms)
|
|
staggerItemVariants
|
|
✓ should have correct hidden state (8 ms)
|
|
✓ should have correct visible state
|
|
Animation Components
|
|
InkReveal
|
|
✓ should render children correctly (60 ms)
|
|
✓ should apply custom className (10 ms)
|
|
✓ should use inkVariants (8 ms)
|
|
SealStamp
|
|
✓ should render children correctly (7 ms)
|
|
✓ should apply custom className (33 ms)
|
|
FadeUp
|
|
✓ should render children correctly (4 ms)
|
|
✓ should apply custom duration (5 ms)
|
|
✓ should apply delay prop (3 ms)
|
|
StaggerContainer
|
|
✓ should render children correctly (27 ms)
|
|
✓ should apply custom staggerDelay (5 ms)
|
|
StaggerItem
|
|
✓ should render children correctly (3 ms)
|
|
RippleButton
|
|
✓ should render children correctly (6 ms)
|
|
✓ should handle click events (36 ms)
|
|
✓ should apply custom className (3 ms)
|
|
InkCard
|
|
✓ should render children correctly (2 ms)
|
|
✓ should apply custom hoverScale (6 ms)
|
|
CountUp
|
|
✓ should render with prefix and suffix (7 ms)
|
|
✓ should apply custom className (4 ms)
|
|
Typewriter
|
|
✓ should render component correctly (17 ms)
|
|
✓ should apply custom className (7 ms)
|
|
FloatingElement
|
|
✓ should render children correctly (2 ms)
|
|
✓ should apply custom amplitude (8 ms)
|
|
PulseElement
|
|
✓ should render children correctly (3 ms)
|
|
✓ should apply custom scale (4 ms)
|
|
GradientText
|
|
✓ should render children correctly (76 ms)
|
|
✓ should apply custom colors (77 ms)
|
|
SplitText
|
|
✓ should render text correctly (6 ms)
|
|
✓ should apply custom className (4 ms)
|
|
GlitchText
|
|
✓ should render text correctly (3 ms)
|
|
✓ should apply custom className (3 ms)
|
|
MagneticButton
|
|
✓ should render children correctly (2 ms)
|
|
✓ should handle click events (2 ms)
|
|
BlurReveal
|
|
✓ should render children correctly (2 ms)
|
|
✓ should apply custom className (1 ms)
|
|
WaveText
|
|
✓ should render text correctly (6 ms)
|
|
ShimmerButton
|
|
✓ should render children correctly (5 ms)
|
|
✓ should handle click events (3 ms)
|
|
Animation Hooks
|
|
useParallax
|
|
✓ should be defined
|
|
useSmoothSpring
|
|
✓ should be defined
|
|
SVG Components
|
|
InkDropSVG
|
|
✓ should render SVG correctly (4 ms)
|
|
✓ should apply custom className (2 ms)
|
|
InkSplash
|
|
✓ should render SVG correctly (2 ms)
|
|
✓ should apply custom color (1 ms)
|
|
✓ should apply custom size (2 ms)
|
|
|
|
PASS src/components/ui/sheet.test.tsx
|
|
Sheet
|
|
Rendering
|
|
✓ should render sheet trigger (169 ms)
|
|
✓ should render sheet content when open (318 ms)
|
|
✓ should render sheet title (75 ms)
|
|
✓ should render sheet description (31 ms)
|
|
✓ should render sheet footer (60 ms)
|
|
Interaction
|
|
✓ should open sheet on trigger click (24 ms)
|
|
✓ should close sheet on close button click (64 ms)
|
|
Sides
|
|
✓ should render right side by default (29 ms)
|
|
✓ should render left side (70 ms)
|
|
✓ should render top side (73 ms)
|
|
✓ should render bottom side (38 ms)
|
|
Styling
|
|
✓ should apply custom className to content (28 ms)
|
|
✓ should apply custom className to header (83 ms)
|
|
✓ should apply custom className to footer (24 ms)
|
|
Close Button
|
|
✓ should show close button by default (23 ms)
|
|
✓ should hide close button when showCloseButton is false (183 ms)
|
|
|
|
PASS src/db/mutations.test.ts
|
|
database mutations
|
|
user mutations
|
|
✓ should insert new user (2 ms)
|
|
✓ should update user (1 ms)
|
|
✓ should delete user (1 ms)
|
|
content mutations
|
|
✓ should insert new content
|
|
✓ should update content (1 ms)
|
|
✓ should delete content
|
|
✓ should publish content
|
|
site config mutations
|
|
✓ should insert new config (1 ms)
|
|
✓ should update config
|
|
✓ should upsert config
|
|
batch operations
|
|
✓ should insert multiple users (1 ms)
|
|
✓ should insert multiple content items
|
|
error handling
|
|
✓ should handle duplicate key error (12 ms)
|
|
✓ should handle foreign key constraint error (77 ms)
|
|
|
|
PASS src/components/sections/contact-section.test.tsx
|
|
ContactSection
|
|
Rendering
|
|
✓ should render contact section (315 ms)
|
|
✓ should render contact form (39 ms)
|
|
✓ should render submit button (177 ms)
|
|
✓ should render company contact information (40 ms)
|
|
✓ should render work hours card (30 ms)
|
|
Form Validation
|
|
✓ should show error for invalid name (171 ms)
|
|
✓ should show error for invalid phone (195 ms)
|
|
✓ should show error for invalid email (467 ms)
|
|
✓ should show error for short message (113 ms)
|
|
Accessibility
|
|
✓ should have proper form labels (68 ms)
|
|
✓ should have proper ARIA attributes (82 ms)
|
|
CSRF Protection
|
|
✓ should generate CSRF token on mount (24 ms)
|
|
|
|
PASS src/components/layout/mobile-tab-bar.test.tsx
|
|
MobileTabBar
|
|
Rendering
|
|
✓ should render tab bar (100 ms)
|
|
✓ should render all tabs (49 ms)
|
|
✓ should render tab icons (46 ms)
|
|
Active State
|
|
✓ should highlight active tab (84 ms)
|
|
✓ should show active indicator (19 ms)
|
|
Navigation Links
|
|
✓ should have correct href for home (11 ms)
|
|
✓ should have correct href for services (10 ms)
|
|
✓ should have correct href for products (6 ms)
|
|
✓ should have correct href for news (12 ms)
|
|
✓ should have correct href for contact (9 ms)
|
|
Accessibility
|
|
✓ should have navigation role (33 ms)
|
|
✓ should have accessible tab labels (36 ms)
|
|
Styling
|
|
✓ should have fixed positioning (26 ms)
|
|
✓ should have responsive visibility (16 ms)
|
|
✓ should have backdrop blur (31 ms)
|
|
✓ should have proper height (22 ms)
|
|
|
|
PASS src/components/layout/mobile-menu.test.tsx
|
|
MobileMenu
|
|
Rendering
|
|
✓ should render menu button (71 ms)
|
|
✓ should render menu icon when closed (13 ms)
|
|
✓ should not render menu panel when closed (6 ms)
|
|
Opening Menu
|
|
✓ should open menu when button clicked (21 ms)
|
|
✓ should change button label when open (37 ms)
|
|
✓ should render navigation items (58 ms)
|
|
Closing Menu
|
|
✓ should close menu when button clicked again (27 ms)
|
|
✓ should close menu when overlay clicked (43 ms)
|
|
Keyboard Navigation
|
|
✓ should open menu with Enter key (35 ms)
|
|
✓ should open menu with Space key (32 ms)
|
|
✓ should close menu with Escape key (21 ms)
|
|
Accessibility
|
|
✓ should have aria-expanded attribute (5 ms)
|
|
✓ should update aria-expanded when open (15 ms)
|
|
✓ should have aria-controls attribute (4 ms)
|
|
✓ should have navigation role (5 ms)
|
|
Styling
|
|
✓ should have responsive visibility (3 ms)
|
|
✓ should apply custom className (4 ms)
|
|
|
|
PASS src/components/sections/products-section.test.tsx (5.072 s)
|
|
ProductsSection
|
|
Rendering
|
|
✓ should render products section (174 ms)
|
|
✓ should render section heading (233 ms)
|
|
✓ should render section description (84 ms)
|
|
Product Cards
|
|
✓ should render product cards (66 ms)
|
|
✓ should display products in grid layout (170 ms)
|
|
✓ should render product categories (40 ms)
|
|
✓ should render product features (172 ms)
|
|
Custom Solution Section
|
|
✓ should render custom solution section (84 ms)
|
|
✓ should render custom solution description (39 ms)
|
|
✓ should render contact button (311 ms)
|
|
✓ should link to contact page (218 ms)
|
|
Accessibility
|
|
✓ should have region role (84 ms)
|
|
✓ should have aria-labelledby attribute (43 ms)
|
|
✓ should have accessible heading (64 ms)
|
|
Styling
|
|
✓ should have background color (54 ms)
|
|
✓ should have proper padding (20 ms)
|
|
✓ should have decorative background elements (84 ms)
|
|
|
|
PASS src/components/ui/animated-card.test.tsx
|
|
Animated Cards
|
|
InkCard
|
|
✓ should render ink card (93 ms)
|
|
✓ should apply custom className (3 ms)
|
|
✓ should handle mouse move (5 ms)
|
|
✓ should handle hover events (4 ms)
|
|
GeometricCard
|
|
✓ should render geometric card (3 ms)
|
|
✓ should apply custom className (1 ms)
|
|
✓ should have corner decorations (1 ms)
|
|
FlipCard
|
|
✓ should render flip card (2 ms)
|
|
✓ should flip on click (3 ms)
|
|
✓ should apply custom className (2 ms)
|
|
TiltCard
|
|
✓ should render tilt card (7 ms)
|
|
✓ should apply custom className (2 ms)
|
|
✓ should handle mouse move (3 ms)
|
|
✓ should handle mouse leave (17 ms)
|
|
GlowCard
|
|
✓ should render glow card (54 ms)
|
|
✓ should apply custom className (2 ms)
|
|
✓ should handle mouse move (46 ms)
|
|
ExpandCard
|
|
✓ should render expand card (10 ms)
|
|
✓ should apply custom className (6 ms)
|
|
✓ should expand on click (16 ms)
|
|
|
|
PASS src/components/ui/input.test.tsx
|
|
Input
|
|
Rendering
|
|
✓ should render input element (13 ms)
|
|
✓ should render with label (8 ms)
|
|
✓ should render required indicator when required (19 ms)
|
|
✓ should render error message (7 ms)
|
|
✓ should render with placeholder (13 ms)
|
|
✓ should render with custom data-testid (2 ms)
|
|
Types
|
|
✓ should render text input by default (11 ms)
|
|
✓ should render email input (6 ms)
|
|
✓ should render password input (14 ms)
|
|
✓ should render tel input (8 ms)
|
|
User Interaction
|
|
✓ should handle user input (55 ms)
|
|
✓ should handle onChange event (23 ms)
|
|
✓ should handle onBlur event (56 ms)
|
|
✓ should handle onFocus event (13 ms)
|
|
Disabled State
|
|
✓ should be disabled when disabled prop is true (10 ms)
|
|
✓ should not accept input when disabled (3 ms)
|
|
Accessibility
|
|
✓ should have aria-required when required (4 ms)
|
|
✓ should have aria-invalid when error exists (9 ms)
|
|
✓ should have aria-describedby when error exists (8 ms)
|
|
✓ should have proper label association (2 ms)
|
|
✓ should have role="alert" on error message (4 ms)
|
|
Custom Styling
|
|
✓ should apply custom className (10 ms)
|
|
✓ should have error styling when error exists (3 ms)
|
|
Ref Forwarding
|
|
✓ should forward ref to input element (12 ms)
|
|
|
|
PASS src/components/sections/cases-section.test.tsx
|
|
CasesSection
|
|
Rendering
|
|
✓ should render cases section (34 ms)
|
|
✓ should render section heading (30 ms)
|
|
✓ should render section description (46 ms)
|
|
✓ should render case cards (11 ms)
|
|
✓ should render client names (11 ms)
|
|
✓ should render industry badges (29 ms)
|
|
✓ should render results (17 ms)
|
|
✓ should render view more button (14 ms)
|
|
Accessibility
|
|
✓ should have section id (43 ms)
|
|
✓ should have region role (19 ms)
|
|
✓ should have aria-labelledby (37 ms)
|
|
Styling
|
|
✓ should have correct background (38 ms)
|
|
✓ should have container (19 ms)
|
|
|
|
PASS src/components/ui/dropdown-menu.test.tsx
|
|
DropdownMenu
|
|
Rendering
|
|
✓ should render dropdown menu trigger (65 ms)
|
|
✓ should render menu items (158 ms)
|
|
✓ should render menu label (78 ms)
|
|
✓ should render separator (78 ms)
|
|
Interaction
|
|
✓ should open menu on trigger click (6 ms)
|
|
✓ should close menu on item click (112 ms)
|
|
DropdownMenuShortcut
|
|
✓ should render shortcut text (57 ms)
|
|
Styling
|
|
✓ should apply custom className to trigger (4 ms)
|
|
✓ should apply custom className to content (85 ms)
|
|
✓ should apply custom className to item (60 ms)
|
|
|
|
PASS src/components/ui/dialog.test.tsx
|
|
Dialog Components
|
|
Dialog
|
|
✓ should render dialog root (3 ms)
|
|
DialogTrigger
|
|
✓ should render trigger button (5 ms)
|
|
DialogContent
|
|
✓ should render content with children (6 ms)
|
|
✓ should apply custom className (2 ms)
|
|
DialogHeader
|
|
✓ should render header with children (1 ms)
|
|
✓ should apply custom className
|
|
DialogFooter
|
|
✓ should render footer with children (1 ms)
|
|
✓ should apply custom className (1 ms)
|
|
DialogTitle
|
|
✓ should render title text (1 ms)
|
|
✓ should render as h2 element (1 ms)
|
|
✓ should apply custom className (1 ms)
|
|
DialogDescription
|
|
✓ should render description text (1 ms)
|
|
✓ should apply custom className (10 ms)
|
|
Dialog Composition
|
|
✓ should render complete dialog structure (11 ms)
|
|
Accessibility
|
|
✓ should have accessible title (3 ms)
|
|
✓ should support custom ARIA attributes (3 ms)
|
|
|
|
PASS src/components/sections/news-section.test.tsx
|
|
NewsSection
|
|
Rendering
|
|
✓ should render news section (72 ms)
|
|
✓ should render section heading (64 ms)
|
|
✓ should render section description (34 ms)
|
|
News Cards
|
|
✓ should render news cards (15 ms)
|
|
✓ should display news in grid layout (20 ms)
|
|
✓ should render news categories (32 ms)
|
|
✓ should render news dates (30 ms)
|
|
Call to Action
|
|
✓ should render view all news link (22 ms)
|
|
✓ should link to news page (19 ms)
|
|
✓ should render read more links (12 ms)
|
|
Accessibility
|
|
✓ should have region role (18 ms)
|
|
✓ should have aria-labelledby attribute (10 ms)
|
|
✓ should have accessible heading (11 ms)
|
|
Styling
|
|
✓ should have background color (6 ms)
|
|
✓ should have proper padding (11 ms)
|
|
✓ should have container styling (9 ms)
|
|
|
|
PASS src/components/layout/footer.test.tsx
|
|
Footer
|
|
Rendering
|
|
✓ should render footer component (24 ms)
|
|
✓ should render logo (13 ms)
|
|
✓ should render company description (14 ms)
|
|
✓ should render quick links section (8 ms)
|
|
✓ should render service items section (8 ms)
|
|
✓ should render contact information section (8 ms)
|
|
✓ should render navigation links (10 ms)
|
|
✓ should render service links (13 ms)
|
|
✓ should render contact details (18 ms)
|
|
Icons
|
|
✓ should render contact icons (6 ms)
|
|
Legal Links
|
|
✓ should render privacy policy link (11 ms)
|
|
✓ should render terms of service link (11 ms)
|
|
✓ should render ICP filing info (8 ms)
|
|
✓ should render police filing info (12 ms)
|
|
Copyright
|
|
✓ should render copyright with current year (10 ms)
|
|
✓ should render company name in copyright (13 ms)
|
|
Accessibility
|
|
✓ should have proper role attribute (24 ms)
|
|
✓ should have proper link hrefs (12 ms)
|
|
QR Code Section
|
|
✓ should render QR code image (6 ms)
|
|
✓ should render QR code description (11 ms)
|
|
|
|
PASS src/components/ui/textarea.test.tsx
|
|
Textarea
|
|
Rendering
|
|
✓ should render textarea element (29 ms)
|
|
✓ should render with label (9 ms)
|
|
✓ should render required indicator when required (8 ms)
|
|
✓ should render error message (7 ms)
|
|
✓ should render with placeholder (2 ms)
|
|
✓ should render with custom data-testid (2 ms)
|
|
✓ should render with default rows (7 ms)
|
|
User Interaction
|
|
✓ should handle user input (179 ms)
|
|
✓ should handle onChange event (25 ms)
|
|
✓ should handle onBlur event (29 ms)
|
|
✓ should handle onFocus event (22 ms)
|
|
✓ should handle multiline input (63 ms)
|
|
Disabled State
|
|
✓ should be disabled when disabled prop is true (5 ms)
|
|
✓ should not accept input when disabled (7 ms)
|
|
Accessibility
|
|
✓ should have aria-required when required (9 ms)
|
|
✓ should have aria-invalid when error exists (5 ms)
|
|
✓ should have aria-describedby when error exists (3 ms)
|
|
✓ should have proper label association (2 ms)
|
|
✓ should have role="alert" on error message (5 ms)
|
|
Custom Styling
|
|
✓ should apply custom className (7 ms)
|
|
✓ should have error styling when error exists (5 ms)
|
|
Ref Forwarding
|
|
✓ should forward ref to textarea element (2 ms)
|
|
Value Handling
|
|
✓ should display controlled value (6 ms)
|
|
✓ should display defaultValue (17 ms)
|
|
MaxLength
|
|
✓ should respect maxLength attribute (7 ms)
|
|
|
|
PASS src/app/api/contact/route.test.ts
|
|
/api/contact
|
|
✓ should handle POST request with valid data (21 ms)
|
|
✓ should validate required fields (1 ms)
|
|
✓ should validate email format (1 ms)
|
|
✓ should reject honeypot field (1 ms)
|
|
✓ should reject submission too fast (1 ms)
|
|
✓ should validate math captcha
|
|
✓ should handle Resend API error (1 ms)
|
|
✓ should handle JSON parsing error (1 ms)
|
|
✓ should accept valid submission with phone (1 ms)
|
|
✓ should accept valid submission with math captcha
|
|
✓ should handle submission after minimum time
|
|
|
|
PASS src/components/ui/toast.test.tsx
|
|
Toast Component
|
|
Rendering
|
|
✓ should render toast with message (8 ms)
|
|
✓ should render with success type by default (12 ms)
|
|
✓ should render with error type (5 ms)
|
|
✓ should render with info type (8 ms)
|
|
✓ should render close button (7 ms)
|
|
Auto-close
|
|
✓ should auto-close after default duration (3000ms) (73 ms)
|
|
✓ should auto-close after custom duration (36 ms)
|
|
✓ should cleanup timer on unmount (6 ms)
|
|
Manual Close
|
|
✓ should close when close button clicked (16 ms)
|
|
Accessibility
|
|
✓ should have alert role (8 ms)
|
|
✓ should have aria-live attribute (11 ms)
|
|
✓ should have accessible close button (4 ms)
|
|
Data Attributes
|
|
✓ should support custom data-testid (4 ms)
|
|
Icons
|
|
✓ should render success icon for success type (6 ms)
|
|
✓ should render error icon for error type (6 ms)
|
|
✓ should render info icon for info type (7 ms)
|
|
Styling
|
|
✓ should apply success background color (6 ms)
|
|
✓ should apply error background color (8 ms)
|
|
✓ should apply info background color (10 ms)
|
|
|
|
PASS src/components/ui/error-boundary.test.tsx
|
|
ErrorBoundary
|
|
Normal Rendering
|
|
✓ should render children when no error (6 ms)
|
|
✓ should not show error UI when no error (2 ms)
|
|
Error Handling
|
|
✓ should catch errors and display fallback UI (22 ms)
|
|
✓ should display default error message (4 ms)
|
|
✓ should display custom fallback if provided (4 ms)
|
|
✓ should log error to console (17 ms)
|
|
Error Recovery
|
|
✓ should have retry button (24 ms)
|
|
Accessibility
|
|
✓ should have accessible error icon (3 ms)
|
|
✓ should have accessible retry button (5 ms)
|
|
Styling
|
|
✓ should have centered layout (4 ms)
|
|
✓ should have error icon with red background (4 ms)
|
|
✓ should have styled retry button (5 ms)
|
|
|
|
PASS src/components/ui/button.test.tsx
|
|
Button Component
|
|
Rendering
|
|
✓ should render button with text (12 ms)
|
|
✓ should render as a button element by default (4 ms)
|
|
✓ should apply default variant styles (3 ms)
|
|
Variants
|
|
✓ should apply secondary variant styles (2 ms)
|
|
✓ should apply outline variant styles (4 ms)
|
|
✓ should apply ghost variant styles (4 ms)
|
|
✓ should apply link variant styles (5 ms)
|
|
✓ should apply destructive variant styles (3 ms)
|
|
Sizes
|
|
✓ should apply default size styles (4 ms)
|
|
✓ should apply small size styles (10 ms)
|
|
✓ should apply large size styles (3 ms)
|
|
✓ should apply icon size styles (4 ms)
|
|
Accessibility
|
|
✓ should be focusable (7 ms)
|
|
✓ should have proper disabled state (10 ms)
|
|
✓ should have focus visible styles (3 ms)
|
|
Custom Props
|
|
✓ should apply custom className (3 ms)
|
|
✓ should pass through additional props (14 ms)
|
|
✓ should handle click events (4 ms)
|
|
Touch Support
|
|
✓ should have touch manipulation (2 ms)
|
|
✓ should have minimum touch target size (3 ms)
|
|
|
|
PASS src/components/sections/services-section.test.tsx
|
|
ServicesSection
|
|
Rendering
|
|
✓ should render services section (28 ms)
|
|
✓ should render section heading (56 ms)
|
|
✓ should render section description (23 ms)
|
|
Service Cards
|
|
✓ should render service cards (16 ms)
|
|
✓ should display services in grid layout (17 ms)
|
|
✓ should render service icons (12 ms)
|
|
Call to Action
|
|
✓ should render view all services button (72 ms)
|
|
✓ should link to services page (33 ms)
|
|
Accessibility
|
|
✓ should have section with id (15 ms)
|
|
✓ should have aria-labelledby attribute (14 ms)
|
|
✓ should have accessible heading (36 ms)
|
|
Styling
|
|
✓ should have white background (7 ms)
|
|
✓ should have proper padding (24 ms)
|
|
✓ should have decorative background elements (20 ms)
|
|
|
|
PASS src/lib/auth/permissions.test.ts
|
|
permissions
|
|
PERMISSIONS constant
|
|
✓ should have admin permissions (3 ms)
|
|
✓ should have editor permissions (1 ms)
|
|
✓ should have viewer permissions (1 ms)
|
|
✓ should have config permissions
|
|
✓ should have users permissions (1 ms)
|
|
✓ should have logs permissions
|
|
hasPermission
|
|
admin role
|
|
✓ should allow all content actions
|
|
✓ should allow config actions (1 ms)
|
|
✓ should allow all users actions
|
|
✓ should allow logs read
|
|
editor role
|
|
✓ should allow content actions except delete (1 ms)
|
|
✓ should allow config read only (1 ms)
|
|
✓ should not allow users actions
|
|
✓ should allow logs read
|
|
viewer role
|
|
✓ should only allow content read (1 ms)
|
|
✓ should allow config read only (1 ms)
|
|
✓ should not allow users actions
|
|
✓ should not allow logs actions (1 ms)
|
|
edge cases
|
|
✓ should return false for invalid role
|
|
✓ should return false for invalid resource (5 ms)
|
|
✓ should return false for invalid action (1 ms)
|
|
✓ should handle null role
|
|
✓ should handle undefined resource
|
|
✓ should handle empty action string
|
|
✓ should handle case sensitivity for roles
|
|
✓ should handle case sensitivity for resources
|
|
✓ should handle case sensitivity for actions
|
|
✓ should handle undefined role
|
|
✓ should handle numeric role
|
|
✓ should handle object role
|
|
Type Exports
|
|
✓ should export Role type (1 ms)
|
|
✓ should export Resource type
|
|
✓ should export Action type
|
|
|
|
PASS src/components/sections/about-section.test.tsx
|
|
AboutSection
|
|
Rendering
|
|
✓ should render about section (33 ms)
|
|
✓ should render section heading (68 ms)
|
|
✓ should render company slogan (32 ms)
|
|
✓ should render company mission (26 ms)
|
|
Statistics
|
|
✓ should render statistics cards (10 ms)
|
|
✓ should display statistics in grid layout (33 ms)
|
|
Call to Action
|
|
✓ should render learn more button (32 ms)
|
|
✓ should link to about page (27 ms)
|
|
Accessibility
|
|
✓ should have region role (13 ms)
|
|
✓ should have aria-labelledby attribute (7 ms)
|
|
✓ should have accessible heading (15 ms)
|
|
Styling
|
|
✓ should have background color (6 ms)
|
|
✓ should have proper padding (7 ms)
|
|
✓ should have decorative background pattern (7 ms)
|
|
|
|
PASS src/lib/auth/session.test.ts
|
|
session management
|
|
createSession
|
|
✓ should create session with user data (1 ms)
|
|
✓ should create session with createdAt timestamp (1 ms)
|
|
✓ should create session with 24 hour expiration
|
|
✓ should create session without optional role (1 ms)
|
|
isSessionValid
|
|
✓ should return true for valid session
|
|
✓ should return false for expired session
|
|
✓ should return false for session with zero expiration time (1 ms)
|
|
✓ should return true for session with 1ms remaining (5 ms)
|
|
getSessionAge
|
|
✓ should return age of session in milliseconds
|
|
✓ should increase over time (13 ms)
|
|
getSessionTimeRemaining
|
|
✓ should return positive time for valid session
|
|
✓ should return approximately 24 hours for new session (1 ms)
|
|
✓ should return 0 for expired session
|
|
✓ should return 0 for session at exact expiration time
|
|
isSessionExpired
|
|
✓ should return false for valid session
|
|
✓ should return true for expired session
|
|
✓ should return true for session at exact expiration time (1 ms)
|
|
✓ should return false for session with 1ms remaining
|
|
createSessionWithCustomExpiration
|
|
✓ should create session with custom expiration time
|
|
✓ should create session with negative expiration time
|
|
✓ should preserve user data
|
|
session lifecycle
|
|
✓ should track session from creation to expiration (154 ms)
|
|
✓ should have consistent age and time remaining
|
|
session data integrity
|
|
✓ should maintain session data immutability (1 ms)
|
|
✓ should handle empty role gracefully (1 ms)
|
|
✓ should handle special characters in userId
|
|
|
|
PASS src/components/ui/card.test.tsx
|
|
Card Components
|
|
Card
|
|
✓ should render card with children (35 ms)
|
|
✓ should have proper data-slot attribute (17 ms)
|
|
✓ should apply default styles (4 ms)
|
|
✓ should apply custom className (3 ms)
|
|
✓ should have hover effects (2 ms)
|
|
CardHeader
|
|
✓ should render header with children (4 ms)
|
|
✓ should have proper data-slot attribute (1 ms)
|
|
✓ should apply default styles (2 ms)
|
|
CardTitle
|
|
✓ should render title text (1 ms)
|
|
✓ should have proper data-slot attribute (5 ms)
|
|
✓ should apply default styles (9 ms)
|
|
CardDescription
|
|
✓ should render description text (2 ms)
|
|
✓ should have proper data-slot attribute (2 ms)
|
|
✓ should apply default styles (2 ms)
|
|
CardAction
|
|
✓ should render action content (2 ms)
|
|
✓ should have proper data-slot attribute (1 ms)
|
|
✓ should apply default styles (2 ms)
|
|
CardContent
|
|
✓ should render content (2 ms)
|
|
✓ should have proper data-slot attribute (2 ms)
|
|
✓ should apply default styles (2 ms)
|
|
CardFooter
|
|
✓ should render footer content (2 ms)
|
|
✓ should have proper data-slot attribute (1 ms)
|
|
✓ should apply default styles (1 ms)
|
|
Card Composition
|
|
✓ should render complete card structure (10 ms)
|
|
✓ should allow nested components (3 ms)
|
|
Accessibility
|
|
✓ should be accessible as a div element (1 ms)
|
|
✓ should support custom ARIA attributes (11 ms)
|
|
|
|
PASS src/components/ui/touch-button.test.tsx
|
|
TouchButton
|
|
Rendering
|
|
✓ should render button with text (6 ms)
|
|
✓ should render button element (113 ms)
|
|
✓ should apply custom className (2 ms)
|
|
Variants
|
|
✓ should render primary variant by default (1 ms)
|
|
✓ should render secondary variant (3 ms)
|
|
✓ should render ghost variant (1 ms)
|
|
Sizes
|
|
✓ should render small size (2 ms)
|
|
✓ should render medium size by default (8 ms)
|
|
✓ should render large size (3 ms)
|
|
Full Width
|
|
✓ should not be full width by default (1 ms)
|
|
✓ should be full width when fullWidth is true (4 ms)
|
|
Disabled State
|
|
✓ should not be disabled by default (4 ms)
|
|
✓ should be disabled when disabled prop is true (19 ms)
|
|
Touch Events
|
|
✓ should handle touch start (4 ms)
|
|
✓ should handle touch end (4 ms)
|
|
✓ should handle touch cancel (2 ms)
|
|
Click Events
|
|
✓ should handle click events (39 ms)
|
|
|
|
PASS src/lib/upload.test.ts
|
|
Upload Module
|
|
getFileExtension
|
|
✓ should return correct extension for JPEG (193 ms)
|
|
✓ should return correct extension for PNG
|
|
✓ should return correct extension for PDF (1 ms)
|
|
✓ should return empty string for unknown MIME type (1 ms)
|
|
isAllowedType
|
|
✓ should return true for allowed image types (1 ms)
|
|
✓ should return true for allowed document types
|
|
✓ should return false for disallowed types
|
|
✓ should return false for unknown MIME types
|
|
✓ should handle null type (1 ms)
|
|
✓ should handle undefined type
|
|
✓ should handle empty string type
|
|
✓ should handle invalid category (1 ms)
|
|
validateFileSignature
|
|
✓ should validate JPEG signature correctly
|
|
✓ should validate PNG signature correctly
|
|
✓ should validate PDF signature correctly (2 ms)
|
|
✓ should return false for invalid JPEG signature
|
|
✓ should return true for SVG files
|
|
✓ should return true for unknown MIME types (1 ms)
|
|
sanitizeFileName
|
|
✓ should remove special characters
|
|
✓ should convert to lowercase (1 ms)
|
|
✓ should replace multiple dots
|
|
✓ should preserve Chinese characters (1 ms)
|
|
✓ should preserve underscores and hyphens
|
|
isDangerousFile
|
|
✓ should detect .exe files as dangerous (1 ms)
|
|
✓ should detect .bat files as dangerous
|
|
✓ should detect .php files as dangerous (1 ms)
|
|
✓ should detect .js files as dangerous
|
|
✓ should not flag safe files as dangerous (1 ms)
|
|
✓ should be case insensitive
|
|
getDatePath
|
|
✓ should return correct date path format (3 ms)
|
|
✓ should pad month and day with zeros
|
|
uploadFile
|
|
✓ should upload a valid image file successfully (1 ms)
|
|
✓ should reject files exceeding size limit (77 ms)
|
|
✓ should reject disallowed file types (1 ms)
|
|
✓ should reject dangerous file extensions (1 ms)
|
|
✓ should reject files with mismatched signatures (2 ms)
|
|
✓ should create upload directory if it does not exist (1 ms)
|
|
✓ should include userId in upload result (2 ms)
|
|
✓ should sanitize file name
|
|
deleteFile
|
|
✓ should delete existing file successfully (2 ms)
|
|
✓ should return false for non-existent file (1 ms)
|
|
✓ should return false on deletion error
|
|
getFileInfo
|
|
✓ should return file information for existing file (1 ms)
|
|
✓ should return null for non-existent file
|
|
Security Tests
|
|
✓ should prevent path traversal attacks (1 ms)
|
|
✓ should prevent double extension attacks
|
|
✓ should validate file signatures to prevent MIME type spoofing (1 ms)
|
|
✓ should reject all dangerous file extensions (1 ms)
|
|
|
|
PASS src/app/api/auth/[...nextauth]/route.test.ts
|
|
/api/auth/[...nextauth]
|
|
GET handler
|
|
✓ should export GET handler (2 ms)
|
|
✓ should call auth GET handler (1 ms)
|
|
POST handler
|
|
✓ should export POST handler
|
|
✓ should call auth POST handler (1 ms)
|
|
|
|
PASS src/components/sections/hero-section.test.tsx
|
|
HeroSection
|
|
Rendering
|
|
✓ should render hero section (61 ms)
|
|
✓ should render company name (41 ms)
|
|
✓ should render features (48 ms)
|
|
Statistics
|
|
✓ should render statistics section (99 ms)
|
|
Accessibility
|
|
✓ should have proper ARIA labels (23 ms)
|
|
✓ should have accessible buttons (37 ms)
|
|
|
|
PASS src/components/ui/insight-card.test.tsx
|
|
InsightCard
|
|
Rendering
|
|
✓ should render insight card (32 ms)
|
|
✓ should render title (82 ms)
|
|
✓ should render excerpt (8 ms)
|
|
✓ should render category badge (5 ms)
|
|
✓ should render read time (26 ms)
|
|
✓ should render published date (6 ms)
|
|
✓ should render read more link (2 ms)
|
|
Image
|
|
✓ should render image when imageUrl is provided (3 ms)
|
|
✓ should not render image when imageUrl is not provided (5 ms)
|
|
Featured
|
|
✓ should not be featured by default (5 ms)
|
|
✓ should be featured when featured prop is true (15 ms)
|
|
Styling
|
|
✓ should have article element (4 ms)
|
|
✓ should have border class (11 ms)
|
|
✓ should have rounded class (5 ms)
|
|
|
|
PASS src/components/layout/header.test.tsx
|
|
Header
|
|
Rendering
|
|
✓ should render header component (30 ms)
|
|
✓ should render logo (6 ms)
|
|
✓ should render desktop navigation (4 ms)
|
|
✓ should render navigation items (91 ms)
|
|
✓ should render consult button (13 ms)
|
|
✓ should render mobile menu button (14 ms)
|
|
Mobile Menu
|
|
✓ should toggle mobile menu on button click (89 ms)
|
|
✓ should show X icon when menu is open (29 ms)
|
|
✓ should show Menu icon when menu is closed (5 ms)
|
|
Accessibility
|
|
✓ should have proper ARIA attributes on menu button (6 ms)
|
|
✓ should update aria-expanded when menu is toggled (32 ms)
|
|
✓ should have proper navigation role (5 ms)
|
|
Navigation
|
|
✓ should have correct href for navigation items (5 ms)
|
|
|
|
PASS src/lib/email-templates.test.ts
|
|
Email Templates
|
|
generateNotificationEmail
|
|
✓ should generate valid HTML email (67 ms)
|
|
✓ should include customer name (17 ms)
|
|
✓ should include customer phone (1 ms)
|
|
✓ should include customer email (1 ms)
|
|
✓ should include message content (1 ms)
|
|
✓ should include company name (1 ms)
|
|
✓ should include submit time (1 ms)
|
|
✓ should include mailto link
|
|
✓ should include company address in footer (2 ms)
|
|
✓ should have proper email title (2 ms)
|
|
✓ should include responsive meta tag (1 ms)
|
|
✓ should include UTF-8 charset (5 ms)
|
|
✓ should handle long messages (2 ms)
|
|
✓ should handle special characters in name
|
|
✓ should handle special characters in message (1 ms)
|
|
generateConfirmationEmail
|
|
✓ should generate valid HTML email (1 ms)
|
|
✓ should include customer name
|
|
✓ should include message content (1 ms)
|
|
✓ should include company name (5 ms)
|
|
✓ should include company contact information (1 ms)
|
|
✓ should include expected response time
|
|
✓ should include working hours (1 ms)
|
|
✓ should have proper email title
|
|
✓ should include success icon
|
|
✓ should include current year in footer (1 ms)
|
|
✓ should include responsive meta tag
|
|
✓ should include UTF-8 charset
|
|
✓ should handle long messages (1 ms)
|
|
✓ should handle special characters in name
|
|
Email Template Structure
|
|
✓ should have consistent styling in notification email
|
|
✓ should have consistent styling in confirmation email
|
|
✓ should use brand colors in notification email (1 ms)
|
|
✓ should use brand colors in confirmation email
|
|
✓ should have proper container structure in notification email
|
|
✓ should have proper container structure in confirmation email (1 ms)
|
|
Edge Cases
|
|
✓ should handle empty message
|
|
✓ should handle empty name
|
|
✓ should handle email with special characters
|
|
✓ should handle phone number with spaces (1 ms)
|
|
✓ should handle unicode characters in message
|
|
Performance Tests
|
|
✓ should generate notification email quickly (9 ms)
|
|
✓ should generate confirmation email quickly (2 ms)
|
|
|
|
PASS src/db/queries.test.ts
|
|
database queries
|
|
user queries
|
|
✓ should query user by id (2 ms)
|
|
✓ should query user by email (1 ms)
|
|
✓ should return null for non-existent user
|
|
✓ should query users by role (1 ms)
|
|
content queries
|
|
✓ should query content by id
|
|
✓ should query content by slug (1 ms)
|
|
✓ should query published content (6 ms)
|
|
✓ should query content by type
|
|
✓ should query content with multiple conditions (2 ms)
|
|
site config queries
|
|
✓ should query config by key (1 ms)
|
|
✓ should query config by category
|
|
✓ should return null for non-existent config (1 ms)
|
|
query ordering
|
|
✓ should order content by created date (1 ms)
|
|
|
|
PASS src/components/sections/insights-section.test.tsx
|
|
InsightsSection
|
|
Rendering
|
|
✓ should render insights section (41 ms)
|
|
✓ should render section heading (32 ms)
|
|
✓ should render section description (25 ms)
|
|
✓ should render insight cards (21 ms)
|
|
✓ should render insight titles (6 ms)
|
|
✓ should render insight categories (7 ms)
|
|
✓ should render view all button (4 ms)
|
|
Accessibility
|
|
✓ should have section id (15 ms)
|
|
Styling
|
|
✓ should have correct background (22 ms)
|
|
✓ should have container (17 ms)
|
|
✓ should have grid layout (11 ms)
|
|
|
|
PASS src/components/sections/testimonials-section.test.tsx
|
|
TestimonialsSection
|
|
Rendering
|
|
✓ should render testimonials section (39 ms)
|
|
✓ should render section heading (40 ms)
|
|
✓ should render section description (5 ms)
|
|
✓ should render testimonial cards (5 ms)
|
|
✓ should render testimonial authors (5 ms)
|
|
✓ should render testimonial quotes (20 ms)
|
|
Accessibility
|
|
✓ should have section id (11 ms)
|
|
Styling
|
|
✓ should have correct background (4 ms)
|
|
✓ should have container (3 ms)
|
|
✓ should have grid layout (18 ms)
|
|
|
|
PASS src/components/ui/back-button.test.tsx
|
|
BackButton
|
|
Rendering
|
|
✓ should render back button (10 ms)
|
|
✓ should render button text (3 ms)
|
|
✓ should render arrow icon (3 ms)
|
|
Interaction
|
|
✓ should call router.back() when clicked (7 ms)
|
|
Styling
|
|
✓ should have ghost variant (3 ms)
|
|
✓ should have small size (2 ms)
|
|
|
|
PASS src/components/ui/optimized-image.test.tsx
|
|
OptimizedImage
|
|
Rendering
|
|
✓ should render optimized image (31 ms)
|
|
✓ should render with alt text (32 ms)
|
|
✓ should apply custom className (4 ms)
|
|
✓ should apply container className (2 ms)
|
|
Loading States
|
|
✓ should handle onLoad event (3 ms)
|
|
✓ should handle onError event (7 ms)
|
|
✓ should show error state on error (20 ms)
|
|
Object Fit
|
|
✓ should apply cover object fit by default (3 ms)
|
|
✓ should apply contain object fit (3 ms)
|
|
✓ should apply fill object fit (6 ms)
|
|
✓ should apply none object fit (8 ms)
|
|
✓ should apply scale-down object fit (6 ms)
|
|
Fill Mode
|
|
✓ should render in fill mode (3 ms)
|
|
Priority
|
|
✓ should handle priority prop (1 ms)
|
|
|
|
PASS src/components/ui/testimonial-card.test.tsx
|
|
TestimonialCard
|
|
Rendering
|
|
✓ should render testimonial card (12 ms)
|
|
✓ should render author name (5 ms)
|
|
✓ should render position and company (4 ms)
|
|
✓ should render quote with quotes (3 ms)
|
|
Rating
|
|
✓ should render 5 stars by default (9 ms)
|
|
✓ should render custom rating (4 ms)
|
|
✓ should not render stars when rating is 0 (3 ms)
|
|
Avatar
|
|
✓ should render avatar when avatarUrl is provided (2 ms)
|
|
✓ should not render avatar when avatarUrl is not provided (6 ms)
|
|
Styling
|
|
✓ should have correct card classes (12 ms)
|
|
✓ should have border class (7 ms)
|
|
✓ should have background class (13 ms)
|
|
|
|
PASS src/components/ui/page-header.test.tsx
|
|
PageHeader
|
|
Rendering
|
|
✓ should render page header (8 ms)
|
|
✓ should render title (1 ms)
|
|
✓ should render description when provided (1 ms)
|
|
✓ should not render description when not provided (13 ms)
|
|
✓ should render badge when provided (23 ms)
|
|
✓ should not render badge when not provided (2 ms)
|
|
Effects
|
|
✓ should render ink background (2 ms)
|
|
✓ should render data particle flow (3 ms)
|
|
✓ should render subtle dots (1 ms)
|
|
Styling
|
|
✓ should have container class (3 ms)
|
|
✓ should apply custom className (5 ms)
|
|
|
|
PASS src/components/ui/glass-card.test.tsx
|
|
GlassCard
|
|
Rendering
|
|
✓ should render glass card (18 ms)
|
|
✓ should render children (4 ms)
|
|
✓ should apply custom className (3 ms)
|
|
Variants
|
|
✓ should render default variant (14 ms)
|
|
✓ should render elevated variant (1 ms)
|
|
✓ should render outline variant (3 ms)
|
|
✓ should render glow variant (2 ms)
|
|
Styling
|
|
✓ should have rounded class (1 ms)
|
|
✓ should have border class
|
|
✓ should have backdrop-blur class
|
|
Forward Ref
|
|
✓ should forward ref (2 ms)
|
|
|
|
PASS src/components/ui/loading-skeleton.test.tsx
|
|
Loading Skeleton Components
|
|
Skeleton
|
|
✓ should render skeleton element (39 ms)
|
|
✓ should apply default styles (1 ms)
|
|
✓ should apply custom className (13 ms)
|
|
CardSkeleton
|
|
✓ should render card skeleton (53 ms)
|
|
✓ should have correct structure (2 ms)
|
|
ServiceCardSkeleton
|
|
✓ should render service card skeleton (3 ms)
|
|
✓ should have full height (5 ms)
|
|
CaseCardSkeleton
|
|
✓ should render case card skeleton (2 ms)
|
|
✓ should have image placeholder (1 ms)
|
|
ProductCardSkeleton
|
|
✓ should render product card skeleton (4 ms)
|
|
✓ should have flex column layout (5 ms)
|
|
NewsCardSkeleton
|
|
✓ should render news card skeleton (3 ms)
|
|
✓ should have image placeholder (1 ms)
|
|
SectionSkeleton
|
|
✓ should render section skeleton (6 ms)
|
|
✓ should render multiple service card skeletons (5 ms)
|
|
Accessibility
|
|
✓ should not have any accessible content (4 ms)
|
|
✓ should be purely decorative (24 ms)
|
|
Animation
|
|
✓ should have pulse animation (1 ms)
|
|
✓ should apply animation to all skeleton elements (1 ms)
|
|
|
|
PASS src/components/ui/touch-swipe.test.tsx
|
|
TouchSwipe
|
|
Rendering
|
|
✓ should render children (6 ms)
|
|
✓ should apply custom className (2 ms)
|
|
Touch Events
|
|
✓ should handle touch start (2 ms)
|
|
✓ should handle touch end (64 ms)
|
|
✓ should call onSwipeLeft when swiping left (4 ms)
|
|
✓ should call onSwipeRight when swiping right (6 ms)
|
|
✓ should not trigger swipe when below threshold (3 ms)
|
|
Threshold
|
|
✓ should use default threshold of 50 (3 ms)
|
|
✓ should accept custom threshold (5 ms)
|
|
|
|
PASS src/hooks/use-intersection-observer.test.ts
|
|
useIntersectionObserver
|
|
Initial State
|
|
✓ should return ref and isIntersecting state (2 ms)
|
|
✓ should return ref with null current value
|
|
Options
|
|
✓ should accept threshold option (1 ms)
|
|
✓ should accept root option (1 ms)
|
|
✓ should accept rootMargin option (2 ms)
|
|
✓ should accept freezeOnceVisible option (1 ms)
|
|
✓ should use default options (1 ms)
|
|
✓ should accept multiple thresholds (2 ms)
|
|
Behavior
|
|
✓ should not observe when freezeOnceVisible is true and already intersecting (1 ms)
|
|
Cleanup
|
|
✓ should cleanup observer on unmount (1 ms)
|
|
Type Safety
|
|
✓ should work with different element types (3 ms)
|
|
|
|
PASS src/lib/utils.test.ts
|
|
utils
|
|
cn
|
|
✓ should merge class names correctly (6 ms)
|
|
✓ should handle conditional classes (1 ms)
|
|
✓ should handle empty input
|
|
formatNumber
|
|
✓ should format numbers with Chinese locale (5 ms)
|
|
✓ should handle decimal numbers (1 ms)
|
|
✓ should handle zero
|
|
formatCurrency
|
|
✓ should format numbers as CNY currency (1 ms)
|
|
✓ should handle large numbers
|
|
✓ should handle zero (1 ms)
|
|
debounce
|
|
✓ should delay function execution (4 ms)
|
|
✓ should cancel previous calls (23 ms)
|
|
throttle
|
|
✓ should limit function execution rate (2 ms)
|
|
randomBetween
|
|
✓ should generate number in range
|
|
✓ should handle negative numbers (4 ms)
|
|
lerp
|
|
✓ should interpolate between values (1 ms)
|
|
✓ should handle edge cases
|
|
clamp
|
|
✓ should clamp values within range
|
|
✓ should handle equal min and max
|
|
|
|
PASS src/components/ui/badge.test.tsx
|
|
Badge
|
|
Rendering
|
|
✓ should render badge with text (7 ms)
|
|
✓ should render as span by default (1 ms)
|
|
✓ should have data-slot attribute (20 ms)
|
|
Variants
|
|
✓ should render default variant (4 ms)
|
|
✓ should render secondary variant (2 ms)
|
|
✓ should render destructive variant (2 ms)
|
|
✓ should render outline variant (5 ms)
|
|
✓ should render ghost variant (2 ms)
|
|
✓ should render success variant (2 ms)
|
|
✓ should render warning variant (4 ms)
|
|
✓ should render info variant (3 ms)
|
|
Styling
|
|
✓ should apply custom className (15 ms)
|
|
✓ should have rounded-full class (3 ms)
|
|
✓ should have inline-flex class (1 ms)
|
|
AsChild
|
|
✓ should render as child component when asChild is true (3 ms)
|
|
|
|
PASS src/hooks/use-media-query.test.ts
|
|
useMediaQuery
|
|
useMediaQuery
|
|
✓ should return false on server side (10 ms)
|
|
✓ should return boolean value (5 ms)
|
|
useIsMobile
|
|
✓ should return boolean value (11 ms)
|
|
✓ should use correct media query (2 ms)
|
|
useIsTablet
|
|
✓ should return boolean value (3 ms)
|
|
✓ should use correct media query (2 ms)
|
|
useIsDesktop
|
|
✓ should return boolean value (1 ms)
|
|
✓ should use correct media query (3 ms)
|
|
Media Query Behavior
|
|
✓ should handle different queries (1 ms)
|
|
✓ should handle complex queries (1 ms)
|
|
|
|
PASS src/components/ui/animated-number.test.tsx
|
|
AnimatedNumber
|
|
Rendering
|
|
✓ should render number (3 ms)
|
|
✓ should render with prefix (17 ms)
|
|
✓ should render with suffix (2 ms)
|
|
✓ should render with prefix and suffix (1 ms)
|
|
✓ should render with custom className (1 ms)
|
|
Animation
|
|
✓ should accept duration prop (1 ms)
|
|
✓ should accept delay prop
|
|
✓ should start from 0 (1 ms)
|
|
Edge Cases
|
|
✓ should handle zero value (1 ms)
|
|
✓ should handle large numbers (1 ms)
|
|
✓ should handle decimal numbers (1 ms)
|
|
StatCard
|
|
Rendering
|
|
✓ should render stat card (2 ms)
|
|
✓ should render with prefix (2 ms)
|
|
✓ should render with suffix (1 ms)
|
|
✓ should render with prefix and suffix (1 ms)
|
|
✓ should render with index (1 ms)
|
|
Styling
|
|
✓ should have text-center class
|
|
✓ should have group class (1 ms)
|
|
|
|
PASS src/lib/auth.test.ts
|
|
Auth Module Configuration
|
|
Provider Configuration
|
|
✓ should export handlers (75 ms)
|
|
✓ should export signIn function
|
|
✓ should export signOut function
|
|
✓ should export auth function
|
|
Auth Options
|
|
✓ should have authOptions in handlers
|
|
✓ should have providers configured
|
|
✓ should have correct provider name (1 ms)
|
|
✓ should have email credential
|
|
✓ should have password credential
|
|
Page Configuration
|
|
✓ should have correct sign-in page
|
|
✓ should have correct error page
|
|
Session Configuration
|
|
✓ should use JWT session strategy
|
|
Callbacks
|
|
✓ should have jwt callback (1 ms)
|
|
✓ should have session callback
|
|
|
|
PASS src/lib/colors.test.ts
|
|
colors
|
|
brandColors
|
|
✓ should have primary color palette (1 ms)
|
|
✓ should have brand color palette (4 ms)
|
|
✓ should have neutral color palette
|
|
✓ should have success color palette (1 ms)
|
|
✓ should have warning color palette
|
|
✓ should have info color palette (1 ms)
|
|
✓ should have error color palette
|
|
✓ should have valid hex color format (1 ms)
|
|
colorValues
|
|
✓ should have primary colors (1 ms)
|
|
✓ should have brand colors
|
|
✓ should have text colors (4 ms)
|
|
✓ should have background colors (1 ms)
|
|
✓ should have border colors
|
|
✓ should have link colors
|
|
✓ should have status colors (1 ms)
|
|
✓ should have valid hex color format (1 ms)
|
|
gradients
|
|
✓ should have primary gradient
|
|
✓ should have hero gradient (1 ms)
|
|
✓ should have brand gradient
|
|
✓ should have subtle gradient
|
|
✓ should have card gradient
|
|
✓ should have cta gradient (1 ms)
|
|
✓ should have valid gradient format
|
|
Type Exports
|
|
✓ should export BrandColor type
|
|
✓ should export ColorValue type (1 ms)
|
|
✓ should export Gradient type
|
|
|
|
PASS src/hooks/use-scroll-reveal.test.ts
|
|
useScrollReveal
|
|
useScrollReveal
|
|
✓ should return ref and isVisible state (2 ms)
|
|
✓ should accept custom options (1 ms)
|
|
✓ should use default options (2 ms)
|
|
useScrollProgress
|
|
✓ should return progress value (2 ms)
|
|
✓ should accept threshold option (2 ms)
|
|
✓ should use default threshold (7 ms)
|
|
useParallax
|
|
✓ should return ref and offset (1 ms)
|
|
✓ should accept speed option (1 ms)
|
|
✓ should use default speed (1 ms)
|
|
✓ should handle different speed values (1 ms)
|
|
Cleanup
|
|
✓ should cleanup intersection observer on unmount (1 ms)
|
|
✓ should cleanup scroll listener on unmount
|
|
✓ should cleanup parallax scroll listener on unmount (2 ms)
|
|
|
|
PASS src/hooks/use-focus-trap.test.ts
|
|
useFocusTrap
|
|
Initial State
|
|
✓ should return a ref (2 ms)
|
|
When Active
|
|
✓ should store previous active element (1 ms)
|
|
✓ should add keydown event listener (2 ms)
|
|
✓ should set body overflow to hidden (2 ms)
|
|
When Inactive
|
|
✓ should not add keydown event listener
|
|
✓ should not set body overflow (1 ms)
|
|
Cleanup
|
|
✓ should remove keydown event listener on unmount (1 ms)
|
|
✓ should restore body overflow on unmount (3 ms)
|
|
Tab Navigation
|
|
✓ should handle Tab key press (2 ms)
|
|
✓ should handle Shift+Tab key press (1 ms)
|
|
Escape Key
|
|
✓ should handle Escape key press (1 ms)
|
|
State Changes
|
|
✓ should handle activation change (2 ms)
|
|
|
|
PASS src/lib/auth/check-permission.test.ts
|
|
check-permission
|
|
checkPermission
|
|
✓ should return allowed: false when no session
|
|
✓ should return allowed: false when no user (1 ms)
|
|
✓ should return allowed: true for admin with valid permission
|
|
✓ should return allowed: false for viewer with invalid permission (1 ms)
|
|
✓ should return allowed: true for editor with valid permission
|
|
✓ should return allowed: false for editor with delete permission (2 ms)
|
|
✓ should handle different resources
|
|
requirePermission
|
|
✓ should throw error when no permission (5 ms)
|
|
✓ should return userId and role when has permission
|
|
✓ should throw error when no session (1 ms)
|
|
✓ should allow editor to publish content
|
|
✓ should deny viewer to update config (1 ms)
|
|
|
|
PASS src/lib/validation.test.ts
|
|
validation
|
|
email validation
|
|
✓ should accept valid email (1 ms)
|
|
✓ should reject invalid email
|
|
✓ should reject null or undefined (1 ms)
|
|
✓ should reject non-string values
|
|
phone validation
|
|
✓ should accept valid phone numbers (1 ms)
|
|
✓ should reject invalid phone numbers
|
|
✓ should reject null or undefined
|
|
✓ should reject non-string values
|
|
password validation
|
|
✓ should accept valid passwords (1 ms)
|
|
✓ should reject short passwords
|
|
✓ should reject null or undefined
|
|
✓ should reject non-string values (1 ms)
|
|
URL validation
|
|
✓ should accept valid URLs (2 ms)
|
|
✓ should reject invalid URLs
|
|
✓ should reject null or undefined (1 ms)
|
|
✓ should reject non-string values (1 ms)
|
|
required validation
|
|
✓ should accept non-empty strings
|
|
✓ should reject empty strings
|
|
✓ should accept valid numbers
|
|
✓ should reject NaN
|
|
✓ should accept non-empty arrays
|
|
✓ should reject empty arrays (1 ms)
|
|
✓ should accept objects
|
|
✓ should reject null and undefined
|
|
✓ should accept booleans (1 ms)
|
|
length validation
|
|
✓ should accept strings within range
|
|
✓ should reject strings shorter than minimum
|
|
✓ should reject strings longer than maximum (1 ms)
|
|
✓ should reject non-string values
|
|
range validation
|
|
✓ should accept numbers within range
|
|
✓ should reject numbers below minimum
|
|
✓ should reject numbers above maximum
|
|
✓ should reject NaN
|
|
✓ should reject non-number values (1 ms)
|
|
Chinese ID validation
|
|
✓ should accept valid Chinese ID numbers (1 ms)
|
|
✓ should reject invalid Chinese ID numbers
|
|
✓ should reject null or undefined
|
|
✓ should reject non-string values (1 ms)
|
|
username validation
|
|
✓ should accept valid usernames
|
|
✓ should reject usernames with special characters (1 ms)
|
|
✓ should reject usernames that are too short
|
|
✓ should reject usernames that are too long
|
|
✓ should reject null or undefined
|
|
✓ should reject non-string values (7 ms)
|
|
|
|
PASS src/lib/sentry.test.ts
|
|
sentry
|
|
initSentry
|
|
✓ should not initialize Sentry in non-production environment (2 ms)
|
|
✓ should not initialize Sentry when DSN is not set (1 ms)
|
|
✓ should initialize Sentry in production with DSN (38 ms)
|
|
✓ should handle missing NODE_ENV gracefully (1 ms)
|
|
|
|
PASS src/lib/sanitize.test.ts
|
|
sanitize
|
|
sanitizeHTML
|
|
✓ should allow safe HTML tags (8 ms)
|
|
✓ should remove dangerous tags (12 ms)
|
|
✓ should remove dangerous attributes (6 ms)
|
|
✓ should handle empty input (2 ms)
|
|
sanitizeInput
|
|
✓ should remove all HTML tags (3 ms)
|
|
✓ should handle special characters (1 ms)
|
|
sanitizeURL
|
|
✓ should allow valid http URLs
|
|
✓ should allow valid https URLs (1 ms)
|
|
✓ should allow mailto URLs
|
|
✓ should reject javascript URLs
|
|
✓ should reject data URLs (6 ms)
|
|
escapeHTML
|
|
✓ should escape HTML special characters (1 ms)
|
|
✓ should handle mixed content
|
|
✓ should handle empty string (1 ms)
|
|
|
|
PASS src/lib/audit.test.ts
|
|
audit
|
|
createAuditLog
|
|
✓ should create audit log successfully (1 ms)
|
|
✓ should handle missing optional fields (1 ms)
|
|
✓ should handle database errors gracefully (1 ms)
|
|
getActionLabel
|
|
✓ should return correct label for known actions (1 ms)
|
|
getActionColor
|
|
✓ should return correct color for known actions (73 ms)
|
|
|
|
PASS src/lib/constants.test.ts
|
|
Constants
|
|
COMPANY_INFO
|
|
✓ should have company name (1 ms)
|
|
✓ should have short name (1 ms)
|
|
✓ should have slogan
|
|
✓ should have contact information (1 ms)
|
|
✓ should have legal information
|
|
NAVIGATION
|
|
✓ should be an array (21 ms)
|
|
✓ should have navigation items (2 ms)
|
|
✓ should have required properties (2 ms)
|
|
✓ should have home navigation (12 ms)
|
|
✓ should have contact navigation (1 ms)
|
|
STATS
|
|
✓ should be an array (1 ms)
|
|
✓ should have stat items
|
|
✓ should have required properties (2 ms)
|
|
✓ should have numeric values (1 ms)
|
|
SERVICES
|
|
✓ should be an array
|
|
✓ should have service items
|
|
✓ should have required properties (8 ms)
|
|
✓ should have software service
|
|
✓ should have cloud service (1 ms)
|
|
✓ should have data service (1 ms)
|
|
✓ should have security service (1 ms)
|
|
✓ should have features as array (3 ms)
|
|
✓ should have benefits as array (1 ms)
|
|
PRODUCTS
|
|
✓ should be an array
|
|
✓ should have product items
|
|
✓ should have required properties (27 ms)
|
|
✓ should have ERP product (2 ms)
|
|
✓ should have CRM product (1 ms)
|
|
✓ should have CMS product
|
|
✓ should have BI product
|
|
✓ should have pricing object
|
|
NEWS
|
|
✓ should be an array
|
|
✓ should have news items (1 ms)
|
|
✓ should have required properties (1 ms)
|
|
✓ should have valid categories (1 ms)
|
|
✓ should have valid date format
|
|
✓ should have founding news
|
|
|
|
PASS src/lib/analytics.test.ts
|
|
analytics
|
|
pageview
|
|
✓ should be defined (1 ms)
|
|
✓ should be callable
|
|
event
|
|
✓ should be defined
|
|
✓ should be callable with all parameters
|
|
✓ should be callable with minimal parameters (1 ms)
|
|
trackContactForm
|
|
✓ should be defined
|
|
✓ should be callable (1 ms)
|
|
trackButtonClick
|
|
✓ should be defined (1 ms)
|
|
✓ should be callable
|
|
trackPageView
|
|
✓ should be defined
|
|
✓ should be callable
|
|
|
|
PASS src/lib/monitoring.test.ts
|
|
PerformanceMonitor
|
|
getInstance
|
|
✓ should return singleton instance (1 ms)
|
|
recordMetric
|
|
✓ should record a metric value
|
|
✓ should record multiple metric values (1 ms)
|
|
✓ should maintain max 1000 values per metric
|
|
getAverage
|
|
✓ should return 0 for empty metric
|
|
✓ should calculate average correctly (13 ms)
|
|
getPercentile
|
|
✓ should return 0 for empty metric (3 ms)
|
|
✓ should calculate 50th percentile correctly (10 ms)
|
|
✓ should calculate 95th percentile correctly (2 ms)
|
|
✓ should calculate 99th percentile correctly (1 ms)
|
|
getCount
|
|
✓ should return 0 for non-existent metric (1 ms)
|
|
✓ should return count for existing metric
|
|
getMin
|
|
✓ should return 0 for empty metric (1 ms)
|
|
✓ should return minimum value (1 ms)
|
|
getMax
|
|
✓ should return 0 for empty metric
|
|
✓ should return maximum value
|
|
getStats
|
|
✓ should return stats for empty metric
|
|
✓ should return complete stats for metric (2 ms)
|
|
clearMetrics
|
|
✓ should clear specific metric (1 ms)
|
|
✓ should clear all metrics when no name provided
|
|
|
|
PASS src/lib/color-contrast.test.ts
|
|
color-contrast
|
|
calculateContrastRatio
|
|
✓ should calculate contrast ratio for black on white (2 ms)
|
|
✓ should calculate contrast ratio for white on black (1 ms)
|
|
✓ should calculate contrast ratio for gray on white (1 ms)
|
|
✓ should calculate contrast ratio for dark blue on white
|
|
✓ should calculate contrast ratio for same colors
|
|
✓ should handle lowercase hex
|
|
meetsWCAGStandard
|
|
AA level - normal text
|
|
✓ should pass for black on white
|
|
✓ should fail for light gray on white (1 ms)
|
|
✓ should pass for dark blue on white
|
|
AA level - large text
|
|
✓ should pass for gray on white (1 ms)
|
|
✓ should fail for light gray on white
|
|
AAA level - normal text
|
|
✓ should pass for black on white
|
|
✓ should pass for dark blue on white
|
|
AAA level - large text
|
|
✓ should pass for dark blue on white (1 ms)
|
|
✓ should pass for gray on white
|
|
default parameters
|
|
✓ should default to AA level (24 ms)
|
|
✓ should default to normal text size (1 ms)
|
|
result structure
|
|
✓ should return result with all required properties (2 ms)
|
|
|
|
PASS src/lib/gradients.test.ts
|
|
gradients
|
|
getGradientStyle
|
|
✓ should return primary gradient style
|
|
✓ should return hero gradient style (1 ms)
|
|
✓ should return brand gradient style
|
|
✓ should return subtle gradient style (1 ms)
|
|
✓ should return card gradient style
|
|
✓ should return cta gradient style (1 ms)
|
|
getGlowStyle
|
|
✓ should return primary glow style with default opacity (1 ms)
|
|
✓ should return brand glow style with default opacity (1 ms)
|
|
✓ should return glow style with custom opacity
|
|
✓ should return glow style with zero opacity
|
|
✓ should return glow style with full opacity (1 ms)
|
|
getBorderGradientStyle
|
|
✓ should return border gradient style
|
|
getTextGradientStyle
|
|
✓ should return primary text gradient style (2 ms)
|
|
✓ should return brand text gradient style
|
|
✓ should default to primary gradient (1 ms)
|
|
getHeroGradientStyle
|
|
✓ should return hero gradient style (17 ms)
|
|
getCTAGradientStyle
|
|
✓ should return CTA gradient style
|
|
|
|
PASS src/lib/integration.test.ts
|
|
Integration Tests
|
|
Input Sanitization Flow
|
|
✓ should sanitize user input end-to-end (6 ms)
|
|
✓ should sanitize HTML content (24 ms)
|
|
✓ should sanitize URLs (1 ms)
|
|
CSRF Protection Flow
|
|
✓ should generate and validate CSRF tokens (2 ms)
|
|
✓ should reject invalid CSRF tokens
|
|
✓ should reject empty tokens (1 ms)
|
|
File Validation Flow
|
|
✓ should validate allowed file types
|
|
✓ should reject dangerous file types (1 ms)
|
|
✓ should validate file signatures (7 ms)
|
|
Color Contrast Validation Flow
|
|
✓ should validate accessible color combinations
|
|
✓ should reject inaccessible color combinations (1 ms)
|
|
✓ should calculate contrast ratios correctly (1 ms)
|
|
Performance Monitoring Flow
|
|
✓ should track metrics across operations (1 ms)
|
|
✓ should track multiple metrics independently (1 ms)
|
|
Combined Security Validation Flow
|
|
✓ should validate and sanitize user input comprehensively (26 ms)
|
|
✓ should validate file upload with CSRF protection (1 ms)
|
|
|
|
PASS src/lib/csrf.test.ts
|
|
csrf
|
|
generateCSRFToken
|
|
✓ should generate a token of correct length
|
|
✓ should generate unique tokens
|
|
✓ should only contain hexadecimal characters (1 ms)
|
|
validateCSRFToken
|
|
✓ should return true for matching tokens (1 ms)
|
|
✓ should return false for mismatched tokens
|
|
✓ should return false for empty tokens
|
|
getCSRFTokenFromStorage
|
|
✓ should return token from sessionStorage (1 ms)
|
|
✓ should return null when token not found (1 ms)
|
|
setCSRFTokenToStorage
|
|
✓ should set token in sessionStorage
|
|
|
|
----------------------------------|---------|----------|---------|---------|---------------------------------------------------------
|
|
File | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s
|
|
----------------------------------|---------|----------|---------|---------|---------------------------------------------------------
|
|
All files | 31.41 | 25.25 | 31.45 | 31.4 |
|
|
app | 0 | 0 | 0 | 0 |
|
|
error.tsx | 0 | 0 | 0 | 0 | 3-19
|
|
layout.tsx | 0 | 100 | 0 | 0 | 2-119
|
|
not-found.tsx | 0 | 100 | 0 | 0 | 3-43
|
|
app/(marketing) | 0 | 0 | 0 | 0 |
|
|
layout.tsx | 0 | 100 | 0 | 0 | 1-10
|
|
page.tsx | 0 | 0 | 0 | 0 | 3-80
|
|
app/(marketing)/about | 0 | 0 | 0 | 0 |
|
|
client.tsx | 0 | 0 | 0 | 0 | 3-215
|
|
page.tsx | 0 | 100 | 0 | 0 | 1-10
|
|
app/(marketing)/cases | 0 | 0 | 0 | 0 |
|
|
layout.tsx | 0 | 100 | 0 | 0 | 3-13
|
|
page.tsx | 0 | 0 | 0 | 0 | 3-32
|
|
app/(marketing)/cases/[id] | 0 | 0 | 0 | 0 |
|
|
client.tsx | 0 | 0 | 0 | 0 | 3-286
|
|
page.tsx | 0 | 0 | 0 | 0 | 2-36
|
|
app/(marketing)/contact | 0 | 0 | 0 | 0 |
|
|
actions.ts | 0 | 0 | 0 | 0 | 9-27
|
|
layout.tsx | 0 | 100 | 0 | 0 | 1-7
|
|
page.tsx | 0 | 0 | 0 | 0 | 3-340
|
|
app/(marketing)/news | 0 | 0 | 0 | 0 |
|
|
page.tsx | 0 | 0 | 0 | 0 | 3-93
|
|
app/(marketing)/news/[slug] | 0 | 0 | 0 | 0 |
|
|
NewsDetailClient.tsx | 0 | 0 | 0 | 0 | 3-75
|
|
page.tsx | 0 | 0 | 0 | 0 | 1-36
|
|
app/(marketing)/products | 0 | 0 | 0 | 0 |
|
|
page.tsx | 0 | 0 | 0 | 0 | 3-74
|
|
app/(marketing)/products/[id] | 0 | 0 | 0 | 0 |
|
|
page.tsx | 0 | 0 | 0 | 0 | 1-135
|
|
app/(marketing)/services | 0 | 0 | 0 | 0 |
|
|
page.tsx | 0 | 0 | 0 | 0 | 3-83
|
|
app/(marketing)/services/[id] | 0 | 0 | 0 | 0 |
|
|
client.tsx | 0 | 0 | 0 | 0 | 3-241
|
|
page.tsx | 0 | 0 | 0 | 0 | 2-36
|
|
app/(marketing)/solutions | 0 | 0 | 0 | 0 |
|
|
layout.tsx | 0 | 100 | 0 | 0 | 3-13
|
|
page.tsx | 0 | 0 | 0 | 0 | 3-226
|
|
app/admin | 0 | 0 | 0 | 0 |
|
|
layout.tsx | 0 | 0 | 0 | 0 | 3-137
|
|
page.tsx | 0 | 0 | 0 | 0 | 1-111
|
|
app/admin/content | 0 | 0 | 0 | 0 |
|
|
page.tsx | 0 | 0 | 0 | 0 | 3-306
|
|
app/admin/content/[id] | 0 | 0 | 0 | 0 |
|
|
page.tsx | 0 | 0 | 0 | 0 | 3-364
|
|
app/admin/login | 0 | 0 | 0 | 0 |
|
|
page.tsx | 0 | 0 | 0 | 0 | 3-98
|
|
app/admin/logs | 0 | 0 | 0 | 0 |
|
|
page.tsx | 0 | 0 | 0 | 0 | 3-251
|
|
app/admin/settings | 0 | 0 | 0 | 0 |
|
|
page.tsx | 0 | 0 | 0 | 0 | 3-255
|
|
app/admin/users | 0 | 0 | 0 | 0 |
|
|
page.tsx | 0 | 0 | 0 | 0 | 3-386
|
|
app/api/admin/config | 0 | 0 | 0 | 0 |
|
|
route.ts | 0 | 0 | 0 | 0 | 1-201
|
|
app/api/admin/content | 0 | 0 | 0 | 0 |
|
|
route.ts | 0 | 0 | 0 | 0 | 1-147
|
|
app/api/admin/content/[id] | 0 | 0 | 0 | 0 |
|
|
route.ts | 0 | 0 | 0 | 0 | 1-202
|
|
app/api/admin/logs | 0 | 0 | 0 | 0 |
|
|
route.ts | 0 | 0 | 0 | 0 | 1-83
|
|
app/api/admin/upload | 0 | 0 | 0 | 0 |
|
|
route.ts | 0 | 0 | 0 | 0 | 1-92
|
|
app/api/admin/users | 0 | 0 | 0 | 0 |
|
|
route.ts | 0 | 0 | 0 | 0 | 1-100
|
|
app/api/admin/users/[id] | 0 | 0 | 0 | 0 |
|
|
route.ts | 0 | 0 | 0 | 0 | 1-153
|
|
app/api/auth/[...nextauth] | 100 | 100 | 100 | 100 |
|
|
route.ts | 100 | 100 | 100 | 100 |
|
|
app/api/contact | 100 | 100 | 100 | 100 |
|
|
route.ts | 100 | 100 | 100 | 100 |
|
|
app/api/health | 0 | 0 | 0 | 0 |
|
|
route.ts | 0 | 0 | 0 | 0 | 1-66
|
|
app/preview/effects | 0 | 0 | 0 | 0 |
|
|
page.tsx | 0 | 0 | 0 | 0 | 3-314
|
|
app/privacy | 0 | 100 | 0 | 0 |
|
|
page.tsx | 0 | 100 | 0 | 0 | 3-9
|
|
app/terms | 0 | 100 | 0 | 0 |
|
|
page.tsx | 0 | 100 | 0 | 0 | 3-9
|
|
components/admin | 0 | 0 | 0 | 0 |
|
|
RichTextEditor.tsx | 0 | 0 | 0 | 0 | 3-214
|
|
components/analytics | 0 | 0 | 0 | 0 |
|
|
GoogleAnalytics.tsx | 0 | 0 | 0 | 0 | 3-18
|
|
web-vitals.tsx | 0 | 0 | 0 | 0 | 3-32
|
|
components/effects | 0 | 0 | 0 | 0 |
|
|
advanced-floating-effects.tsx | 0 | 0 | 0 | 0 | 3-450
|
|
data-particle-flow.tsx | 0 | 0 | 0 | 0 | 3-195
|
|
fluid-wave-background.tsx | 0 | 0 | 0 | 0 | 3-237
|
|
geometric-abstract.tsx | 0 | 0 | 0 | 0 | 3-163
|
|
geometric-shapes.tsx | 0 | 0 | 0 | 0 | 3-56
|
|
glow-effect.tsx | 0 | 0 | 0 | 0 | 3-72
|
|
gradient-animation.tsx | 0 | 0 | 0 | 0 | 3-37
|
|
gradient-flow-optimized.tsx | 0 | 0 | 0 | 0 | 3-70
|
|
gradient-flow.tsx | 0 | 0 | 0 | 0 | 3-35
|
|
gradient-grid.tsx | 0 | 0 | 0 | 0 | 3-57
|
|
gradient-orbs.tsx | 0 | 0 | 0 | 0 | 3-92
|
|
grid-lines.tsx | 0 | 0 | 0 | 0 | 3-70
|
|
ink-tech-fusion.tsx | 0 | 0 | 0 | 0 | 3-135
|
|
mesh-gradient.tsx | 0 | 0 | 0 | 0 | 3-89
|
|
mouse-interactive-particles.tsx | 0 | 0 | 0 | 0 | 3-194
|
|
parallax-effect.tsx | 0 | 0 | 0 | 0 | 3-77
|
|
particle-galaxy.tsx | 0 | 0 | 0 | 0 | 3-229
|
|
seal-animation-enhanced.tsx | 0 | 0 | 0 | 0 | 3-171
|
|
subtle-dots.tsx | 0 | 0 | 0 | 0 | 3-71
|
|
subtle-particles.tsx | 0 | 0 | 0 | 0 | 3-74
|
|
tech-grid-flow.tsx | 0 | 0 | 0 | 0 | 3-106
|
|
components/examples | 0 | 100 | 0 | 0 |
|
|
ContactFormAnalyticsExample.tsx | 0 | 100 | 0 | 0 | 3-93
|
|
components/layout | 59.87 | 48.95 | 56.41 | 60.24 |
|
|
breadcrumb.tsx | 0 | 100 | 0 | 0 | 3-22
|
|
footer.tsx | 100 | 100 | 100 | 100 |
|
|
header.tsx | 46.46 | 34.84 | 42.85 | 46.93 | 29,36-54,62-63,74,80-85,90-123,135,173,237,261-304
|
|
mobile-menu.tsx | 79.41 | 85 | 72.72 | 79.41 | 30-33,41,87-88
|
|
mobile-tab-bar.tsx | 100 | 70 | 100 | 100 | 24-51
|
|
components/sections | 78.76 | 61.65 | 71.42 | 80.65 |
|
|
about-section.tsx | 100 | 50 | 100 | 100 | 22-62
|
|
cases-section.tsx | 100 | 66.66 | 50 | 100 | 28-54,95
|
|
contact-section.tsx | 60.43 | 47.22 | 80.95 | 59.77 | 69,84,93-147,157
|
|
hero-section.tsx | 69.49 | 68.42 | 43.47 | 78 | 13,18,23,73-75,80-82,167-168
|
|
insights-section.tsx | 94.73 | 78.57 | 83.33 | 94.44 | 120
|
|
news-section.tsx | 100 | 50 | 100 | 100 | 22-74
|
|
products-section.tsx | 100 | 50 | 100 | 100 | 24-100
|
|
services-section.tsx | 100 | 66.66 | 100 | 100 | 31,76
|
|
testimonials-section.tsx | 100 | 75 | 100 | 100 | 53-60
|
|
components/seo | 0 | 100 | 0 | 0 |
|
|
structured-data.tsx | 0 | 100 | 0 | 0 | 1-74
|
|
components/ui | 49.2 | 38.61 | 44.38 | 50.31 |
|
|
animated-card.tsx | 92.75 | 92.1 | 92.85 | 96.96 | 232-233
|
|
animated-number.tsx | 56.66 | 66.66 | 75 | 58.62 | 37-54
|
|
back-button.tsx | 100 | 100 | 100 | 100 |
|
|
badge.tsx | 100 | 100 | 100 | 100 |
|
|
button.tsx | 100 | 100 | 100 | 100 |
|
|
card.tsx | 100 | 100 | 100 | 100 |
|
|
dialog.tsx | 100 | 100 | 100 | 100 |
|
|
dropdown-menu.tsx | 82.6 | 42.85 | 55.55 | 92.45 | 24,54,106,140
|
|
error-boundary.tsx | 90 | 100 | 80 | 90 | 54
|
|
flip-clock.tsx | 0 | 0 | 0 | 0 | 3-129
|
|
glass-card.tsx | 100 | 100 | 100 | 100 |
|
|
ink-decoration.tsx | 0 | 0 | 0 | 0 | 3-559
|
|
input.tsx | 100 | 100 | 100 | 100 |
|
|
insight-card.tsx | 100 | 100 | 100 | 100 |
|
|
loading-skeleton.tsx | 100 | 100 | 100 | 100 |
|
|
optimized-image.tsx | 100 | 89.58 | 100 | 100 | 43,72,81,98,160
|
|
page-header.tsx | 100 | 69.23 | 100 | 100 | 37,44-54,64
|
|
page-transitions.tsx | 0 | 0 | 0 | 0 | 3-409
|
|
particle-background.tsx | 0 | 0 | 0 | 0 | 3-103
|
|
ripple-button.tsx | 0 | 0 | 0 | 0 | 3-193
|
|
scroll-animations.tsx | 0 | 0 | 0 | 0 | 3-436
|
|
sheet.tsx | 94.73 | 100 | 90 | 94.44 | 20-22
|
|
testimonial-card.tsx | 100 | 100 | 100 | 100 |
|
|
textarea.tsx | 100 | 100 | 100 | 100 |
|
|
toast.tsx | 100 | 100 | 100 | 100 |
|
|
touch-button.tsx | 100 | 100 | 100 | 100 |
|
|
touch-optimized.tsx | 0 | 0 | 0 | 0 | 3-268
|
|
touch-swipe.tsx | 100 | 81.25 | 100 | 100 | 24-30,37
|
|
contexts | 0 | 0 | 0 | 0 |
|
|
theme-context.tsx | 0 | 0 | 0 | 0 | 3-25
|
|
db | 18 | 0 | 0 | 18.75 |
|
|
index.ts | 0 | 0 | 100 | 0 | 1-8
|
|
schema.ts | 56.25 | 100 | 0 | 64.28 | 27,36-41,52,57
|
|
seed.ts | 0 | 0 | 0 | 0 | 1-115
|
|
hooks | 66.14 | 36 | 78.78 | 65.25 |
|
|
use-focus-trap.ts | 55.26 | 25 | 83.33 | 52.77 | 12-17,25-45
|
|
use-intersection-observer.ts | 55.55 | 46.15 | 50 | 56.25 | 24-38
|
|
use-media-query.ts | 86.36 | 50 | 81.81 | 86.36 | 7,13,18
|
|
use-scroll-reveal.ts | 69.38 | 45.45 | 83.33 | 68.18 | 21-37,79-84
|
|
lib | 82.85 | 73.31 | 80.64 | 82.78 |
|
|
analytics.ts | 61.11 | 16.66 | 0 | 46.15 | 10-11,18-19,28,32,36
|
|
animations.tsx | 65.74 | 63.2 | 65.11 | 66.04 | 261,322,326,353-370,409-422,662-668,672,784-786,888-934
|
|
audit.ts | 100 | 90 | 100 | 100 | 21
|
|
auth.ts | 28 | 0 | 0 | 28 | 17-63
|
|
color-contrast.ts | 100 | 100 | 100 | 100 |
|
|
colors.ts | 100 | 100 | 100 | 100 |
|
|
constants.ts | 100 | 100 | 100 | 100 |
|
|
csrf.ts | 88.23 | 75 | 100 | 87.5 | 17,25
|
|
email-templates.ts | 100 | 100 | 100 | 100 |
|
|
gradients.ts | 100 | 100 | 100 | 100 |
|
|
monitoring.ts | 100 | 100 | 100 | 100 |
|
|
sanitize.ts | 100 | 88.88 | 100 | 100 | 41
|
|
sentry.ts | 83.33 | 100 | 75 | 80 | 4
|
|
upload.ts | 100 | 88.57 | 100 | 100 | 106-108,131
|
|
utils.ts | 100 | 100 | 100 | 100 |
|
|
validation.ts | 100 | 100 | 100 | 100 |
|
|
lib/auth | 100 | 100 | 100 | 100 |
|
|
check-permission.ts | 100 | 100 | 100 | 100 |
|
|
permissions.ts | 100 | 100 | 100 | 100 |
|
|
session.ts | 100 | 100 | 100 | 100 |
|
|
providers | 0 | 100 | 0 | 0 |
|
|
session-provider.tsx | 0 | 100 | 0 | 0 | 3-7
|
|
----------------------------------|---------|----------|---------|---------|---------------------------------------------------------
|
|
Jest: "global" coverage threshold for statements (35%) not met: 31.41%
|
|
Jest: "global" coverage threshold for branches (30%) not met: 25.25%
|
|
Jest: "global" coverage threshold for lines (35%) not met: 31.4%
|
|
Jest: "global" coverage threshold for functions (35%) not met: 31.45%
|
|
Test Suites: 62 passed, 62 total
|
|
Tests: 1073 passed, 1073 total
|
|
Snapshots: 0 total
|
|
Time: 17.451 s
|
|
Ran all test suites.
|