UX-MOBILE-2: Genotyp-Tabellen-Overflow behoben (scrollbar statt page-overflow)
- BreedingResultView: <table class="genotype-table"> in <div class="genotype-table-scroll"> gewrapped.
- index.css: .genotype-table-scroll { overflow-x: auto; -webkit-overflow-scrolling: touch }.
.genotype-table td { white-space: nowrap } → Tabelle scrollt statt Zellen umzubrechen.
width: 100% entfernt (Tabelle auto-sized to content).
- index.css: .app-main { overflow-x: hidden } → verhindert, dass breite Inhalte
den Page-Body horizontal überlaufen lassen (document.scrollWidth == clientWidth).
- e2e/genotype-table.spec.ts (4 Tests): Wrapper sichtbar, Wrapper selbst scrollbar
(scrollWidth > clientWidth), keine Page-Overflow auf 390px. Beide Viewports.
- Vitest 78 / e2e 106 grün.
Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
54
gerbil-manager-web/e2e/genotype-table.spec.ts
Normal file
54
gerbil-manager-web/e2e/genotype-table.spec.ts
Normal file
@@ -0,0 +1,54 @@
|
||||
/**
|
||||
* UX-MOBILE-2: Genotyp-Tabellen-Overflow — die Tabelle scrollt horizontal,
|
||||
* die Seite selbst bleibt NICHT breiter als der Viewport (kein horizontaler
|
||||
* Page-Overflow auf 390px).
|
||||
*/
|
||||
import { de, expect, skipUnlessMock, test } from './fixtures'
|
||||
|
||||
const tl = de.pages.litters
|
||||
|
||||
test('Phone: Genotyp-Detail-Tabelle scrollt im eigenen Wrapper, kein Page-Overflow', async ({
|
||||
page,
|
||||
}, testInfo) => {
|
||||
skipUnlessMock()
|
||||
if (testInfo.project.name !== 'phone') return
|
||||
|
||||
// Wurf w-kruemel hat beide Eltern mit Genotypen → BreedingResultView rendert.
|
||||
await page.goto('/wuerfe/w-kruemel')
|
||||
await expect(page.getByRole('heading', { name: 'Wurf K' })).toBeVisible()
|
||||
await expect(page.getByText(tl.detail.expectedColors).first()).toBeVisible()
|
||||
|
||||
// Genotyp-Detail-Tabelle ausklappen.
|
||||
await page.getByRole('button', { name: de.pages.genetik.showGenotypes }).click()
|
||||
|
||||
// Scroll-Wrapper und Tabelle müssen vorhanden und sichtbar sein.
|
||||
const wrapper = page.locator('.genotype-table-scroll').first()
|
||||
await expect(wrapper).toBeVisible()
|
||||
await expect(wrapper.locator('.genotype-table')).toBeVisible()
|
||||
|
||||
// Wrapper ist selbst scrollbar (Tabelle breiter als der sichtbare Bereich).
|
||||
const wrapperScrollable = await wrapper.evaluate(
|
||||
(el) => el.scrollWidth > el.clientWidth,
|
||||
)
|
||||
expect(wrapperScrollable).toBe(true)
|
||||
|
||||
// Die Seite selbst darf NICHT breiter als der Viewport sein.
|
||||
const pageOverflow = await page.evaluate(
|
||||
() => document.documentElement.scrollWidth > document.documentElement.clientWidth,
|
||||
)
|
||||
expect(pageOverflow).toBe(false)
|
||||
})
|
||||
|
||||
test('Desktop: Genotyp-Detail-Tabelle zeigt Wrapper auch auf breitem Viewport', async ({
|
||||
page,
|
||||
}, testInfo) => {
|
||||
skipUnlessMock()
|
||||
if (testInfo.project.name !== 'desktop') return
|
||||
|
||||
await page.goto('/wuerfe/w-kruemel')
|
||||
await expect(page.getByText(tl.detail.expectedColors).first()).toBeVisible()
|
||||
await page.getByRole('button', { name: de.pages.genetik.showGenotypes }).click()
|
||||
|
||||
await expect(page.locator('.genotype-table-scroll').first()).toBeVisible()
|
||||
await expect(page.locator('.genotype-table').first()).toBeVisible()
|
||||
})
|
||||
Reference in New Issue
Block a user