Estratégia de Testes — Cypress Core
Mapa dos formatos de teste usados na prática de QA (smoke, regressão, contrato...) contra o que já existe neste projeto e qual ferramenta cada um usa. Diferente de
regras-de-negocio.md(o produto) ehistorico-de-falhas.md(incidentes) — este arquivo documenta a cobertura de teste em si: o que já roda, o que está pela metade e o que ainda não existe. Atualizar sempre que um formato novo entrar (ex.: virou de "não implementado" pra "em andamento") ou sair do ar.
Índice
- Formatos de teste
- Teste de sanity (implementado)
- Teste de contrato (em andamento)
- Inventário de testes por módulo
- Inventário de testes por tipo
- Backlog de segurança (priorizado)
- Convenção: toda API nova exige teste de autenticação
Formatos de teste
| Tipo | O que é | Status | Ferramenta |
|---|---|---|---|
| Smoke | Confere que o sistema "sobe" — sem quebra básica. Raso, roda rápido, é o primeiro filtro. | ✅ implementado | Cypress (UI pura) |
| Regressão | Cobre toda regra de negócio já confirmada de um módulo — organizada por módulo, roda de ponta a ponta pra pegar qualquer coisa que quebrou. | ✅ implementado | Cypress (UI + cy.intercept + API real) |
| Casos de teste | Garante que um bug já corrigido e confirmado não volta a acontecer. 1:1 com um incidente documentado. | ✅ implementado | Cypress (UI + cy.intercept + API real) |
| Funcional / E2E | Valida uma regra de negócio de ponta a ponta, do ponto de vista do usuário. | ✅ implementado | Cypress (UI) |
| API / Integração | Bate direto no backend, sem UI — valida request/response de verdade. | ✅ implementado | Cypress + cy.request |
| Mock / Stub | Simula respostas do backend (inclusive erro) pra testar a reação da UI sem depender do backend real. | ✅ implementado | Cypress + cy.intercept |
| Contrato | Valida que o schema/comportamento da API continua batendo com o esperado. | 🟡 em andamento | Newman (Postman CLI) |
| Sanity | Smoke bem focado num recorte específico, depois de um deploy pontual. | ✅ implementado | Cypress (UI) |
| Exploratório | Investigação sem roteiro fixo, pra achar o que o automatizado não previu. | 🟡 informal | App real + Postman + DevTools |
Teste de sanity (implementado)
Diferença pra smoke: smoke é largo e raso (todas as telas, só confere que montaram); sanity é estreito e um pouco mais fundo (1 módulo, 1 ação rápida real — ex.: aplicar 1 filtro, buscar 1 registro). Existe pra cobrir o meio-termo entre "a tela abriu" e "rodar a suíte de regressão/funcional inteira daquele módulo", que seria overkill logo depois de um deploy pontual numa área só.
Estrutura: cypress/e2e/sanity/, 1 spec por módulo — loginSanity.cy.js,
contaCorrenteSanity.cy.js, boletoSanity.cy.js, relatorioSanity.cy.js,
aplicacaoSanity.cy.js, contaGeradoraSanity.cy.js. Roda tudo com npm run cy:run:sanity, ou só
o(s) módulo(s) afetado(s) via --spec (ver README). Nenhum cria dado real.
Ação rápida de cada módulo (reaproveitando Page Objects e valores já validados por outros specs, não inventados na hora):
| Módulo | Ação |
|---|---|
| Login | Login completo (usuário/senha + 2FA) |
| Conta Corrente | Filtro Status = "Ativa" (mesmo valor de contaCorrente.cy.js), confere ≥ 1 resultado |
| Boletos | Busca por Guid conhecido, confere 1 resultado |
| Relatórios | Abre a aba "Visualizar Relatório" (lista os já solicitados), sem gerar nada |
| Aplicações | Abre o modal "Nova Aplicação" e fecha sem salvar |
| Contas Geradoras | Só abre a tela de Cadastro — não existe ação de leitura segura nesta tela hoje |
O Guid usado em boletoSanity.cy.js (6c62f012-49de-47e5-a2c6-90b2b366356f, vindo de
postman/core-homol2.postman_environment.json → guid_boleto) foi confirmado em 25/08/2026 tanto
via API (collection de contrato) quanto na própria tela — busca real, 1 resultado, status GERADO,
Aplicação V1, cliente João da Silva.
Teste de contrato (em andamento)
O que já está pronto: uma collection Postman dedicada, só leitura (nenhum request de
efeito colateral) — postman/CORE_HOMOL_V1_contrato.postman_collection.json.
17 requisições GET cobrindo autenticação, conta digital, boletos, termo de aceite e
movimentações, rodando via npm run postman:contract (Newman). Cada request confere:
- Status code 200
- Corpo da resposta é JSON válido
- Tempo de resposta abaixo de 3s
- Schema do corpo (nomes de campo + tipo — string/number/boolean/object/array/null), via
pm.response.to.have.jsonSchema(schema), em 15 das 17 requests — as 2 restantes não têm nenhuma resposta real (nem sucesso nem erro) pra basear schema em cima (ver pendências).
O ambiente (postman/core-homol2.postman_environment.json)
já vem com GUIDs reais e fixos de homologação pré-preenchidos (guid_condominio,
guid_administradora, guid_boleto) — o token (token_v1) é obtido sozinho pela primeira
request da collection ("Autentica Aplicação").
Schema de sucesso (7 requests, resposta 200 real): "Autentica Aplicação", "Buscar config boleto", "termo-aceite", "Consulta CEP", "Consulta Termo Vigente", "Consulta boleto", "Buscar Status da Remessa".
Schema de erro — permissão (8 requests, sem acesso ao recurso hoje — ver pendência de
permissão abaixo, mas o formato do erro em si é real e validado): "Buscar Informações da
Conta Digital", "Exibir plano da Conta Digital", "Configurações da Conta Digital", "Buscar
Subconta", "Consultar aplicações", "Consulta Usuários", "Buscar Termo Aceito", "Consulta
Histórico Boleto". Confirmamos que a API usa dois envelopes de erro consistentes:
{code, domain, description} nos 404 e {title, status, detail} nos 403 — o teste de schema
garante que esse formato não muda mesmo que o conteúdo do erro surpreenda depois.
Nota de confiabilidade do schema, já confirmada na prática: cada um foi gerado a partir de uma única resposta real capturada (não inventado) — então um campo que veio
nullnessa amostra viratype: "null"no schema, mesmo que na prática ele possa às vezes vir string/number também. Isso realmente aconteceu: ao trocarguid_condominiopor um outro condomínio real, o schema de "Consulta boleto" passou a falhar porquecliente.email,fornecedor.telefonee outros campos vieramnullnesses boletos (tinham vindo string na amostra original). Corrigido ampliando o tipo desses campos pra["string", "null"]— mais uma amostra real incorporada, não um chute. Se esse padrão se repetir, é sinal de ampliar o tipo, não de remover o teste.
Pendências conhecidas:
| O quê | Afeta | Por quê |
|---|---|---|
guid_remessa (6cc8fe3f-c092-4c1b-a339-b21875b13b6f, do condomínio 1c7cc93d-b9e7-4f69-8286-5a46a01e03a8) retorna corpo vazio nesse endpoint específico |
"Buscar boletos de uma remessa" | Mesmo par condomínio/remessa que faz "Buscar Status da Remessa" responder 200 dá corpo vazio aqui — não é dado errado (já confirmamos a remessa existe), é algo desse endpoint específico que precisa de investigação (talvez espere outro parâmetro, ou o corpo realmente vem vazio nesse caso e o teste deveria esperar isso, não 200 com JSON). |
baseURL_V1 vazio no environment |
"Buscar boletos do condomínio" | Já estava sem valor definido na collection original CORE HOMOL V1 — não foi esquecimento deste trabalho, é herdado. Mesmo efeito: sem URL válida, não tem resposta nenhuma pra basear schema. |
| 403/404 mesmo com GUID e token corretos, sem causa confirmada | As 8 listadas acima em "schema de erro" | Provável restrição de permissão da API pra esse tipo de conta (ex.: /adm/* pode ser escopo de backoffice, não de administradora comum) — não confirmado. O formato do erro já está coberto por schema; o que falta é investigar se o 403/404 em si é esperado ou um bug de permissão. |
Nota de escopo mais ampla: avaliamos gerar um spec OpenAPI formal (schema centralizado, sincronizado automaticamente com a collection via MCP do Postman) e descartamos — sem ganho claro pro tamanho atual do projeto. O JSON Schema por request acima é a versão simples desse mesmo objetivo (validar campo/tipo), sem precisar de um spec separado nem de sincronização via MCP. Se o projeto crescer a ponto de precisar de schema centralizado/versionado, reavaliar a ideia do spec formal do zero.
Inventário de testes por módulo
Todo it() que existe hoje, agrupado por módulo/função do sistema (não por pasta) — pra ver de
uma vez o que já está coberto e o que falta. Categoria = pasta onde mora (ver
Smoke, sanity, regressão e testes pontuais
no README).
Login
| Categoria | Spec | Testa |
|---|---|---|
| Pontual | login.cy.js |
Login válido (usuário/senha + 2FA); erro com credenciais inválidas |
| Sanity | loginSanity.cy.js |
Login completo, chega no dashboard |
| Smoke | smoke.cy.js |
Dashboard carrega após login |
Aplicações
| Categoria | Spec | Testa |
|---|---|---|
| Pontual | aplicacao.cy.js |
Campo obrigatório em branco barra salvar; preenche nome e confere valor (não salva) |
| Sanity | aplicacaoSanity.cy.js |
Abre modal "Nova Aplicação", fecha sem salvar |
| Smoke | smoke.cy.js |
Tela "Aplicações" carrega; "DDA > Aplicações" carrega |
Contas Correntes
| Categoria | Spec | Testa |
|---|---|---|
| Pontual | contaCorrente.cy.js |
14 filtros, 1 por 1: Guid, Razão Social, CNPJ, Código Banco, Agência, Conta Corrente, Status, Status Aprovação, Aplicação, Principal, Conta Geradora, Data Cadastro, Data Modificação, Data Última Aprovação |
| Pontual | contaCorrente.cy.js |
Botão "Limpar Seleção" zera filtros e volta a listar tudo |
| Regressão | contaCorrenteRegressao.cy.js |
Filtro Agência/Conta com dígito verificador zera resultado (bug já confirmado); combinação sem dígito acha o registro |
| Sanity | contaCorrenteSanity.cy.js |
Filtro Status "Ativa" retorna ≥ 1 resultado |
| Smoke | smoke.cy.js |
Tela "Contas Correntes" carrega |
Contas Geradoras
| Categoria | Spec | Testa |
|---|---|---|
| Pontual | contaGeradora.cy.js |
Campo obrigatório em branco barra salvar; preenche tudo e confere (não salva) |
| Pontual (dado real) | contaGeradora.cy.js |
Salva de verdade com todos os campos — cria registro real |
| Sanity | contaGeradoraSanity.cy.js |
Abre a tela de Cadastro |
| Smoke | smoke.cy.js |
"Cadastro", "Distribuição Percentual", "Alteração em Lote" carregam |
Boletos
| Categoria | Spec | Testa |
|---|---|---|
| Pontual (dado real) | boletoViaApi.cy.js |
Boleto padrão e customizado (dados no modal de Detalhes); vencimento retroativo → ERRO_VALIDACAO; cancelamento → PEDIDO_CANCELAMENTO; remessa com 2 boletos, cada um com guid próprio |
| Pontual (dado real) | boletoSimulaErroEmissao.cy.js |
Token inválido → 403; condomínio inexistente → 404; CPF/CNPJ faltando → 500 (bug real, vaza stack trace); código externo repetido → 400 |
| Regressão | boletoRegressao.cy.js |
8 comportamentos: token inválido (403), condomínio inexistente (404), código duplicado (400), guid provisório ≠ guid real, cancelamento (PEDIDO_CANCELAMENTO), retroativo (ERRO_VALIDACAO), guid de Condomínio aceito, guid de Administradora deveria ser barrado (ainda não é — demanda em andamento) |
| Regressão + Segurança | boletoGuidExistenteRegressao.cy.js |
Condomínio real sem relação com a Aplicação é aceito (sem checagem de posse); guid de Administradora no lugar de Condomínio deveria ser barrado — ainda não é |
| Segurança (dado real) | boletoCancelamentoCrossTenant.cy.js |
Administradora sem relação nenhuma NÃO consegue cancelar boleto alheio (BOLA/IDOR) |
| Segurança | autenticacaoObrigatoria.cy.js |
Gerar Boleto, Buscar Boletos, Cancelar Boleto — cada um sem AuthCG e com AuthCG inválido (6 checagens) |
| Sanity | boletoSanity.cy.js |
Busca por Guid conhecido, acha 1 resultado |
| Smoke | smoke.cy.js |
"Boletos", "Remessa", "Notificações > Boletos" (Geral/Bolepix), "DDA > Boletos" carregam |
Subconta
| Categoria | Spec | Testa |
|---|---|---|
| Pontual (dado real, irreversível) | subconta.cy.js |
Habilita subconta de verdade; CNPJ duplicado vira subconta da subconta; CNPJ duplicado SEM permissão é barrado |
Relatórios
| Categoria | Spec | Testa |
|---|---|---|
| Pontual (dado real) | relatorios.cy.js |
Os 11 tipos, 1 por 1 (Boletos Gerados, Boletos Pagos Mensal, Cadastro Condomínios, DIMP Clientes, DIMP Transações, Financeiro, Indicação de Churn, Projeção de MRR, Transferências Pagas, Zoho Boletos Pagos Core/VS): gera com sucesso + bloqueia repetição em menos de 15 min |
| Regressão | relatorioRegressao.cy.js |
"Transferências Pagas" sem Guid Administradora/Condomínio não dispara request nenhum |
| Sanity | relatorioSanity.cy.js |
Aba "Visualizar Relatório" abre, sem gerar nada |
| Smoke | smoke.cy.js |
Tela "Relatórios" carrega |
Segurança (cruza módulos)
| Categoria | Spec | Testa |
|---|---|---|
| Segurança | autenticacaoObrigatoria.cy.js |
Cria Administradora sem/com Api-Key/Application inválidos; Cria Condomínio, Gerar Boleto, Buscar Boletos, Cancelar Boleto, Criar Conta Corrente ADM — cada um sem/com AuthCG inválido. 12 checagens, nenhuma cria dado real |
| Segurança (dado real) | boletoCancelamentoCrossTenant.cy.js |
Cross-tenant em Cancelar Boleto (ver Boletos, acima) |
| Regressão + Segurança | boletoGuidExistenteRegressao.cy.js |
Falta de checagem de posse na remessa (ver Boletos, acima) |
Backlog de segurança (priorizado)
Consolidado em 28/08/2026 — antes vivia espalhado em comentários soltos por vários arquivos. 2 de 2 endpoints de Entidade testados pra cross-tenant já confirmaram falta de checagem de posse — por isso os outros endpoints de Entidade (mesma família, mesmo padrão de teste) entram como alta prioridade, não como "seria bom ter".
⚠️ Gravidade real das 4 linhas "cross-tenant" abaixo (Gerar Boleto, Cancelar Boleto, Buscar
Boletos, Cria Condomínio) depende de uma pergunta ainda sem resposta (esclarecido 02/09/2026):
o Core é ferramenta interna da Partner — a tela de backoffice mostrar qualquer
Administradora/Condomínio é o design, não bug. O token AuthCG de Entidade (o que essas 4 linhas
usam) é outra coisa — não confirmado se ele chega a ser usado por algum ERP externo do cliente
final, ou se é estritamente interno à Partner. Achado técnico (API não confere posse) continua
confirmado do mesmo jeito nos 2 casos — só muda se é exposição real entre clientes ou falta de
camada de proteção sem exploração ativa hoje. Perguntar isso pro time do Core junto do reporte.
| Prioridade | Item | Por quê | Status |
|---|---|---|---|
| 🔴 Aguardando correção do produto | Falta de posse em POST /contaDigital/remessa (Gerar Boleto) |
Confirmado — Administradora gera boleto pro Condomínio de outra | Travado em boletoGuidExistenteRegressao.cy.js; reportar pro time do Core |
| 🔴 Aguardando correção do produto | Falta de posse em POST .../boleto/{codigo}/cancelamento (Cancelar Boleto) |
Confirmado 2x — Administradora cancela boleto de outra | Travado em boletoCancelamentoCrossTenant.cy.js; reportar pro time do Core |
| 🔴 Aguardando correção do produto | POST /job/contas-digitais/atualizar-flag-emissao não exige autenticação |
Confirmado 01/09/2026 — roda mesmo sem AuthCG ou com AuthCG inválido, processa TODAS as contas digitais ativas. Possível regressão da migração Java 25/Spring Boot 3.5.7 (ver docs/historico-de-falhas.md) |
Travado em autenticacaoObrigatoria.cy.js; reportar pro time do Core |
| 🔴 Aguardando correção do produto | Cross-tenant em GET .../boletos (Buscar Boletos) |
Confirmado 02/09/2026 — Administradora B consulta boletos do Condomínio de A | Travado em contaDigitalCrossTenant.cy.js; reportar pro time do Core |
| 🔴 Aguardando correção do produto | Cross-tenant em POST /contaDigital/{guid} (Cria Condomínio) |
Confirmado 02/09/2026 — Administradora B cria Condomínio de verdade "dentro" da Administradora A, só sabendo o guid | Travado em contaDigitalCrossTenant.cy.js; reportar pro time do Core |
| ✅ Protegido, confirmado | Cross-tenant em POST .../contas-digitais/{guid}/contas-correntes (Criar Conta Corrente ADM) |
Confirmado 02/09/2026 — API rejeita corretamente | Travado em contaDigitalCrossTenant.cy.js, sem ação |
| 🟡 Média — precisa investigação antes | Rotas de backoffice (/adm/*: Editar Conta Digital, Configurar Conta Geradora, Habilitar Subconta, Inativar Conta Digital) |
Não é cross-tenant clássico (backoffice acessar qualquer entidade é o design) — a pergunta certa é "um token de Entidade também funciona nessas rotas?" (não confirmado, ver docs/regras-de-negocio.md#autenticação-e-permissões) |
Não investigado |
| ⚪ Descartado | Cross-tenant entre 2 sessões de backoffice | Não faz sentido — backoffice é por natureza uma sessão que acessa qualquer entidade, não teria "dono" pra violar | — |
Fonte: docs/regras-de-negocio.md#autenticação-e-permissões, conversa de 28/08/2026 sobre
próximos passos pós-confirmação dos 2 achados.
Convenção: toda API nova exige teste de autenticação
Regra, a partir de 01/09/2026 (decisão explícita do usuário): toda vez que este projeto passa
a usar de verdade um endpoint novo (Postman confirma o contrato, um Cypress spec chama ele pela
1ª vez), esse endpoint precisa ganhar 2 it()s em
autenticacaoObrigatoria.cy.js — mesmo
padrão dos já existentes: chamar sem o header de auth, e chamar com um valor inválido;
esperar que nenhum dos dois "funcione" (expectNaoFuncionaSemAutenticacao — status fora de
[200, 201, 202, 204]).
Por que essa regra existe: o job atualizarFlagEmissao (ver entrada de 01/09/2026 em
docs/historico-de-falhas.md) ficou semanas sem esse teste — só foi descoberto que ele não
exigia mais autenticação (possível regressão da migração Java 25/Spring Boot 3.5.7) porque o
usuário pediu explicitamente pra confirmar isso numa demanda específica. Sem o teste automatizado
rodando desde o começo, uma regressão de segurança dessas passa despercebida indefinidamente — o
mesmo risco existe agora pras ~30 rotas novas de ADM/ContaDigital/ADM/ContaDigitalApi
descobertas em 31/08/2026 (Postman) e ainda sem nenhum teste de autenticação escrito.
Onde essa regra bate no escopo já documentado do spec: o próprio autenticacaoObrigatoria.cy.js
hoje só cobre a API de Entidade (/api/v1/*) — as rotas de /adm/* (backoffice) ficaram de fora
por decisão de 26/08/2026 ("mecanismo de autenticação diferente, merece investigação própria").
Essa exclusão não é permanente — é só "ainda não investigado". A regra desta seção vale pra
qualquer rota nova, /api/v1/*, /adm/* ou /job/* — a decisão de 26/08 só adiou a tarefa pras
rotas de backoffice que já existiam na época, não isenta rotas novas.
Mapeamento completo (feito em 01/09/2026, baseado em uso real — grep em todo cypress/
pelas chamadas config.baseUrl/config.adminBaseUrl, não em achismo):
| Status | Endpoint | Onde é usado | Mecanismo de auth |
|---|---|---|---|
| ✅ Testado | POST /credenciamento (Cria Administradora) |
autenticacaoObrigatoria.cy.js + toda spec que cria Administradora |
Api-Key+Application |
| ✅ Testado | POST /contaDigital/{guid} (Cria Condomínio) |
idem | AuthCG (Entidade) |
| ✅ Testado | POST /contaDigital/remessa (Gerar Boleto) |
idem | AuthCG (Entidade) |
| ✅ Testado | GET /contaDigital/{guid}/boletos (Buscar Boletos) |
idem | AuthCG (Entidade) |
| ✅ Testado | POST .../boleto/{codigo}/cancelamento (Cancelar Boleto) |
idem | AuthCG (Entidade) |
| ✅ Testado | POST /contas-digitais/{guid}/contas-correntes (Criar Conta Corrente ADM) |
idem | AuthCG (Entidade) |
| ✅ Testado | POST /job/contas-digitais/atualizar-flag-emissao (Job) |
manual/Postman | AuthCG (achado: não exigia, ver acima) |
| 🔴 Usado, SEM teste — maior prioridade | PUT /adm/contas-digitais/{guid}/configuracoes/boleto (Configurar Conta Geradora) |
commands.js (definirContaGeradora), boletoRegressao.cy.js, boletoCancelamentoCrossTenant.cy.js, boletoSimulaErroEmissao.cy.js, subconta.cy.js |
tokenSessao (sessão de backoffice via cy.login(), 2FA — diferente do resto, é o motivo da exclusão de /adm/* em 26/08) |
| 🟡 Candidato (existe no Postman, nunca usado de verdade no Cypress) | contas-correntes-subconta, remessa/{guid}/requisicao, termo-aceite, origem-movimentacao, transfeera/*, legal-person/* (todos /api/v1) |
— | AuthCG (Entidade) |
| 🟡 Candidato (achado 31/08, nunca usado) | ~19 rotas de ADM/ContaDigital (/adm/contas-digitais/*) |
Postman, pasta "ADM/ContaDigital" | Provável tokenSessao (mesma família de /adm/* acima — não confirmado individualmente) |
| 🟡 Candidato (achado 31/08, nunca usado) | 7 rotas de ADM/ContaDigitalApi (/adm/conta-digital-api/*) |
Postman, pasta "ADM/ContaDigitalApi" | Idem |
| ⚪ Não mapeado ainda | ADM/BancoGeradorAlteracao, Routes (start/stop integrador) |
Swagger, nunca explorado | Desconhecido |
Por que a linha 🔴 importa mais que as 🟡: é a única que já está em uso real, ativo, em vários
specs — exatamente o padrão que o job (atualizarFlagEmissao) mostrou ser arriscado deixar sem
teste. As 🟡 ainda nem têm confirmação de que fazem parte do fluxo real de algum teste, então o
risco de "regressão silenciosa" é menor (ninguém depende delas ainda).
Ainda não implementado — precisa de decisão antes: testar a linha 🔴 exige logar via
cy.login() (2FA) pra conseguir um tokenSessao válido antes de testar sem/com ele inválido —
mais pesado que os testes atuais (só precisam de /auth com credenciais de Aplicação, sem 2FA).
As linhas 🟡 dependem de confirmar o payload mínimo válido de cada endpoint contra a API real
antes de escrever qualquer teste (mesma regra de sempre: nunca no chute).
Smoke — só "a tela carrega" (sem módulo de negócio próprio)
Unidade Organizacional, Usuários (Listar/Perfil), Contas Digitais Boleto, Termos Aceite, Conta
Condominial (Geral/Dashboard/Despesas/Webhook), Integrador, Notificações > Cadastros, DDA >
Empresas, DDA > Consumo — 13 telas cobertas só por smoke.cy.js, sem spec pontual/regressão
próprio ainda.
Inventário de testes por tipo
Mesmo conjunto de testes do inventário acima, agora agrupado por categoria/pasta em vez de
módulo — 1 linha por spec, não por it() (contagem exata em cada linha).
Smoke (smoke/) — 26 testes
A tela carrega, sem quebrar? Raso, roda rápido, não valida regra de negócio nenhuma.
| Spec | Qtd | Cobre |
|---|---|---|
smoke.cy.js |
26 | Todo item do menu lateral carrega, sem checar regra de negócio |
Sanity (sanity/) — 6 testes
A área que acabou de sofrer deploy pontual ainda funciona? 1 ação rápida real por módulo, meio-termo entre smoke e regressão/pontual.
| Spec | Qtd | Cobre |
|---|---|---|
loginSanity.cy.js |
1 | Login completo |
contaCorrenteSanity.cy.js |
1 | Filtro Status "Ativa" |
boletoSanity.cy.js |
1 | Busca por Guid conhecido |
relatorioSanity.cy.js |
1 | Aba "Visualizar Relatório" |
aplicacaoSanity.cy.js |
1 | Modal "Nova Aplicação" |
contaGeradoraSanity.cy.js |
1 | Tela de Cadastro abre |
Casos de teste (casos_de_teste/) — 14 testes
Um bug específico, já confirmado antes, voltou? 1:1 com uma entrada de historico-de-falhas.md.
(Nomenclatura trocada em 09/09/2026 — este era o conteúdo de regressao/ antes disso.)
| Spec | Qtd | Trava |
|---|---|---|
boletoRegressao.cy.js |
8 | Token inválido, condomínio inexistente, código duplicado, guid provisório, cancelamento, retroativo, guid Condomínio/Administradora no campo codigo |
boletoGuidExistenteRegressao.cy.js |
2 | Falta de checagem de posse; guid de Administradora no lugar de Condomínio |
contaCorrenteRegressao.cy.js |
3 | Filtro Agência/Conta com dígito verificador |
relatorioRegressao.cy.js |
1 | "Transferências Pagas" sem Guid não dispara request |
Segurança (seguranca/) — 12 testes
Varredura sistemática de autorização/autenticação, cruzando módulos — não é por tela, é por preocupação de segurança.
| Spec | Qtd | Confirma |
|---|---|---|
autenticacaoObrigatoria.cy.js |
12 | Toda API de Entidade exige autenticação (6 endpoints, sem/com credencial inválida) |
Regressão — cria dado real (regressao/<módulo>/) — 27 testes
Regra de negócio de ponta a ponta, fundo — cria Administradora/Condomínio/Boleto de verdade em
homologação a cada execução (ver SPECS_COM_DADOS_REAIS em scripts/specs-utils.js — nomenclatura
trocada em 09/09/2026, era casos_de_teste/com_dados/ antes disso).
| Spec | Qtd | Valida |
|---|---|---|
relatorios.cy.js |
11 | Os 11 tipos de relatório, geração + bloqueio de 15 min |
boletoViaApi.cy.js |
5 | Boleto via API, dados na tela, cancelamento, remessa múltipla |
boletoSimulaErroEmissao.cy.js |
4 | Erros reais da API de Gerar Boleto (403/404/500/400) |
contaGeradora.cy.js |
3 | Validação de formulário + salva de verdade |
subconta.cy.js |
3 | Habilitar subconta (irreversível), CNPJ duplicado |
boletoCancelamentoCrossTenant.cy.js |
1 | BOLA/IDOR em Cancelar Boleto |
Regressão — sem dado real (regressao/<módulo>/) — 19 testes
Mesma profundidade da linha acima, mas seguro de rodar a qualquer momento — sem efeito colateral
real (nomenclatura trocada em 09/09/2026, era casos_de_teste/sem_dados/ antes disso).
| Spec | Qtd | Valida |
|---|---|---|
contaCorrente.cy.js |
15 | 14 filtros + botão "Limpar Seleção" |
login.cy.js |
2 | Login válido + credenciais inválidas |
aplicacao.cy.js |
2 | Campo obrigatório + preenchimento sem salvar |