+
)
@@ -75,7 +75,7 @@ export function SnippetManagerRedux() {
}
return (
-
Loading snippets...
+
-
-
+
Create Namespace
@@ -50,13 +55,23 @@ export function CreateNamespaceDialog({
value={namespaceName}
onChange={(e) => onNamespaceNameChange(e.target.value)}
onKeyPress={(e) => e.key === 'Enter' && onCreateNamespace()}
+ data-testid="namespace-name-input"
+ aria-label="Namespace name"
/>
- onOpenChange(false)}>
+ onOpenChange(false)}
+ data-testid="create-namespace-cancel-btn"
+ >
Cancel
-
+
Create
diff --git a/src/components/features/namespace-manager/DeleteNamespaceDialog.tsx b/src/components/features/namespace-manager/DeleteNamespaceDialog.tsx
index adcd495..3e56a8a 100644
--- a/src/components/features/namespace-manager/DeleteNamespaceDialog.tsx
+++ b/src/components/features/namespace-manager/DeleteNamespaceDialog.tsx
@@ -38,13 +38,15 @@ export function DeleteNamespaceDialog({
variant="outline"
size="icon"
onClick={onOpenDialog}
+ data-testid="delete-namespace-trigger"
+ aria-label="Delete namespace"
>
-
+
)}
-
+
Delete Namespace
@@ -52,8 +54,14 @@ export function DeleteNamespaceDialog({
- Cancel
-
+
+ Cancel
+
+
Delete
diff --git a/src/components/features/namespace-manager/NamespaceSelector.tsx b/src/components/features/namespace-manager/NamespaceSelector.tsx
index 4425442..9750ab9 100644
--- a/src/components/features/namespace-manager/NamespaceSelector.tsx
+++ b/src/components/features/namespace-manager/NamespaceSelector.tsx
@@ -109,22 +109,30 @@ export function NamespaceSelector({ selectedNamespaceId, onNamespaceChange }: Na
return (
+
Add Parameter
@@ -50,8 +52,11 @@ export function InputParameterList({
value={functionName}
onChange={(e) => onFunctionNameChange(e.target.value)}
className="bg-background"
+ data-testid="function-name-input"
+ aria-label="Function or component name"
+ aria-describedby="function-name-help"
/>
-
diff --git a/src/components/features/snippet-editor/SnippetFormFields.tsx b/src/components/features/snippet-editor/SnippetFormFields.tsx
index 52de0e9..4420b60 100644
--- a/src/components/features/snippet-editor/SnippetFormFields.tsx
+++ b/src/components/features/snippet-editor/SnippetFormFields.tsx
@@ -39,19 +39,30 @@ export function SnippetFormFields({
value={title}
onChange={(e) => onTitleChange(e.target.value)}
className={errors.title ? 'border-destructive ring-destructive' : ''}
+ data-testid="snippet-title-input"
+ aria-invalid={!!errors.title}
+ aria-describedby={errors.title ? "title-error" : undefined}
/>
- {errors.title &&
-
+
Namespace:
-
+
@@ -94,6 +103,8 @@ export function InputParameterItem({ param, index, onUpdate, onRemove }: InputPa
value={param.defaultValue}
onChange={(e) => onUpdate(index, 'defaultValue', e.target.value)}
className="h-8 text-sm font-mono"
+ data-testid={`param-default-input-${index}`}
+ aria-label="Default parameter value"
/>
@@ -106,6 +117,8 @@ export function InputParameterItem({ param, index, onUpdate, onRemove }: InputPa
value={param.description || ''}
onChange={(e) => onUpdate(index, 'description', e.target.value)}
className="h-8 text-sm"
+ data-testid={`param-description-input-${index}`}
+ aria-label="Parameter description"
/>
diff --git a/src/components/features/snippet-editor/InputParameterList.tsx b/src/components/features/snippet-editor/InputParameterList.tsx
index ad50a90..6978a6d 100644
--- a/src/components/features/snippet-editor/InputParameterList.tsx
+++ b/src/components/features/snippet-editor/InputParameterList.tsx
@@ -33,8 +33,10 @@ export function InputParameterList({
size="sm"
onClick={onAddParameter}
className="gap-2"
+ data-testid="add-parameter-btn"
+ aria-label="Add new parameter"
>
- +
The name of the function or component to render. Leave empty to use the default export.
{errors.title}
} + {errors.title && ( ++ {errors.title} +
+ )}
diff --git a/src/components/snippet-manager/SnippetGrid.tsx b/src/components/snippet-manager/SnippetGrid.tsx
index 4990ca5..0407e7d 100644
--- a/src/components/snippet-manager/SnippetGrid.tsx
+++ b/src/components/snippet-manager/SnippetGrid.tsx
@@ -25,7 +25,12 @@ export function SnippetGrid({
onToggleSelect,
}: SnippetGridProps) {
return (
-
+
{snippets.map((snippet) => (
onCreateFromTemplate(template.id)}
+ data-testid={`snippet-template-react-${template.id}`}
>
{template.title}