fix: add aria-labels to schedule action buttons, update test selectors

Replaced native title attributes with aria-labels on Run now,
Execution history, Edit, and Delete buttons so the Radix tooltip
conversion does not break test selectors that relied on title.
Updated tests from findByTitle to findByRole.
This commit is contained in:
SaelixCode
2026-07-04 12:31:34 -04:00
parent 366add027b
commit 5f8c0c8c97
2 changed files with 9 additions and 9 deletions
@@ -790,7 +790,7 @@ export default function ScheduledOperationsView({ filterNodeId, onClearFilter, p
<TooltipProvider>
<Tooltip>
<TooltipTrigger asChild>
<Button variant="ghost" size="sm" onClick={() => handleRunNow(task)} disabled={runningTaskId === task.id}>
<Button variant="ghost" size="sm" onClick={() => handleRunNow(task)} disabled={runningTaskId === task.id} aria-label="Run now">
<Play className={`w-4 h-4 ${runningTaskId === task.id ? 'animate-pulse' : ''}`} strokeWidth={1.5} />
</Button>
</TooltipTrigger>
@@ -800,7 +800,7 @@ export default function ScheduledOperationsView({ filterNodeId, onClearFilter, p
<TooltipProvider>
<Tooltip>
<TooltipTrigger asChild>
<Button variant="ghost" size="sm" onClick={() => openRuns(task)}>
<Button variant="ghost" size="sm" onClick={() => openRuns(task)} aria-label="Execution history">
<History className="w-4 h-4" strokeWidth={1.5} />
</Button>
</TooltipTrigger>
@@ -810,7 +810,7 @@ export default function ScheduledOperationsView({ filterNodeId, onClearFilter, p
<TooltipProvider>
<Tooltip>
<TooltipTrigger asChild>
<Button variant="ghost" size="sm" onClick={() => openEdit(task)}>
<Button variant="ghost" size="sm" onClick={() => openEdit(task)} aria-label="Edit">
<Pencil className="w-4 h-4" strokeWidth={1.5} />
</Button>
</TooltipTrigger>
@@ -820,7 +820,7 @@ export default function ScheduledOperationsView({ filterNodeId, onClearFilter, p
<TooltipProvider>
<Tooltip>
<TooltipTrigger asChild>
<Button variant="ghost" size="sm" onClick={() => setDeleteTarget(task)} className="text-destructive/60 hover:bg-destructive hover:text-destructive-foreground">
<Button variant="ghost" size="sm" onClick={() => setDeleteTarget(task)} className="text-destructive/60 hover:bg-destructive hover:text-destructive-foreground" aria-label="Delete">
<Trash2 className="w-4 h-4" strokeWidth={1.5} />
</Button>
</TooltipTrigger>
@@ -137,7 +137,7 @@ describe('ScheduledOperationsView', () => {
render(<ScheduledOperationsView />);
await userEvent.click(await screen.findByRole('radio', { name: /All tasks/ }));
await userEvent.click(await screen.findByTitle('Edit'));
await userEvent.click(await screen.findByRole('button', { name: 'Edit' }));
await waitFor(() => expect(screen.getAllByRole('combobox')[2]).toHaveTextContent('web'));
});
@@ -584,7 +584,7 @@ describe('ScheduledOperationsView', () => {
render(<ScheduledOperationsView />);
await userEvent.click(await screen.findByRole('radio', { name: /All tasks/ }));
await userEvent.click(await screen.findByTitle('Edit'));
await userEvent.click(await screen.findByRole('button', { name: 'Edit' }));
await userEvent.click(screen.getAllByRole('combobox')[0]);
await userEvent.click(await screen.findByRole('button', { name: 'Create Fleet Snapshot' }));
await userEvent.click(screen.getByRole('button', { name: 'Update' }));
@@ -720,7 +720,7 @@ describe('ScheduledOperationsView', () => {
render(<ScheduledOperationsView />);
await userEvent.click(await screen.findByRole('radio', { name: /All tasks/ }));
await userEvent.click(await screen.findByTitle('Edit'));
await userEvent.click(await screen.findByRole('button', { name: 'Edit' }));
expect(screen.getByRole('radio', { name: 'Simple' })).toHaveAttribute('aria-checked', 'true');
expect(screen.getByRole('radio', { name: 'Daily' })).toHaveAttribute('aria-checked', 'true');
@@ -738,7 +738,7 @@ describe('ScheduledOperationsView', () => {
render(<ScheduledOperationsView />);
await userEvent.click(await screen.findByRole('radio', { name: /All tasks/ }));
await userEvent.click(await screen.findByTitle('Edit'));
await userEvent.click(await screen.findByRole('button', { name: 'Edit' }));
await userEvent.click(screen.getByRole('button', { name: 'Update' }));
await waitFor(() => {
@@ -755,7 +755,7 @@ describe('ScheduledOperationsView', () => {
render(<ScheduledOperationsView />);
await userEvent.click(await screen.findByRole('radio', { name: /All tasks/ }));
await userEvent.click(await screen.findByTitle('Edit'));
await userEvent.click(await screen.findByRole('button', { name: 'Edit' }));
expect(screen.getByRole('radio', { name: 'Advanced' })).toHaveAttribute('aria-checked', 'true');
expect(screen.getByDisplayValue('*/15 * * * *')).toBeInTheDocument();