Skip to content

Commit aeff014

Browse files
committed
Add stable testids to the fan-out pickers and result panels
Result panel containers, per-preset result rows (with a data-state of added/skipped/failed), per-row retry buttons, submit buttons, and preset checkboxes get data-testid attributes so e2e scenarios can bind to structure instead of copy.
1 parent f2ce791 commit aeff014

4 files changed

Lines changed: 36 additions & 6 deletions

File tree

packages/plugins/google/src/react/AddGoogleSource.tsx

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -160,7 +160,10 @@ export function GoogleServiceResultPanel(props: {
160160
if (rows.length === 0) return null;
161161

162162
return (
163-
<section className="space-y-3 rounded-lg border border-border bg-muted/10 px-3 py-3">
163+
<section
164+
data-testid="google-add-results"
165+
className="space-y-3 rounded-lg border border-border bg-muted/10 px-3 py-3"
166+
>
164167
<div>
165168
<h2 className="text-sm font-medium text-foreground">Google products</h2>
166169
<p className="text-[11px] text-muted-foreground">
@@ -173,6 +176,8 @@ export function GoogleServiceResultPanel(props: {
173176
return (
174177
<li
175178
key={`${row.status}:${row.presetId}`}
179+
data-testid={`add-result-row-${row.presetId}`}
180+
data-state={row.status}
176181
className="flex items-start gap-2 rounded-md border border-border bg-background px-2.5 py-2"
177182
>
178183
<span
@@ -220,6 +225,7 @@ export function GoogleServiceResultPanel(props: {
220225
type="button"
221226
variant="outline"
222227
size="xs"
228+
data-testid={`add-result-retry-${row.presetId}`}
223229
loading={props.retryingPresetId === row.presetId}
224230
onClick={() => void props.onRetry(row.presetId)}
225231
>
@@ -518,7 +524,12 @@ export default function AddGoogleSource(props: {
518524
<Button variant="ghost" onClick={dismiss} disabled={adding || retryingPresetId !== null}>
519525
{servicesResult || customBundleSlug ? "Done" : "Cancel"}
520526
</Button>
521-
<Button onClick={() => void handleAdd()} disabled={!canAdd} loading={adding}>
527+
<Button
528+
data-testid="google-add-submit"
529+
onClick={() => void handleAdd()}
530+
disabled={!canAdd}
531+
loading={adding}
532+
>
522533
Connect Google
523534
</Button>
524535
</FloatActions>

packages/plugins/google/src/react/GoogleProductPicker.tsx

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,11 @@ const ProductRow = ({
103103
checked ? "bg-primary/5" : "hover:bg-muted/40",
104104
)}
105105
>
106-
<Checkbox checked={checked} onCheckedChange={(next) => onToggle(next === true)} />
106+
<Checkbox
107+
data-testid={`preset-checkbox-${preset.id}`}
108+
checked={checked}
109+
onCheckedChange={(next) => onToggle(next === true)}
110+
/>
107111
<div className="shrink-0">
108112
<IntegrationFavicon icon={preset.icon} url={preset.url} size={16} />
109113
</div>

packages/plugins/microsoft/src/react/AddMicrosoftSource.tsx

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -151,7 +151,10 @@ export function MicrosoftWorkloadResultPanel(props: {
151151
if (rows.length === 0) return null;
152152

153153
return (
154-
<section className="space-y-3 rounded-lg border border-border bg-muted/10 px-3 py-3">
154+
<section
155+
data-testid="microsoft-add-results"
156+
className="space-y-3 rounded-lg border border-border bg-muted/10 px-3 py-3"
157+
>
155158
<div>
156159
<h2 className="text-sm font-medium text-foreground">Microsoft workloads</h2>
157160
<p className="text-[11px] text-muted-foreground">
@@ -164,6 +167,8 @@ export function MicrosoftWorkloadResultPanel(props: {
164167
return (
165168
<li
166169
key={`${row.status}:${row.presetId}`}
170+
data-testid={`add-result-row-${row.presetId}`}
171+
data-state={row.status}
167172
className="flex items-start gap-2 rounded-md border border-border bg-background px-2.5 py-2"
168173
>
169174
<span
@@ -211,6 +216,7 @@ export function MicrosoftWorkloadResultPanel(props: {
211216
type="button"
212217
variant="outline"
213218
size="xs"
219+
data-testid={`add-result-retry-${row.presetId}`}
214220
loading={props.retryingPresetId === row.presetId}
215221
onClick={() => void props.onRetry(row.presetId)}
216222
>
@@ -509,7 +515,12 @@ export default function AddMicrosoftSource(props: {
509515
<Button variant="ghost" onClick={dismiss} disabled={adding || retryingPresetId !== null}>
510516
{workloadsResult || customGraphSlug ? "Done" : "Cancel"}
511517
</Button>
512-
<Button onClick={() => void handleAdd()} disabled={!canAdd} loading={adding}>
518+
<Button
519+
data-testid="microsoft-add-submit"
520+
onClick={() => void handleAdd()}
521+
disabled={!canAdd}
522+
loading={adding}
523+
>
513524
Connect Microsoft
514525
</Button>
515526
</FloatActions>

packages/plugins/microsoft/src/react/MicrosoftScopePicker.tsx

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,11 @@ const ScopeRow = ({
7171
checked ? "bg-primary/5" : "hover:bg-muted/40",
7272
)}
7373
>
74-
<Checkbox checked={checked} onCheckedChange={(next) => onToggle(next === true)} />
74+
<Checkbox
75+
data-testid={`preset-checkbox-${preset.id}`}
76+
checked={checked}
77+
onCheckedChange={(next) => onToggle(next === true)}
78+
/>
7579
<div className="shrink-0">
7680
<IntegrationFavicon icon={preset.icon} size={16} />
7781
</div>

0 commit comments

Comments
 (0)