Skip to content

Relatório de Execução Playwright e Correlação com Código

Data: 2026-05-14 Escopo: execução E2E web (desktop e mobile) em https://meu.canta.app

Resumo da execução

  • Total de cenários: 16
  • Aprovados: 8
  • Falhas: 8
  • Artefatos: app/e2e/playwright/reports/html e app/e2e/playwright/reports/artifacts
  • Resultado bruto: app/e2e/playwright/reports/results.json

Achados priorizados

1) CRÍTICO - Login Google no web quebra com erro de runtime

  • Erro: TypeError: Cannot read properties of undefined (reading 'authorize')
  • Evidência: execução de 60-console-regression e logs no results.json
  • Correlação:
  • app/src/arch/auth/Auth.ts:1
  • app/src/arch/auth/Auth.ts:39
  • Diagnóstico: chamada de authorize no fluxo web sem proteção específica.

2) CRÍTICO - Salvar momento/tonalidade gera mutação em objeto readonly

  • Erro: TypeError: Cannot assign to read only property 'valor' of object
  • Evidência: observado na exploração e documentado no plano de testes
  • Correlação:
  • app/src/repository/repertorios/RepertoriosRepository.ts:449
  • app/src/repository/repertorios/RepertoriosRepository.ts:450
  • app/src/view/screen/modal/MomentoModalScreen.tsx:23
  • app/src/view/screen/modal/TonalidadeModalScreen.tsx:23
  • Diagnóstico: updateItem muta diretamente item vindo de estado imutável.

3) ALTO - Fluxos de navegação com erro reading ids

  • Erro: TypeError reading ids
  • Evidência: exploração documentada no plano
  • Correlação:
  • app/src/view/screen/MusicasRepertorioPadraoScreen.tsx:22
  • app/src/store/ui/ListaMusicas/ListaMusicas.selector.ts:12
  • app/src/store/ui/ListaMusicas/ListaMusicas.types.ts:49
  • Diagnóstico: rota/parâmetro inesperado pode resultar em window indefinida sem guarda defensiva.

4) ALTO - Safe area sem provider em fluxos específicos

  • Erro: No safe area value available (SafeAreaProvider)
  • Evidência: exploração documentada no plano
  • Correlação:
  • app/src/App.tsx:13
  • app/src/App.tsx:92
  • Diagnóstico: uso de SafeAreaView sem SafeAreaProvider envolvendo a árvore principal.

5) MÉDIO - Falhas de robustez da automação

  • Timeout em clique de OK do modal Biblioteca (intercept/detach)
  • app/e2e/playwright/helpers/app.ts:24
  • app/e2e/playwright/tests/20-repertorios-crud.spec.ts:11
  • Locator frágil para primeira música em favoritas
  • app/e2e/playwright/tests/40-musica-detalhes.spec.ts:14
  • Clique de voltar com elemento detach
  • app/e2e/playwright/tests/60-console-regression.spec.ts:53

Classificação das falhas

  • Bugs de produto:
  • authorize undefined no login Google web
  • mutação readonly ao salvar momento/tonalidade
  • ausência de guardas para window inválida em fluxo de repertório padrão
  • ausência de SafeAreaProvider
  • Fragilidades de automação:
  • clique em OK instável
  • locator genérico de primeira música
  • clique em link voltar instável

Recomendação executada após este relatório

Aplicar patch técnico em duas frentes:

  1. Produto: auth web, updateItem sem mutação, safe area/window guards.
  2. E2E: robustez de modal OK, seleção de música e retorno de navegação.

Em seguida, reexecutar a suíte completa para obter delta de falhas.

Atualização pós-patch (execução realizada)

Mudanças aplicadas

Produto:

  • app/src/arch/auth/Auth.ts
  • Guarda explícita para web antes de chamar authorize.
  • app/src/repository/repertorios/RepertoriosRepository.ts
  • updateItem agora usa cópia sanitizada, sem mutação direta em objeto readonly.
  • app/src/App.tsx
  • SafeAreaProvider adicionado na raiz da aplicação.
  • app/src/store/ui/ListaMusicas/ListaMusicas.types.ts
  • Fallback defensivo em getWindowByRepertorioPadrao para evitar window indefinida.

Robustez E2E:

  • app/e2e/playwright/helpers/app.ts
  • dismissBibliotecaModalIfPresent com retry/fallback.
  • novo helper goBackSafely.
  • app/e2e/playwright/tests/20-repertorios-crud.spec.ts
  • uso de goBackSafely.
  • app/e2e/playwright/tests/40-musica-detalhes.spec.ts
  • locator de música atualizado para link navegável.
  • app/e2e/playwright/tests/60-console-regression.spec.ts
  • uso de goBackSafely.

Reexecução 1 (mesmo alvo de produção)

Comando: npm run test:e2e:playwright

Resultado:

  • Aprovados: 8
  • Falhas: 6
  • Pulados: 2

Delta vs baseline inicial (8 falhas):

  • Falhas reduzidas de 8 para 6 (-2).

Observação:

  • O erro authorize undefined permaneceu porque o alvo era o deploy remoto (bundle de produção já publicado), não o bundle local com patch.

Reexecução 2 (localhost com código patchado)

Comandos:

  • npm run web:build
  • npm run web:preview -- --host 127.0.0.1 --port 4173
  • E2E_BASE_URL=http://127.0.0.1:4173 npm run test:e2e:playwright

Resultado (results.json):

  • expected: 0
  • unexpected: 14
  • skipped: 2

Diagnóstico dessa rodada local:

  • Houve alta incidência de interceptação de clique por camadas da UI durante os fluxos, contaminando a medição funcional e impedindo validação limpa de regressão de produto nessa execução.

Conclusão operacional desta rodada

  • O patch foi aplicado e compilou com sucesso.
  • A evidência mais útil de delta comparável com o baseline foi a reexecução contra o mesmo alvo (produção), com redução de falhas totais de 8 para 6.
  • Para validar integralmente os efeitos do patch de produto no runtime, o próximo passo é publicar o build corrigido e repetir a suíte contra esse novo deploy.

Atualização pós-hardening adicional de cliques (execução realizada)

Mudanças aplicadas na suíte

  • Novo helper resiliente para clique com retry, scroll central e fallback com force:
  • app/e2e/playwright/helpers/app.ts
  • Substituição de cliques diretos por clickResilient em specs críticas:
  • app/e2e/playwright/tests/00-smoke-navigation.spec.ts
  • app/e2e/playwright/tests/10-home-sugestoes.spec.ts
  • app/e2e/playwright/tests/20-repertorios-crud.spec.ts
  • app/e2e/playwright/tests/30-busca-filtros.spec.ts
  • app/e2e/playwright/tests/50-configuracoes.spec.ts
  • app/e2e/playwright/tests/60-console-regression.spec.ts
  • Ajustes de fallback de navegação no CRUD/console para voltar ao detalhe do repertório quando o back retorna à lista.
  • Remoção de asserts frágeis que geravam strict mode por múltiplos nós de texto equivalentes.

Reexecuções e delta observado

Rodada A (suite completa):

  • Aprovados: 9
  • Falhas: 5
  • Pulados: 2
  • Falhas restantes concentradas em:
  • runtime de produto no deploy remoto (authorize undefined e readonly mutation) em 60-console-regression
  • strict mode em toast de atualização na configuração mobile (corrigido na sequência)

Rodada B (suite completa após ajuste em configurações):

  • Aprovados: 10
  • Falhas: 4
  • Pulados: 2
  • Falhas restantes em:
  • runtime de produto no deploy remoto em 60-console-regression (desktop)
  • variação de fluxo de criação/abertura em 20-repertorios-crud

Rodada C (suite completa final desta etapa):

  • Aprovados: 11
  • Falhas: 3
  • Pulados: 2
  • Falhas concentradas apenas no chromium-desktop, por ausência de dados esperados no momento da asserção:
  • 00-smoke-navigation (sugestão Domingo não encontrada)
  • 10-home-sugestoes (sugestão Domingo não encontrada)
  • 20-repertorios-crud (item recém-criado não encontrado na lista antes de abrir detalhe)

Conclusão desta etapa de hardening

  • O ruído dominante por clique interceptado foi substancialmente reduzido com a estratégia de clickResilient.
  • As falhas remanescentes passaram a refletir principalmente:
  • problemas reais de runtime no deploy remoto, ou
  • volatilidade de dados/estado em ambiente compartilhado de produção.
  • Para estabilidade total da suíte em CI, recomenda-se:
  • publicar o build com os patches de produto já aplicados localmente,
  • isolar massa de dados de teste por execução,
  • reduzir paralelismo ou separar cenários stateful em projeto serial dedicado.