feat: clickable dashboard numbers (#7406)

This commit is contained in:
Shai Reznik 2025-09-06 05:31:54 +03:00 committed by GitHub
parent 896645b089
commit 2344c1f6e8
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 67 additions and 4 deletions

View File

@ -1,10 +1,30 @@
<script setup lang="ts">
import { explorerTree } from '~/composables/explorer'
import { filter } from '~/composables/explorer/state'
function toggleFilter(type: 'success' | 'failed' | 'skipped' | 'total') {
// Reset all filters first
filter.success = false
filter.failed = false
filter.skipped = false
if (type === 'total') {
return
}
// Then set the selected one
filter[type] = true
}
</script>
<template>
<div flex="~ wrap" justify-evenly gap-2 p="x-4" relative>
<DashboardEntry text-green5 data-testid="pass-entry">
<DashboardEntry
text-green5
data-testid="pass-entry"
cursor-pointer
hover="op80"
@click="toggleFilter('success')"
>
<template #header>
Pass
</template>
@ -15,6 +35,9 @@ import { explorerTree } from '~/composables/explorer'
<DashboardEntry
:class="{ 'text-red5': explorerTree.summary.testsFailed, 'op50': !explorerTree.summary.testsFailed }"
data-testid="fail-entry"
cursor-pointer
hover="op80"
@click="toggleFilter('failed')"
>
<template #header>
Fail
@ -25,7 +48,11 @@ import { explorerTree } from '~/composables/explorer'
</DashboardEntry>
<DashboardEntry
v-if="explorerTree.summary.testsSkipped"
op50 data-testid="skipped-entry"
op50
data-testid="skipped-entry"
cursor-pointer
hover="op80"
@click="toggleFilter('skipped')"
>
<template #header>
Skip
@ -35,7 +62,8 @@ import { explorerTree } from '~/composables/explorer'
</template>
</DashboardEntry>
<DashboardEntry
v-if="explorerTree.summary.testsTodo" op50
v-if="explorerTree.summary.testsTodo"
op50
data-testid="todo-entry"
>
<template #header>
@ -45,7 +73,13 @@ import { explorerTree } from '~/composables/explorer'
{{ explorerTree.summary.testsTodo }}
</template>
</DashboardEntry>
<DashboardEntry :tail="true" data-testid="total-entry">
<DashboardEntry
:tail="true"
data-testid="total-entry"
cursor-pointer
hover="op80"
@click="toggleFilter('total')"
>
<template #header>
Total
</template>

View File

@ -260,6 +260,35 @@ test.describe('ui', () => {
await page.getByLabel('Run current test').click()
await expect(page.getByText('All tests passed in this file')).toBeVisible()
})
test('dashboard entries filter tests correctly', async ({ page }) => {
await page.goto(pageUrl)
// Initial state should show all tests
await expect(page.getByTestId('pass-entry')).toBeVisible()
await expect(page.getByTestId('fail-entry')).toBeVisible()
await expect(page.getByTestId('total-entry')).toBeVisible()
// Click "Pass" entry and verify only passing tests are shown
await page.getByTestId('pass-entry').click()
await expect(page.getByLabel(/pass/i)).toBeChecked()
// Click "Fail" entry and verify only failing tests are shown
await page.getByTestId('fail-entry').click()
await expect(page.getByLabel(/fail/i)).toBeChecked()
// Click "Skip" entry if there are skipped tests
if (await page.getByTestId('skipped-entry').isVisible()) {
await page.getByTestId('skipped-entry').click()
await expect(page.getByLabel(/skip/i)).toBeChecked()
}
// Click "Total" entry to reset filters and show all tests again
await page.getByTestId('total-entry').click()
await expect(page.getByLabel(/pass/i)).not.toBeChecked()
await expect(page.getByLabel(/fail/i)).not.toBeChecked()
await expect(page.getByLabel(/skip/i)).not.toBeChecked()
})
})
test.describe('standalone', () => {