teqo-backup/tests/e2e
Francisco Solla 3ce5a69555 feat(S11): feed do Instagram configurado não aparece na home — painel de status da sincronização no admin
O fail-closed silencioso da S3 deixava a assessoria cega: token errado não deixava
rastro além do picker vazio. Fim da caixa-preta:

- `instagramSyncStatus` (jsonb hidden) na global `social-feed-settings`, escrito pelo
  render, pelo afterChange (sync awaited quando a credencial IG muda) e pela rota
  `POST /api/social-feed/sync` (botão, auth admin + same-origin).
- `InstagramApiError` + `describeInstagramError`: o fetch parseia o body de erro da
  Graph API e o mapeia para copy pt-BR com a correção (OAuthException/expired →
  "token inválido/expirado ou emitido via Facebook Login — gere pelo Instagram Login";
  "Invalid user id" → confira o ID; 5xx → indisponível; TypeError → rede; AbortError →
  demorou demais). O ID só casa com "user" E "id" juntos (token rejections real falam
  "the user must be logged in" — não podem virar a branch de ID).
- `InstagramSyncStatusPanel` (campo ui irmão do picker): 5 estados fiéis ao rascunho;
  gate respeita o master `enabled`; `outcome` transiente limpo ao editar credencial;
  aria-live nos boxes interativos. Home inalterada (fail-closed intacto).
- Bug real: `afterChange` roda dentro da transação do save (row lock até os hooks
  retornarem); persistir o status via pool numa 2ª conexão deadlockava no lock da
  própria linha (~80-230s/save). Fix: persists do sync-hook na MESMA transação via
  `getPostgresTransactionDatabase` (C6); render/rota sem transação seguem no pool.
  Diagrama: UPDATE transactionid Lock vs idle in transaction; fix verificado 45ms vs 232s.
- Stub IG ganha estado `invalid-token`; runbook docs/ops/instagram-feed-token-runbook.md;
  migration add_instagram_sync_status (jsonb nullable).
- Débitos registrados: #124 (janela de lock) e #125 (polish P3).
- Gates: unit 2463 + int 791; lint/format/tsc/cycles; build; e2e admin 5/5 + frontend serial 19/19.
2026-08-20 00:54:58 -03:00
..
fixtures feat(C143): demandas visíveis apenas para responsáveis explícitos + candidato/coordenador 2026-08-19 23:55:07 -03:00
helpers feat(C101): agenda mobile com cara de app nativo — contexto no header, swipe, filtro sticky, dia na hora atual 2026-08-09 22:09:47 -03:00
admin.e2e.spec.ts feat(S11): feed do Instagram configurado não aparece na home — painel de status da sincronização no admin 2026-08-20 00:54:58 -03:00
campaign-pwa.e2e.spec.ts Add installable PWA foundation for the /campanha field app. 2026-07-18 17:28:34 -03:00
campaignActivity.e2e.spec.ts fix(e2e C104): clica no slot 14:00 da coluna de hoje, não no centro da linha de hora 2026-08-17 02:53:02 -03:00
campaignAgendaFeed.e2e.spec.ts fix(C113): feed iCal da agenda vivo — contrato de frescor no lugar do snapshot congelado 2026-08-11 08:42:42 -03:00
campaignAgendaGoogleSync.e2e.spec.ts fix(C115): e2e do FAB do espelho assere o FAB, não o título mobile (C101 troca por rótulo do período — flake sob carga) 2026-08-12 12:22:06 -03:00
campaignAgendaMobile.e2e.spec.ts feat(C110+): preview do arrasto — indicadores ancorados ao frame, gradiente deduplicado, e2e do direction prev 2026-08-10 20:38:04 -03:00
campaignAiChatFollowUps.e2e.spec.ts test(OPS42): e2e dev — quiescência do router antes de interagir (login + chat Sollinha) (Closes #691) 2026-08-12 15:03:20 -03:00
campaignAiChatOpeningChips.e2e.spec.ts test(OPS42): e2e dev — quiescência do router antes de interagir (login + chat Sollinha) (Closes #691) 2026-08-12 15:03:20 -03:00
campaignAiChatResize.e2e.spec.ts test(OPS42): e2e dev — quiescência do router antes de interagir (login + chat Sollinha) (Closes #691) 2026-08-12 15:03:20 -03:00
campaignAiLinks.e2e.spec.ts test(OPS42): e2e dev — quiescência do router antes de interagir (login + chat Sollinha) (Closes #691) 2026-08-12 15:03:20 -03:00
campaignAiTranscribe.e2e.spec.ts test(OPS42): e2e dev — quiescência do router antes de interagir (login + chat Sollinha) (Closes #691) 2026-08-12 15:03:20 -03:00
campaignAuth.e2e.spec.ts Engineering Pass 3: consolidate patterns and lock them with guards. 2026-07-29 06:11:29 -03:00
campaignBottomNav.e2e.spec.ts feat(C139): domínio de contatos — URL state, loader com vínculos e invariante de nome 2026-08-13 14:05:24 -03:00
campaignColumnPicker.e2e.spec.ts chore(B197+): picker de colunas de assessores derivado da mesma fonte do AdvisorsTable (#642) 2026-08-11 14:40:24 -03:00
campaignConcepts.e2e.spec.ts fix(C139): specs do leader home apontam para meus-contatos (decisão A) 2026-08-13 16:04:36 -03:00
campaignContacts.e2e.spec.ts fix(C139): e2e campaignContacts não vaza contatos criados pela UI 2026-08-13 15:51:15 -03:00
campaignDemandVisibility.e2e.spec.ts feat(C143): demandas visíveis apenas para responsáveis explícitos + candidato/coordenador 2026-08-19 23:55:07 -03:00
campaignHomeActions.e2e.spec.ts fix(C139): specs do leader home apontam para meus-contatos (decisão A) 2026-08-13 16:04:36 -03:00
campaignIosInputZoom.e2e.spec.ts fix(campanha): impede auto-zoom do iOS em inputs do PWA (B183) 2026-08-09 18:54:33 -03:00
campaignLeaderships.e2e.spec.ts feat(C131): Salvador como opção agregada no dropdown de municípios das células de capacidade 2026-08-12 14:02:34 -03:00
campaignMunicipalities.e2e.spec.ts feat(C139): domínio de contatos — URL state, loader com vínculos e invariante de nome 2026-08-13 14:05:24 -03:00
campaignMunicipalityResponsiveColumns.e2e.spec.ts feat(campaign): Tendência migra para Ações ao colapsar a coluna (B172) 2026-08-09 13:36:04 -03:00
campaignNearestMunicipality.e2e.spec.ts B43: blank Início, Quadro staff home, and Contatos for leaders. 2026-07-29 14:02:35 -03:00
campaignNewsletter.e2e.spec.ts feat(S9): captura de novidades da campanha na home pública (form + CTA do hero) 2026-08-20 02:19:58 +00:00
campaignPeople.e2e.spec.ts feat(C139): domínio de contatos — URL state, loader com vínculos e invariante de nome 2026-08-13 14:05:24 -03:00
campaignRegisterDemand.e2e.spec.ts feat(C139): domínio de contatos — URL state, loader com vínculos e invariante de nome 2026-08-13 14:05:24 -03:00
campaignSavedFilters.e2e.spec.ts feat(C102): sem hamburger/sheet de sidebar no mobile staff — navegação pela barra + Mais 2026-08-09 19:13:43 -03:00
campaignSollinhaContext.e2e.spec.ts test(OPS42): e2e dev — quiescência do router antes de interagir (login + chat Sollinha) (Closes #691) 2026-08-12 15:03:20 -03:00
campaignSollinhaWidth.e2e.spec.ts refactor(B166): endurece e2e (poll determinístico) e clamp exato após revisão 2026-08-08 16:04:54 -03:00
campaignTableStickyHeader.e2e.spec.ts fix(D7): sticky dos headers das tabelas desktop volta a engajar (overflow-x-clip) 2026-08-10 09:11:38 -03:00
campaignTerritoriesColumns.e2e.spec.ts test(OPS35+): restaurar pin de browser da visibilidade CSS das colunas de rede em Territórios (Closes #616) 2026-08-10 21:28:52 -03:00
campaignTerritoriesHttp.e2e.spec.ts feat(C139): domínio de contatos — URL state, loader com vínculos e invariante de nome 2026-08-13 14:05:24 -03:00
campaignUpdatesMobile.e2e.spec.ts test(B193): e2e robustos — cards ancorados pelo link exato do nome e C106 com timestamps determinísticos 2026-08-10 11:23:49 -03:00
campaignWebAuthn.e2e.spec.ts fix(e2e): first() em asserts com duplicação transitória de RSC pending (flake pré-existente, base reproduz) 2026-08-09 04:37:27 -03:00
campaignWizardChrome.e2e.spec.ts style: prettier e2e wizard specs 2026-08-01 18:45:01 +00:00
campaignZoneMap.e2e.spec.ts test(e2e): assert entity identity in shell chrome (B145) 2026-08-03 00:29:48 +00:00
frontend.e2e.spec.ts feat(S11): feed do Instagram configurado não aparece na home — painel de status da sincronização no admin 2026-08-20 00:54:58 -03:00
instagram-stub.mjs feat(S11): feed do Instagram configurado não aparece na home — painel de status da sincronização no admin 2026-08-20 00:54:58 -03:00
seedParity.setup.e2e.spec.ts ops28(OPS28): worktrees rodam o seed mínimo no provisionamento — e2e local espelha a CI 2026-08-10 16:11:27 -03:00
setup.e2e.spec.ts feat(C139): domínio de contatos — URL state, loader com vínculos e invariante de nome 2026-08-13 14:05:24 -03:00
youtube-stub.mjs feat(S2): seção de conteúdos da home de campanha inclui os vídeos do YouTube 2026-08-18 15:23:50 -03:00