5.2 KiB
5.2 KiB
Quickstart: Filtro de Busca Avançada — FilterSidebar
Feature: 024-filtro-busca-avancada | Date: 2026-04-20
Guia de verificação rápida após implementação. Execute em ordem.
Pré-requisitos
# Containers rodando
docker compose up -d
# Backend saudável
curl http://localhost:5000/api/v1/cities
1. Verificar property_count no backend
Cidades
curl -s http://localhost:5000/api/v1/cities | python -m json.tool | grep property_count
Esperado: cada objeto de cidade tem "property_count": <número inteiro ≥ 0>.
Bairros
curl -s "http://localhost:5000/api/v1/neighborhoods?city_id=1" | python -m json.tool | grep property_count
Esperado: campo presente, valores numéricos, bairros sem imóvel retornam 0.
Tipos de imóvel
curl -s http://localhost:5000/api/v1/property-types | python -m json.tool
Esperado:
subtypes[*].property_countpresente e ≥ 0- Tipos pai (
parent_id: null) têmproperty_count: 0
NFR-005 — apenas imóveis ativos
# Desativar um imóvel e verificar que property_count decresce
docker exec saas_imobiliaria-backend-1 uv run python -c "
from app import create_app; from app.extensions import db; from app.models.property import Property
app = create_app()
with app.app_context():
p = Property.query.filter_by(is_active=True).first()
if p:
print('Imóvel:', p.city_id, p.neighborhood_id)
"
2. Verificar estado inicial das seções (User Story 2)
- Acessar
http://localhost:5173/imoveissem parâmetros de URL - Verificar que apenas a seção "Preço" está expandida ao carregar
- Verificar que "Localização", "Tipo de imóvel", "Quartos e vagas", "Área", "Comodidades" estão colapsadas
✅ Apenas "Preço" expandida → FR-009 PASS
- Acessar
http://localhost:5173/imoveis?city_id=1&bedrooms_min=2 - Verificar que as seções "Localização" e "Quartos e vagas" estão expandidas além de "Preço"
✅ Seções com filtros ativos expandidas → FR-010 PASS
3. Verificar truncamento e popularidade (User Story 3)
- Abrir a seção "Localização" → subseção Bairros (com cidade selecionada que tenha > 5 bairros)
- Verificar que apenas 5 bairros são exibidos inicialmente
- Verificar que os 3 primeiros têm badge "Popular" visível
- Verificar que os 5 exibidos são os mais populares (maiores
property_count) - Clicar em "Ver mais (N)" → todos os bairros são exibidos
- Clicar em "Ver menos" → volta aos 5 primeiros
✅ Truncamento top-5 → FR-012 PASS
✅ Ordenação por popularidade → FR-013 PASS
✅ Badge "Popular" → FR-014 PASS
✅ "Ver mais" toggle → FR-017 PASS
- Selecionar um bairro que não está entre os 5 primeiros
- Colapsar e reabrir a seção
- Verificar que o bairro selecionado aparece visível mesmo sem clicar em "Ver mais"
✅ Item selecionado sempre visível → FR-015 PASS
4. Verificar busca cross-categoria (User Story 1)
- Verificar que o campo "Buscar filtro…" aparece acima de todas as seções accordion
- Digitar
"apar"e aguardar 200 ms - Verificar sugestão inline com grupo "Tipo de imóvel" → "Apartamento"
- Clicar em "Apartamento" → filtro
subtype_idaplicado, campo limpo, seção "Tipo de imóvel" expandida
✅ FR-001, FR-002, FR-003, FR-004, FR-006 PASS
- Digitar
"copa"→ verificar "Copacabana" sob grupo "Bairro" - Digitar
"apto xyz 999"→ verificar mensagem "Nenhum filtro encontrado para "apto xyz 999""
✅ FR-005 (normalização), FR-005 (case-insensitive) PASS
- Com sugestões visíveis:
- Pressionar
↓→ primeiro item highlighted - Pressionar
↓novamente → segundo item - Pressionar
Enter→ filtro aplicado - Abrir novamente, pressionar
Escape→ sugestões fechadas
- Pressionar
✅ FR-008 (navegação por teclado) PASS
- Testar com
catalogLoading = true(simular estado de carregamento):- Campo deve aparecer desabilitado (opacidade reduzida, cursor not-allowed)
✅ FR-007 PASS
5. Verificar design tokens (NFR-003)
Inspecionar no DevTools:
| Elemento | Token esperado | Classe Tailwind |
|---|---|---|
| Campo de busca (borda) | borderSubtle |
border-borderSubtle |
| Campo de busca (texto placeholder) | textTertiary |
placeholder-textTertiary |
| Badge "Popular" (fundo) | brand/20 |
bg-brand/20 |
| Badge "Popular" (texto) | brand |
text-brand |
| Botão "Ver mais" | textTertiary |
text-textTertiary |
| Cabeçalhos de grupos de sugestão | textTertiary uppercase |
text-textTertiary uppercase |
| Animação sugestões | duration-200 ease-out |
CSS grid trick |
6. Verificar que filtros existentes não quebraram (NFR-004 / SC-005)
cd backend && uv run pytest tests/ -v
Esperado: todos os testes passando.
Testar manualmente na UI:
- Filtro por preço (min/max + presets)
- Filtro por quartos/banheiros/vagas (chips)
- Filtro por área
- Filtro por comodidades (checkboxes)
- Botão "Limpar (N)"
- Toggle Venda / Aluguel
✅ Nenhum filtro existente quebrado → NFR-004, SC-005 PASS