diff --git a/src/components/ui/RemoteNamePreview.test.tsx b/src/components/ui/RemoteNamePreview.test.tsx new file mode 100644 index 0000000..616aec6 --- /dev/null +++ b/src/components/ui/RemoteNamePreview.test.tsx @@ -0,0 +1,57 @@ +// @vitest-environment jsdom +import { describe, it, expect } from 'vitest'; +import { render, screen } from '@testing-library/react'; +import { RemoteNamePreview } from './RemoteNamePreview'; + +describe('RemoteNamePreview', () => { + describe('empty state', () => { + it('shows placeholder [my-remote] when value is empty string', () => { + render(); + expect(screen.getByText('[my-remote]')).toBeDefined(); + }); + + it('shows placeholder [my-remote] when value is whitespace-only', () => { + render(); + expect(screen.getByText('[my-remote]')).toBeDefined(); + }); + + it('shows guidance text when value is empty', () => { + render(); + expect(screen.getByText('Type a name to see how it appears in your config')).toBeDefined(); + }); + }); + + describe('value state', () => { + it('shows [my-backup] when value is "my-backup"', () => { + render(); + expect(screen.getByText('[my-backup]')).toBeDefined(); + }); + + it('shows [azure-prod] when value is "azure-prod"', () => { + render(); + expect(screen.getByText('[azure-prod]')).toBeDefined(); + }); + + it('does NOT show guidance text when value is provided', () => { + render(); + expect(screen.queryByText('Type a name to see how it appears in your config')).toBeNull(); + }); + }); + + describe('element types', () => { + it('renders no form controls (no textbox role)', () => { + render(); + expect(screen.queryByRole('textbox')).toBeNull(); + }); + + it('renders no input elements', () => { + const { container } = render(); + expect(container.querySelector('input')).toBeNull(); + }); + + it('renders no textarea elements', () => { + const { container } = render(); + expect(container.querySelector('textarea')).toBeNull(); + }); + }); +}); diff --git a/src/components/ui/RemoteNamePreview.tsx b/src/components/ui/RemoteNamePreview.tsx new file mode 100644 index 0000000..de805ff --- /dev/null +++ b/src/components/ui/RemoteNamePreview.tsx @@ -0,0 +1,23 @@ +interface RemoteNamePreviewProps { + value: string; +} + +export function RemoteNamePreview({ value }: RemoteNamePreviewProps) { + const trimmed = value.trim(); + const isEmpty = trimmed.length === 0; + + return ( +
+ {isEmpty ? ( + <> + [my-remote] +

+ Type a name to see how it appears in your config +

+ + ) : ( + [{trimmed}] + )} +
+ ); +}