Skip to content

Commit 2344c1f

Browse files
authored
feat: clickable dashboard numbers (#7406)
1 parent 896645b commit 2344c1f

File tree

2 files changed

+67
-4
lines changed

2 files changed

+67
-4
lines changed

packages/ui/client/components/dashboard/TestsEntry.vue

Lines changed: 38 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,30 @@
11
<script setup lang="ts">
22
import { explorerTree } from '~/composables/explorer'
3+
import { filter } from '~/composables/explorer/state'
4+
5+
function toggleFilter(type: 'success' | 'failed' | 'skipped' | 'total') {
6+
// Reset all filters first
7+
filter.success = false
8+
filter.failed = false
9+
filter.skipped = false
10+
11+
if (type === 'total') {
12+
return
13+
}
14+
// Then set the selected one
15+
filter[type] = true
16+
}
317
</script>
418

519
<template>
620
<div flex="~ wrap" justify-evenly gap-2 p="x-4" relative>
7-
<DashboardEntry text-green5 data-testid="pass-entry">
21+
<DashboardEntry
22+
text-green5
23+
data-testid="pass-entry"
24+
cursor-pointer
25+
hover="op80"
26+
@click="toggleFilter('success')"
27+
>
828
<template #header>
929
Pass
1030
</template>
@@ -15,6 +35,9 @@ import { explorerTree } from '~/composables/explorer'
1535
<DashboardEntry
1636
:class="{ 'text-red5': explorerTree.summary.testsFailed, 'op50': !explorerTree.summary.testsFailed }"
1737
data-testid="fail-entry"
38+
cursor-pointer
39+
hover="op80"
40+
@click="toggleFilter('failed')"
1841
>
1942
<template #header>
2043
Fail
@@ -25,7 +48,11 @@ import { explorerTree } from '~/composables/explorer'
2548
</DashboardEntry>
2649
<DashboardEntry
2750
v-if="explorerTree.summary.testsSkipped"
28-
op50 data-testid="skipped-entry"
51+
op50
52+
data-testid="skipped-entry"
53+
cursor-pointer
54+
hover="op80"
55+
@click="toggleFilter('skipped')"
2956
>
3057
<template #header>
3158
Skip
@@ -35,7 +62,8 @@ import { explorerTree } from '~/composables/explorer'
3562
</template>
3663
</DashboardEntry>
3764
<DashboardEntry
38-
v-if="explorerTree.summary.testsTodo" op50
65+
v-if="explorerTree.summary.testsTodo"
66+
op50
3967
data-testid="todo-entry"
4068
>
4169
<template #header>
@@ -45,7 +73,13 @@ import { explorerTree } from '~/composables/explorer'
4573
{{ explorerTree.summary.testsTodo }}
4674
</template>
4775
</DashboardEntry>
48-
<DashboardEntry :tail="true" data-testid="total-entry">
76+
<DashboardEntry
77+
:tail="true"
78+
data-testid="total-entry"
79+
cursor-pointer
80+
hover="op80"
81+
@click="toggleFilter('total')"
82+
>
4983
<template #header>
5084
Total
5185
</template>

test/ui/test/ui.spec.ts

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -260,6 +260,35 @@ test.describe('ui', () => {
260260
await page.getByLabel('Run current test').click()
261261
await expect(page.getByText('All tests passed in this file')).toBeVisible()
262262
})
263+
264+
test('dashboard entries filter tests correctly', async ({ page }) => {
265+
await page.goto(pageUrl)
266+
267+
// Initial state should show all tests
268+
await expect(page.getByTestId('pass-entry')).toBeVisible()
269+
await expect(page.getByTestId('fail-entry')).toBeVisible()
270+
await expect(page.getByTestId('total-entry')).toBeVisible()
271+
272+
// Click "Pass" entry and verify only passing tests are shown
273+
await page.getByTestId('pass-entry').click()
274+
await expect(page.getByLabel(/pass/i)).toBeChecked()
275+
276+
// Click "Fail" entry and verify only failing tests are shown
277+
await page.getByTestId('fail-entry').click()
278+
await expect(page.getByLabel(/fail/i)).toBeChecked()
279+
280+
// Click "Skip" entry if there are skipped tests
281+
if (await page.getByTestId('skipped-entry').isVisible()) {
282+
await page.getByTestId('skipped-entry').click()
283+
await expect(page.getByLabel(/skip/i)).toBeChecked()
284+
}
285+
286+
// Click "Total" entry to reset filters and show all tests again
287+
await page.getByTestId('total-entry').click()
288+
await expect(page.getByLabel(/pass/i)).not.toBeChecked()
289+
await expect(page.getByLabel(/fail/i)).not.toBeChecked()
290+
await expect(page.getByLabel(/skip/i)).not.toBeChecked()
291+
})
263292
})
264293

265294
test.describe('standalone', () => {

0 commit comments

Comments
 (0)