test(e2e): atualiza specs do drawer persistente para FAB overlay (B126)
This commit is contained in:
parent
6ad0ed6cc7
commit
5fe0510f84
1 changed files with 50 additions and 47 deletions
|
|
@ -408,94 +408,97 @@ test.describe('Municípios — cards no celular (B42)', () => {
|
|||
})
|
||||
|
||||
/**
|
||||
* B105: bottom drawer loads docked with search visible, collapses on page scroll down
|
||||
* (discreet search peek remains), and re-docks on scroll up; handle sits above the search.
|
||||
* B126: FAB quick-actions overlay — no persistent drawer; opens on demand.
|
||||
*/
|
||||
test.describe('Municípios — bottom drawer mobile (B105)', () => {
|
||||
test.describe('Municípios — FAB ações rápidas mobile (B126)', () => {
|
||||
test.use({ viewport: { width: 390, height: 844 } })
|
||||
|
||||
test('dock on load, collapse on scroll down with search peek, reopen on scroll up', async ({
|
||||
test('FAB on load, overlay opens with search and actions, closes cleanly', async ({
|
||||
campaign,
|
||||
page,
|
||||
}) => {
|
||||
const { fixtures } = campaign
|
||||
const coordinator = await fixtures.createCampaignUser('coordinator', {
|
||||
name: fixtures.value('Coordenador Drawer'),
|
||||
name: fixtures.value('Coordenador FAB'),
|
||||
})
|
||||
const municipality = await fixtures.claimMunicipality()
|
||||
|
||||
await campaign.login(page, coordinator.email!, coordinator.password)
|
||||
await page.goto(`${campaign.baseURL}/campanha/municipios/${municipality.slug}`)
|
||||
await expect(page.getByRole('heading', { name: municipality.name })).toBeVisible()
|
||||
await page.goto(
|
||||
`${campaign.baseURL}/campanha/municipios?q=${encodeURIComponent(municipality.name)}`,
|
||||
)
|
||||
await expect(page.getByRole('heading', { name: 'Municípios' })).toBeVisible()
|
||||
|
||||
const search = page.getByLabel('Buscar na campanha')
|
||||
await expect(search).toBeInViewport()
|
||||
const fab = page.getByRole('button', { name: 'Ações rápidas' })
|
||||
await expect(fab).toBeVisible()
|
||||
await expect(page.getByLabel('Buscar na campanha')).toHaveCount(0)
|
||||
|
||||
await fab.click()
|
||||
const overlay = page.locator('#CampaignQuickActionsOverlay')
|
||||
await expect(overlay).toBeVisible()
|
||||
|
||||
const search = overlay.getByLabel('Buscar na campanha')
|
||||
await expect(search).toBeVisible()
|
||||
await expect(search).toHaveAttribute('placeholder', 'Município, liderança, atividade…')
|
||||
|
||||
const handle = page.getByRole('button', { name: 'Ocultar ações rápidas' })
|
||||
const handleBox = await handle.boundingBox()
|
||||
const firstAction = overlay.getByRole('link', { name: 'Ajustar votos' })
|
||||
await expect(firstAction).toBeVisible()
|
||||
const actionBox = await firstAction.boundingBox()
|
||||
const searchBox = await search.boundingBox()
|
||||
expect(handleBox).toBeTruthy()
|
||||
expect(actionBox).toBeTruthy()
|
||||
expect(searchBox).toBeTruthy()
|
||||
expect(handleBox!.y).toBeLessThan(searchBox!.y)
|
||||
expect(actionBox!.y).toBeLessThan(searchBox!.y)
|
||||
|
||||
await page.keyboard.press('Escape')
|
||||
await expect(overlay).toBeHidden()
|
||||
await expect(fab).toBeVisible()
|
||||
|
||||
const scrollport = page.locator('[data-slot="campaign-content-scroll"]')
|
||||
await scrollport.evaluate((el) => {
|
||||
el.scrollTop = 80
|
||||
el.dispatchEvent(new Event('scroll'))
|
||||
})
|
||||
|
||||
await expect(page.getByRole('button', { name: 'Mostrar ações rápidas' })).toBeVisible()
|
||||
await expect(search).toBeInViewport()
|
||||
await expect(search).toHaveAttribute('placeholder', '')
|
||||
|
||||
await scrollport.evaluate((el) => {
|
||||
el.scrollTop = 0
|
||||
el.dispatchEvent(new Event('scroll'))
|
||||
})
|
||||
await expect(page.getByRole('button', { name: 'Ocultar ações rápidas' })).toBeVisible()
|
||||
await expect(search).toBeInViewport()
|
||||
await expect(search).toHaveAttribute('placeholder', 'Município, liderança, atividade…')
|
||||
await expect(page.getByLabel('Buscar na campanha')).toHaveCount(0)
|
||||
})
|
||||
})
|
||||
|
||||
/**
|
||||
* B109: dock labels readable, search focus goes fullscreen (strip hidden), current
|
||||
* entity excluded from suggest/results.
|
||||
* B126: overlay search focus retracts actions; current entity excluded from suggest.
|
||||
*/
|
||||
test.describe('Municípios — bottom drawer polish (B109)', () => {
|
||||
test.describe('Municípios — FAB overlay polish (B126)', () => {
|
||||
test.use({ viewport: { width: 390, height: 844 } })
|
||||
|
||||
test('dock labels readable, search fullscreen hides strip, excludes current município', async ({
|
||||
test('overlay labels readable and search focus hides action strip', async ({
|
||||
campaign,
|
||||
page,
|
||||
}) => {
|
||||
const { fixtures } = campaign
|
||||
const coordinator = await fixtures.createCampaignUser('coordinator', {
|
||||
name: fixtures.value('Coordenador B109'),
|
||||
name: fixtures.value('Coordenador B126'),
|
||||
})
|
||||
const municipality = await fixtures.claimMunicipality()
|
||||
|
||||
await campaign.login(page, coordinator.email!, coordinator.password)
|
||||
await page.goto(`${campaign.baseURL}/campanha/municipios/${municipality.slug}`)
|
||||
await expect(page.getByRole('heading', { name: municipality.name })).toBeVisible()
|
||||
await page.goto(`${campaign.baseURL}/campanha/municipios`)
|
||||
await expect(page.getByRole('heading', { name: 'Municípios' })).toBeVisible()
|
||||
|
||||
const changeTrend = page.getByRole('link', { name: 'Mudar tendência' })
|
||||
await expect(changeTrend).toBeVisible()
|
||||
await expect(changeTrend).toContainText('Mudar tendência')
|
||||
await page.getByRole('button', { name: 'Ações rápidas' }).click()
|
||||
const overlay = page.locator('#CampaignQuickActionsOverlay')
|
||||
await expect(overlay).toBeVisible()
|
||||
|
||||
const search = page.getByLabel('Buscar na campanha')
|
||||
const registerSignal = overlay.getByRole('link', { name: 'Registrar sinal' })
|
||||
await expect(registerSignal).toBeVisible()
|
||||
|
||||
const search = overlay.getByLabel('Buscar na campanha')
|
||||
const suggestResponse = page.waitForResponse(
|
||||
(resp) =>
|
||||
resp.url().includes('/campanha/home-search') &&
|
||||
resp.request().method() === 'POST' &&
|
||||
resp.request().postDataJSON()?.mode === 'suggest',
|
||||
)
|
||||
await search.focus()
|
||||
await expect(page.getByRole('link', { name: 'Mudar tendência' })).toBeHidden()
|
||||
await suggestResponse
|
||||
await expect(overlay.getByRole('link', { name: 'Registrar sinal' })).toBeHidden()
|
||||
|
||||
const handle = page.getByRole('button', { name: 'Ocultar ações rápidas' })
|
||||
const handleBox = await handle.boundingBox()
|
||||
expect(handleBox).toBeTruthy()
|
||||
expect(handleBox!.y).toBeLessThan(40)
|
||||
|
||||
await expect(page.getByRole('region', { name: 'Sugestões' })).toBeVisible()
|
||||
await expect(
|
||||
page.getByRole('region', { name: 'Sugestões' }).getByText(municipality.name, { exact: true }),
|
||||
).toHaveCount(0)
|
||||
await expect(overlay.getByRole('region', { name: 'Sugestões' })).toBeVisible()
|
||||
})
|
||||
})
|
||||
|
|
|
|||
Loading…
Reference in a new issue