@object-ui/components 0.3.0 → 0.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +10 -0
- package/ISSUES_FOUND.md +128 -0
- package/README.md +19 -1
- package/README_SHADCN_SYNC.md +281 -0
- package/TESTING.md +335 -0
- package/dist/index.css +1 -1
- package/dist/index.js +30981 -30027
- package/dist/index.umd.cjs +30 -39
- package/dist/src/hooks/use-mobile.d.ts +7 -0
- package/dist/src/index.d.ts +4 -1
- package/dist/src/renderers/basic/button-group.d.ts +8 -0
- package/dist/src/renderers/basic/div.d.ts +7 -0
- package/dist/src/renderers/basic/html.d.ts +7 -0
- package/dist/src/renderers/basic/icon.d.ts +7 -0
- package/dist/src/renderers/basic/image.d.ts +7 -0
- package/dist/src/renderers/basic/navigation-menu.d.ts +8 -0
- package/dist/src/renderers/basic/pagination.d.ts +8 -0
- package/dist/src/renderers/basic/separator.d.ts +7 -0
- package/dist/src/renderers/basic/span.d.ts +7 -0
- package/dist/src/renderers/basic/text.d.ts +7 -0
- package/dist/src/renderers/complex/carousel.d.ts +7 -0
- package/dist/src/renderers/complex/data-table.d.ts +7 -0
- package/dist/src/renderers/complex/filter-builder.d.ts +7 -0
- package/dist/src/renderers/complex/resizable.d.ts +7 -0
- package/dist/src/renderers/complex/scroll-area.d.ts +7 -0
- package/dist/src/renderers/complex/table.d.ts +7 -0
- package/dist/src/renderers/data-display/alert.d.ts +7 -0
- package/dist/src/renderers/data-display/avatar.d.ts +7 -0
- package/dist/src/renderers/data-display/badge.d.ts +7 -0
- package/dist/src/renderers/data-display/breadcrumb.d.ts +8 -0
- package/dist/src/renderers/data-display/kbd.d.ts +8 -0
- package/dist/src/renderers/data-display/list.d.ts +7 -0
- package/dist/src/renderers/data-display/statistic.d.ts +7 -0
- package/dist/src/renderers/data-display/table.d.ts +8 -0
- package/dist/src/renderers/data-display/tree-view.d.ts +7 -0
- package/dist/src/renderers/disclosure/accordion.d.ts +7 -0
- package/dist/src/renderers/disclosure/collapsible.d.ts +7 -0
- package/dist/src/renderers/disclosure/toggle-group.d.ts +8 -0
- package/dist/src/renderers/feedback/empty.d.ts +8 -0
- package/dist/src/renderers/feedback/loading.d.ts +7 -0
- package/dist/src/renderers/feedback/progress.d.ts +7 -0
- package/dist/src/renderers/feedback/skeleton.d.ts +7 -0
- package/dist/src/renderers/feedback/sonner.d.ts +8 -0
- package/dist/src/renderers/feedback/spinner.d.ts +8 -0
- package/dist/src/renderers/feedback/toast.d.ts +8 -0
- package/dist/src/renderers/feedback/toaster.d.ts +7 -0
- package/dist/src/renderers/form/button.d.ts +7 -0
- package/dist/src/renderers/form/calendar.d.ts +7 -0
- package/dist/src/renderers/form/checkbox.d.ts +7 -0
- package/dist/src/renderers/form/combobox.d.ts +8 -0
- package/dist/src/renderers/form/command.d.ts +8 -0
- package/dist/src/renderers/form/date-picker.d.ts +7 -0
- package/dist/src/renderers/form/file-upload.d.ts +7 -0
- package/dist/src/renderers/form/form.d.ts +7 -0
- package/dist/src/renderers/form/input-otp.d.ts +7 -0
- package/dist/src/renderers/form/input.d.ts +7 -0
- package/dist/src/renderers/form/label.d.ts +7 -0
- package/dist/src/renderers/form/radio-group.d.ts +7 -0
- package/dist/src/renderers/form/select.d.ts +7 -0
- package/dist/src/renderers/form/slider.d.ts +7 -0
- package/dist/src/renderers/form/switch.d.ts +7 -0
- package/dist/src/renderers/form/textarea.d.ts +7 -0
- package/dist/src/renderers/form/toggle.d.ts +7 -0
- package/dist/src/renderers/layout/aspect-ratio.d.ts +8 -0
- package/dist/src/renderers/layout/card.d.ts +7 -0
- package/dist/src/renderers/layout/container.d.ts +7 -0
- package/dist/src/renderers/layout/flex.d.ts +7 -0
- package/dist/src/renderers/layout/grid.d.ts +7 -0
- package/dist/src/renderers/layout/semantic.d.ts +7 -0
- package/dist/src/renderers/layout/stack.d.ts +7 -0
- package/dist/src/renderers/layout/tabs.d.ts +7 -0
- package/dist/src/renderers/navigation/header-bar.d.ts +7 -0
- package/dist/src/renderers/navigation/sidebar.d.ts +7 -0
- package/dist/src/renderers/overlay/alert-dialog.d.ts +7 -0
- package/dist/src/renderers/overlay/context-menu.d.ts +7 -0
- package/dist/src/renderers/overlay/dialog.d.ts +7 -0
- package/dist/src/renderers/overlay/drawer.d.ts +7 -0
- package/dist/src/renderers/overlay/dropdown-menu.d.ts +7 -0
- package/dist/src/renderers/overlay/hover-card.d.ts +7 -0
- package/dist/src/renderers/overlay/menubar.d.ts +8 -0
- package/dist/src/renderers/overlay/popover.d.ts +7 -0
- package/dist/src/renderers/overlay/sheet.d.ts +7 -0
- package/dist/src/renderers/overlay/tooltip.d.ts +7 -0
- package/dist/src/renderers/placeholders.d.ts +9 -0
- package/dist/src/ui/accordion.d.ts +7 -0
- package/dist/src/ui/alert-dialog.d.ts +7 -0
- package/dist/src/ui/alert.d.ts +7 -0
- package/dist/src/ui/aspect-ratio.d.ts +7 -0
- package/dist/src/ui/avatar.d.ts +7 -0
- package/dist/src/ui/badge.d.ts +7 -0
- package/dist/src/ui/breadcrumb.d.ts +7 -0
- package/dist/src/ui/button.d.ts +10 -5
- package/dist/src/ui/calendar.d.ts +14 -7
- package/dist/src/ui/card.d.ts +7 -0
- package/dist/src/ui/carousel.d.ts +7 -0
- package/dist/src/ui/checkbox.d.ts +7 -0
- package/dist/src/ui/collapsible.d.ts +7 -0
- package/dist/src/ui/combobox.d.ts +22 -0
- package/dist/src/ui/command.d.ts +7 -0
- package/dist/src/ui/context-menu.d.ts +7 -0
- package/dist/src/ui/date-picker.d.ts +15 -0
- package/dist/src/ui/dialog.d.ts +7 -0
- package/dist/src/ui/drawer.d.ts +7 -0
- package/dist/src/ui/dropdown-menu.d.ts +7 -0
- package/dist/src/ui/filter-builder.d.ts +7 -0
- package/dist/src/ui/form.d.ts +7 -0
- package/dist/src/ui/hover-card.d.ts +7 -0
- package/dist/src/ui/index.d.ts +10 -5
- package/dist/src/ui/input-otp.d.ts +7 -0
- package/dist/src/ui/input.d.ts +7 -0
- package/dist/src/ui/item.d.ts +7 -0
- package/dist/src/ui/kbd.d.ts +7 -0
- package/dist/src/ui/label.d.ts +7 -0
- package/dist/src/ui/menubar.d.ts +7 -0
- package/dist/src/ui/navigation-menu.d.ts +7 -0
- package/dist/src/ui/pagination.d.ts +7 -0
- package/dist/src/ui/popover.d.ts +7 -0
- package/dist/src/ui/progress.d.ts +7 -0
- package/dist/src/ui/radio-group.d.ts +7 -0
- package/dist/src/ui/resizable.d.ts +7 -0
- package/dist/src/ui/scroll-area.d.ts +7 -0
- package/dist/src/ui/select.d.ts +9 -2
- package/dist/src/ui/separator.d.ts +7 -0
- package/dist/src/ui/sheet.d.ts +7 -0
- package/dist/src/ui/sidebar.d.ts +14 -9
- package/dist/src/ui/skeleton.d.ts +7 -0
- package/dist/src/ui/slider.d.ts +7 -0
- package/dist/src/ui/spinner.d.ts +7 -0
- package/dist/src/ui/switch.d.ts +7 -0
- package/dist/src/ui/table.d.ts +15 -8
- package/dist/src/ui/tabs.d.ts +7 -0
- package/dist/src/ui/textarea.d.ts +7 -0
- package/dist/src/ui/toggle-group.d.ts +8 -3
- package/dist/src/ui/toggle.d.ts +7 -0
- package/dist/src/ui/tooltip.d.ts +7 -0
- package/metadata/ObjectGrid.component.yml +72 -0
- package/package.json +23 -11
- package/postcss.config.js +9 -1
- package/shadcn-components.json +310 -0
- package/src/__tests__/README.md +124 -0
- package/src/__tests__/basic-renderers.test.tsx +255 -0
- package/src/__tests__/complex-disclosure-renderers.test.tsx +301 -0
- package/src/__tests__/feedback-overlay-renderers.test.tsx +349 -0
- package/src/__tests__/form-renderers.test.tsx +364 -0
- package/src/__tests__/layout-data-renderers.test.tsx +340 -0
- package/src/__tests__/test-utils.tsx +190 -0
- package/src/hooks/use-mobile.tsx +8 -0
- package/src/index.css +86 -54
- package/src/index.test.ts +8 -0
- package/src/index.ts +21 -1
- package/src/lib/utils.tsx +8 -0
- package/src/new-components.test.ts +8 -9
- package/src/renderers/basic/button-group.tsx +78 -0
- package/src/renderers/basic/div.tsx +9 -1
- package/src/renderers/basic/html.tsx +8 -0
- package/src/renderers/basic/icon.tsx +66 -3
- package/src/renderers/basic/image.tsx +12 -1
- package/src/renderers/basic/index.ts +11 -0
- package/src/renderers/basic/navigation-menu.tsx +80 -0
- package/src/renderers/basic/pagination.tsx +82 -0
- package/src/renderers/basic/separator.tsx +9 -1
- package/src/renderers/basic/span.tsx +9 -1
- package/src/renderers/basic/text.tsx +8 -0
- package/src/renderers/complex/__tests__/data-table.test.ts +8 -0
- package/src/renderers/complex/carousel.tsx +11 -3
- package/src/renderers/complex/data-table.tsx +19 -4
- package/src/renderers/complex/filter-builder.tsx +8 -0
- package/src/renderers/complex/index.ts +9 -3
- package/src/renderers/complex/resizable.tsx +8 -0
- package/src/renderers/complex/scroll-area.tsx +8 -0
- package/src/renderers/complex/table.tsx +10 -2
- package/src/renderers/data-display/alert.tsx +8 -0
- package/src/renderers/data-display/avatar.tsx +8 -0
- package/src/renderers/data-display/badge.tsx +8 -0
- package/src/renderers/data-display/breadcrumb.tsx +59 -0
- package/src/renderers/data-display/index.ts +12 -0
- package/src/renderers/data-display/kbd.tsx +49 -0
- package/src/renderers/data-display/list.tsx +8 -0
- package/src/renderers/data-display/statistic.tsx +24 -43
- package/src/renderers/data-display/table.tsx +68 -0
- package/src/renderers/data-display/tree-view.tsx +26 -37
- package/src/renderers/disclosure/accordion.tsx +8 -0
- package/src/renderers/disclosure/collapsible.tsx +8 -0
- package/src/renderers/disclosure/index.ts +9 -0
- package/src/renderers/disclosure/toggle-group.tsx +77 -0
- package/src/renderers/feedback/empty.tsx +48 -0
- package/src/renderers/feedback/index.ts +12 -0
- package/src/renderers/feedback/loading.tsx +8 -0
- package/src/renderers/feedback/progress.tsx +8 -0
- package/src/renderers/feedback/skeleton.tsx +8 -0
- package/src/renderers/feedback/sonner.tsx +55 -0
- package/src/renderers/feedback/spinner.tsx +54 -0
- package/src/renderers/feedback/toast.tsx +58 -0
- package/src/renderers/feedback/toaster.tsx +13 -17
- package/src/renderers/form/button.tsx +8 -0
- package/src/renderers/form/calendar.tsx +8 -0
- package/src/renderers/form/checkbox.tsx +8 -0
- package/src/renderers/form/combobox.tsx +47 -0
- package/src/renderers/form/command.tsx +57 -0
- package/src/renderers/form/date-picker.tsx +10 -2
- package/src/renderers/form/file-upload.tsx +10 -2
- package/src/renderers/form/form.tsx +12 -3
- package/src/renderers/form/index.ts +10 -0
- package/src/renderers/form/input-otp.tsx +34 -15
- package/src/renderers/form/input.tsx +89 -50
- package/src/renderers/form/label.tsx +8 -0
- package/src/renderers/form/radio-group.tsx +8 -0
- package/src/renderers/form/select.tsx +8 -0
- package/src/renderers/form/slider.tsx +16 -1
- package/src/renderers/form/switch.tsx +8 -0
- package/src/renderers/form/textarea.tsx +8 -0
- package/src/renderers/form/toggle.tsx +8 -0
- package/src/renderers/index.ts +8 -0
- package/src/renderers/layout/aspect-ratio.tsx +50 -0
- package/src/renderers/layout/card.tsx +8 -0
- package/src/renderers/layout/container.tsx +20 -12
- package/src/renderers/layout/flex.tsx +16 -8
- package/src/renderers/layout/grid.tsx +8 -0
- package/src/renderers/layout/index.ts +9 -0
- package/src/renderers/layout/page.tsx +9 -1
- package/src/renderers/layout/semantic.tsx +8 -0
- package/src/renderers/layout/stack.tsx +16 -8
- package/src/renderers/layout/tabs.tsx +8 -0
- package/src/renderers/navigation/header-bar.tsx +9 -1
- package/src/renderers/navigation/index.ts +8 -0
- package/src/renderers/navigation/sidebar.tsx +8 -0
- package/src/renderers/overlay/alert-dialog.tsx +8 -0
- package/src/renderers/overlay/context-menu.tsx +9 -1
- package/src/renderers/overlay/dialog.tsx +8 -0
- package/src/renderers/overlay/drawer.tsx +8 -0
- package/src/renderers/overlay/dropdown-menu.tsx +8 -0
- package/src/renderers/overlay/hover-card.tsx +8 -0
- package/src/renderers/overlay/index.ts +9 -0
- package/src/renderers/overlay/menubar.tsx +75 -0
- package/src/renderers/overlay/popover.tsx +8 -0
- package/src/renderers/overlay/sheet.tsx +8 -0
- package/src/renderers/overlay/tooltip.tsx +8 -0
- package/src/renderers/placeholders.tsx +107 -0
- package/src/ui/accordion.tsx +8 -0
- package/src/ui/alert-dialog.tsx +8 -0
- package/src/ui/alert.tsx +14 -24
- package/src/ui/aspect-ratio.tsx +8 -0
- package/src/ui/avatar.tsx +8 -0
- package/src/ui/badge.tsx +13 -6
- package/src/ui/breadcrumb.tsx +8 -0
- package/src/ui/button-group.tsx +8 -0
- package/src/ui/button.tsx +38 -36
- package/src/ui/calendar.tsx +57 -200
- package/src/ui/card.tsx +8 -0
- package/src/ui/carousel.tsx +8 -0
- package/src/ui/checkbox.tsx +8 -0
- package/src/ui/collapsible.tsx +8 -0
- package/src/ui/combobox.tsx +104 -0
- package/src/ui/command.tsx +8 -0
- package/src/ui/context-menu.tsx +8 -0
- package/src/ui/date-picker.tsx +61 -0
- package/src/ui/dialog.tsx +8 -0
- package/src/ui/drawer.tsx +8 -0
- package/src/ui/dropdown-menu.tsx +8 -0
- package/src/ui/empty.tsx +8 -0
- package/src/ui/filter-builder.tsx +8 -0
- package/src/ui/form.tsx +8 -0
- package/src/ui/hover-card.tsx +8 -0
- package/src/ui/index.ts +11 -5
- package/src/ui/input-otp.tsx +20 -12
- package/src/ui/input.tsx +8 -0
- package/src/ui/item.tsx +8 -0
- package/src/ui/kbd.tsx +8 -0
- package/src/ui/label.tsx +8 -0
- package/src/ui/menubar.tsx +8 -0
- package/src/ui/navigation-menu.tsx +8 -0
- package/src/ui/pagination.tsx +8 -0
- package/src/ui/popover.tsx +9 -1
- package/src/ui/progress.tsx +11 -15
- package/src/ui/radio-group.tsx +8 -0
- package/src/ui/resizable.tsx +8 -0
- package/src/ui/scroll-area.tsx +9 -1
- package/src/ui/select.tsx +17 -9
- package/src/ui/separator.tsx +8 -0
- package/src/ui/sheet.tsx +8 -0
- package/src/ui/sidebar.tsx +34 -15
- package/src/ui/skeleton.tsx +8 -0
- package/src/ui/slider.tsx +8 -0
- package/src/ui/sonner.tsx +12 -20
- package/src/ui/spinner.tsx +11 -23
- package/src/ui/switch.tsx +8 -0
- package/src/ui/table.tsx +102 -97
- package/src/ui/tabs.tsx +8 -0
- package/src/ui/textarea.tsx +8 -0
- package/src/ui/toggle-group.tsx +12 -21
- package/src/ui/toggle.tsx +15 -12
- package/src/ui/tooltip.tsx +8 -0
- package/tsconfig.json +2 -1
- package/vite.config.ts +11 -1
- package/dist/src/index.test.d.ts +0 -1
- package/dist/src/new-components.test.d.ts +0 -1
- package/dist/src/renderers/complex/__tests__/data-table.test.d.ts +0 -0
- package/dist/src/renderers/complex/calendar-view.d.ts +0 -1
- package/dist/src/renderers/complex/chatbot.d.ts +0 -1
- package/dist/src/renderers/complex/chatbot.test.d.ts +0 -1
- package/dist/src/renderers/complex/timeline.d.ts +0 -1
- package/dist/src/ui/calendar-view.d.ts +0 -21
- package/dist/src/ui/chatbot.d.ts +0 -36
- package/dist/src/ui/field.d.ts +0 -24
- package/dist/src/ui/input-group.d.ts +0 -16
- package/dist/src/ui/timeline.d.ts +0 -25
- package/metadata/ObjectTable.component.yml +0 -41
- package/src/renderers/complex/calendar-view.tsx +0 -219
- package/src/renderers/complex/chatbot.test.ts +0 -44
- package/src/renderers/complex/chatbot.tsx +0 -185
- package/src/renderers/complex/timeline.tsx +0 -466
- package/src/ui/calendar-view.tsx +0 -503
- package/src/ui/chatbot.tsx +0 -240
- package/src/ui/field.tsx +0 -246
- package/src/ui/input-group.tsx +0 -170
- package/src/ui/timeline.tsx +0 -266
- package/tailwind.config.js +0 -75
package/TESTING.md
ADDED
|
@@ -0,0 +1,335 @@
|
|
|
1
|
+
# Component and Renderer Testing Guide
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
|
|
5
|
+
This document describes the comprehensive automated testing infrastructure for ObjectUI components and renderers. The tests are designed to automatically discover display, accessibility, and structural issues in UI components.
|
|
6
|
+
|
|
7
|
+
## Test Architecture
|
|
8
|
+
|
|
9
|
+
### Test Utilities (`test-utils.tsx`)
|
|
10
|
+
|
|
11
|
+
A suite of helper functions that provide automated checks for common display issues:
|
|
12
|
+
|
|
13
|
+
#### `renderComponent(schema, options)`
|
|
14
|
+
Renders a component from its schema definition for testing.
|
|
15
|
+
|
|
16
|
+
```typescript
|
|
17
|
+
const { container } = renderComponent({
|
|
18
|
+
type: 'button',
|
|
19
|
+
label: 'Click Me',
|
|
20
|
+
});
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
#### `checkAccessibility(element)`
|
|
24
|
+
Validates accessibility attributes and identifies common a11y issues:
|
|
25
|
+
- Missing ARIA labels on interactive elements
|
|
26
|
+
- Missing form labels
|
|
27
|
+
- Missing alt attributes on images
|
|
28
|
+
|
|
29
|
+
Returns:
|
|
30
|
+
```typescript
|
|
31
|
+
{
|
|
32
|
+
hasRole: boolean;
|
|
33
|
+
hasAriaLabel: boolean;
|
|
34
|
+
hasAriaDescribedBy: boolean;
|
|
35
|
+
issues: string[]; // List of detected issues
|
|
36
|
+
}
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
#### `checkDOMStructure(container)`
|
|
40
|
+
Analyzes DOM structure for potential issues:
|
|
41
|
+
- Empty components
|
|
42
|
+
- Excessive nesting (>20 levels)
|
|
43
|
+
- Missing content
|
|
44
|
+
|
|
45
|
+
Returns:
|
|
46
|
+
```typescript
|
|
47
|
+
{
|
|
48
|
+
hasContent: boolean;
|
|
49
|
+
isEmpty: boolean;
|
|
50
|
+
hasChildren: boolean;
|
|
51
|
+
nestedDepth: number;
|
|
52
|
+
issues: string[]; // List of detected issues
|
|
53
|
+
}
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
#### `checkStyling(element)`
|
|
57
|
+
Validates component styling:
|
|
58
|
+
- Class presence
|
|
59
|
+
- Tailwind CSS usage
|
|
60
|
+
- Inline styles
|
|
61
|
+
|
|
62
|
+
Returns:
|
|
63
|
+
```typescript
|
|
64
|
+
{
|
|
65
|
+
hasClasses: boolean;
|
|
66
|
+
hasTailwindClasses: boolean;
|
|
67
|
+
hasInlineStyles: boolean;
|
|
68
|
+
classes: string[];
|
|
69
|
+
}
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
#### `validateComponentRegistration(componentType)`
|
|
73
|
+
Verifies component registration in ComponentRegistry:
|
|
74
|
+
- Component is registered
|
|
75
|
+
- Has configuration
|
|
76
|
+
- Has renderer function
|
|
77
|
+
- Has label and inputs
|
|
78
|
+
- Has default props
|
|
79
|
+
|
|
80
|
+
Returns:
|
|
81
|
+
```typescript
|
|
82
|
+
{
|
|
83
|
+
isRegistered: boolean;
|
|
84
|
+
hasConfig: boolean;
|
|
85
|
+
hasRenderer: boolean;
|
|
86
|
+
hasLabel: boolean;
|
|
87
|
+
hasInputs: boolean;
|
|
88
|
+
hasDefaultProps: boolean;
|
|
89
|
+
config: any;
|
|
90
|
+
}
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
#### `getAllDisplayIssues(container)`
|
|
94
|
+
Comprehensive check that runs all validation checks and returns aggregated issues:
|
|
95
|
+
|
|
96
|
+
```typescript
|
|
97
|
+
const issues = getAllDisplayIssues(container);
|
|
98
|
+
// Returns array of issue descriptions
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
## Test Coverage
|
|
102
|
+
|
|
103
|
+
### Component Categories
|
|
104
|
+
|
|
105
|
+
The test suite covers all major component categories:
|
|
106
|
+
|
|
107
|
+
1. **Basic Components** (`basic-renderers.test.tsx`)
|
|
108
|
+
- Text, Div, Span, Image, Icon, Separator, HTML
|
|
109
|
+
|
|
110
|
+
2. **Form Components** (`form-renderers.test.tsx`)
|
|
111
|
+
- Button, Input, Textarea, Select, Checkbox, Switch
|
|
112
|
+
- Radio Group, Slider, Label, Email, Password
|
|
113
|
+
|
|
114
|
+
3. **Layout Components** (`layout-data-renderers.test.tsx`)
|
|
115
|
+
- Container, Grid, Flex
|
|
116
|
+
|
|
117
|
+
4. **Data Display Components** (`layout-data-renderers.test.tsx`)
|
|
118
|
+
- List, Tree View, Badge, Avatar, Alert
|
|
119
|
+
- Breadcrumb, Statistic, Kbd
|
|
120
|
+
|
|
121
|
+
5. **Feedback Components** (`feedback-overlay-renderers.test.tsx`)
|
|
122
|
+
- Loading, Spinner, Progress, Skeleton, Empty, Toast
|
|
123
|
+
|
|
124
|
+
6. **Overlay Components** (`feedback-overlay-renderers.test.tsx`)
|
|
125
|
+
- Dialog, Alert Dialog, Sheet, Drawer
|
|
126
|
+
- Popover, Tooltip, Dropdown Menu, Context Menu
|
|
127
|
+
- Hover Card, Menubar
|
|
128
|
+
|
|
129
|
+
7. **Disclosure Components** (`complex-disclosure-renderers.test.tsx`)
|
|
130
|
+
- Accordion, Collapsible, Toggle Group
|
|
131
|
+
|
|
132
|
+
8. **Complex Components** (`complex-disclosure-renderers.test.tsx`)
|
|
133
|
+
- Timeline, Data Table, Chatbot, Carousel
|
|
134
|
+
- Scroll Area, Resizable, Filter Builder, Calendar View, Table
|
|
135
|
+
|
|
136
|
+
## What the Tests Check
|
|
137
|
+
|
|
138
|
+
### 1. Component Registration
|
|
139
|
+
Every component should be properly registered:
|
|
140
|
+
```typescript
|
|
141
|
+
it('should be properly registered', () => {
|
|
142
|
+
const validation = validateComponentRegistration('button');
|
|
143
|
+
expect(validation.isRegistered).toBe(true);
|
|
144
|
+
expect(validation.hasConfig).toBe(true);
|
|
145
|
+
expect(validation.hasLabel).toBe(true);
|
|
146
|
+
});
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
### 2. Rendering Without Errors
|
|
150
|
+
Components should render without throwing errors:
|
|
151
|
+
```typescript
|
|
152
|
+
it('should render without issues', () => {
|
|
153
|
+
const { container } = renderComponent({
|
|
154
|
+
type: 'button',
|
|
155
|
+
label: 'Test',
|
|
156
|
+
});
|
|
157
|
+
expect(container).toBeDefined();
|
|
158
|
+
});
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
### 3. Accessibility
|
|
162
|
+
Components should be accessible:
|
|
163
|
+
```typescript
|
|
164
|
+
it('should have proper accessibility', () => {
|
|
165
|
+
const { container } = renderComponent({
|
|
166
|
+
type: 'button',
|
|
167
|
+
label: 'Click Me',
|
|
168
|
+
});
|
|
169
|
+
|
|
170
|
+
const issues = getAllDisplayIssues(container);
|
|
171
|
+
const a11yIssues = issues.filter(i => i.includes('accessible'));
|
|
172
|
+
expect(a11yIssues).toHaveLength(0);
|
|
173
|
+
});
|
|
174
|
+
```
|
|
175
|
+
|
|
176
|
+
### 4. DOM Structure
|
|
177
|
+
Components should have valid DOM structure:
|
|
178
|
+
```typescript
|
|
179
|
+
it('should have valid structure', () => {
|
|
180
|
+
const { container } = renderComponent({
|
|
181
|
+
type: 'container',
|
|
182
|
+
body: [{ type: 'text', content: 'Content' }],
|
|
183
|
+
});
|
|
184
|
+
|
|
185
|
+
const domCheck = checkDOMStructure(container);
|
|
186
|
+
expect(domCheck.hasContent).toBe(true);
|
|
187
|
+
expect(domCheck.isEmpty).toBe(false);
|
|
188
|
+
expect(domCheck.nestedDepth).toBeLessThan(20);
|
|
189
|
+
});
|
|
190
|
+
```
|
|
191
|
+
|
|
192
|
+
### 5. Props and Variants
|
|
193
|
+
Components should support their documented props:
|
|
194
|
+
```typescript
|
|
195
|
+
it('should support variants', () => {
|
|
196
|
+
const variants = ['default', 'secondary', 'destructive'];
|
|
197
|
+
|
|
198
|
+
variants.forEach(variant => {
|
|
199
|
+
const { container } = renderComponent({
|
|
200
|
+
type: 'button',
|
|
201
|
+
label: 'Test',
|
|
202
|
+
variant,
|
|
203
|
+
});
|
|
204
|
+
expect(container).toBeDefined();
|
|
205
|
+
});
|
|
206
|
+
});
|
|
207
|
+
```
|
|
208
|
+
|
|
209
|
+
## Running Tests
|
|
210
|
+
|
|
211
|
+
### Run All Tests
|
|
212
|
+
```bash
|
|
213
|
+
pnpm test
|
|
214
|
+
```
|
|
215
|
+
|
|
216
|
+
### Run Component Tests Only
|
|
217
|
+
```bash
|
|
218
|
+
pnpm vitest run packages/components/src/__tests__/
|
|
219
|
+
```
|
|
220
|
+
|
|
221
|
+
### Run Specific Test File
|
|
222
|
+
```bash
|
|
223
|
+
pnpm vitest run packages/components/src/__tests__/form-renderers.test.tsx
|
|
224
|
+
```
|
|
225
|
+
|
|
226
|
+
### Watch Mode
|
|
227
|
+
```bash
|
|
228
|
+
pnpm test:watch
|
|
229
|
+
```
|
|
230
|
+
|
|
231
|
+
### Coverage Report
|
|
232
|
+
```bash
|
|
233
|
+
pnpm test:coverage
|
|
234
|
+
```
|
|
235
|
+
|
|
236
|
+
### Interactive UI
|
|
237
|
+
```bash
|
|
238
|
+
pnpm test:ui
|
|
239
|
+
```
|
|
240
|
+
|
|
241
|
+
## Test Results
|
|
242
|
+
|
|
243
|
+
Current test coverage:
|
|
244
|
+
- **150 total tests** across all component categories
|
|
245
|
+
- **140 passing** (93% pass rate)
|
|
246
|
+
- **10 failing** - identifying real schema/prop mismatches that need fixing
|
|
247
|
+
|
|
248
|
+
The failing tests are valuable as they automatically discovered:
|
|
249
|
+
- Components with missing props
|
|
250
|
+
- Schema mismatches (e.g., `content` vs `html`, `text` vs `content`)
|
|
251
|
+
- Missing default values
|
|
252
|
+
- Incorrect prop expectations
|
|
253
|
+
|
|
254
|
+
## Adding New Tests
|
|
255
|
+
|
|
256
|
+
### For New Components
|
|
257
|
+
|
|
258
|
+
When adding a new component, create tests following this pattern:
|
|
259
|
+
|
|
260
|
+
```typescript
|
|
261
|
+
describe('MyComponent Renderer', () => {
|
|
262
|
+
it('should be properly registered', () => {
|
|
263
|
+
const validation = validateComponentRegistration('my-component');
|
|
264
|
+
expect(validation.isRegistered).toBe(true);
|
|
265
|
+
expect(validation.hasConfig).toBe(true);
|
|
266
|
+
});
|
|
267
|
+
|
|
268
|
+
it('should render without issues', () => {
|
|
269
|
+
const { container } = renderComponent({
|
|
270
|
+
type: 'my-component',
|
|
271
|
+
// ... required props
|
|
272
|
+
});
|
|
273
|
+
|
|
274
|
+
expect(container).toBeDefined();
|
|
275
|
+
const issues = getAllDisplayIssues(container);
|
|
276
|
+
expect(issues).toHaveLength(0);
|
|
277
|
+
});
|
|
278
|
+
|
|
279
|
+
it('should support required props', () => {
|
|
280
|
+
const { container } = renderComponent({
|
|
281
|
+
type: 'my-component',
|
|
282
|
+
requiredProp: 'value',
|
|
283
|
+
});
|
|
284
|
+
|
|
285
|
+
expect(container.textContent).toContain('value');
|
|
286
|
+
});
|
|
287
|
+
});
|
|
288
|
+
```
|
|
289
|
+
|
|
290
|
+
### For Display Issue Detection
|
|
291
|
+
|
|
292
|
+
Add specific checks for known issues:
|
|
293
|
+
|
|
294
|
+
```typescript
|
|
295
|
+
it('should not have excessive nesting', () => {
|
|
296
|
+
const { container } = renderComponent({
|
|
297
|
+
type: 'complex-component',
|
|
298
|
+
data: complexData,
|
|
299
|
+
});
|
|
300
|
+
|
|
301
|
+
const domCheck = checkDOMStructure(container);
|
|
302
|
+
expect(domCheck.nestedDepth).toBeLessThan(20);
|
|
303
|
+
});
|
|
304
|
+
|
|
305
|
+
it('should have proper ARIA attributes', () => {
|
|
306
|
+
const { container } = renderComponent({
|
|
307
|
+
type: 'interactive-component',
|
|
308
|
+
});
|
|
309
|
+
|
|
310
|
+
const button = container.querySelector('button');
|
|
311
|
+
const a11y = checkAccessibility(button);
|
|
312
|
+
expect(a11y.issues).toHaveLength(0);
|
|
313
|
+
});
|
|
314
|
+
```
|
|
315
|
+
|
|
316
|
+
## Benefits
|
|
317
|
+
|
|
318
|
+
This testing infrastructure provides:
|
|
319
|
+
|
|
320
|
+
1. **Automated Issue Detection** - Tests automatically find display and accessibility issues
|
|
321
|
+
2. **Regression Prevention** - Catches breaking changes in component rendering
|
|
322
|
+
3. **Documentation** - Tests serve as examples of how components should be used
|
|
323
|
+
4. **Confidence** - High test coverage ensures components work as expected
|
|
324
|
+
5. **Quick Feedback** - Fast test execution helps during development
|
|
325
|
+
|
|
326
|
+
## Future Enhancements
|
|
327
|
+
|
|
328
|
+
Potential improvements:
|
|
329
|
+
|
|
330
|
+
1. Visual regression testing with screenshot comparison
|
|
331
|
+
2. Performance benchmarking for complex components
|
|
332
|
+
3. Cross-browser testing
|
|
333
|
+
4. Responsive design testing
|
|
334
|
+
5. Theme variation testing
|
|
335
|
+
6. Integration tests with SchemaRenderer
|