From 5a52bb0efa566d6d6ebe0801048a76c8091be817 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Francisco=20Ign=C3=A1cio=20Fontoura=20Solla?= Date: Mon, 3 Aug 2026 23:13:01 -0300 Subject: [PATCH] =?UTF-8?q?fix(int):=20batch=20B19=20usa=20munic=C3=ADpios?= =?UTF-8?q?=20alocados=20=E2=80=94=20remove=20ra=C3=A7a=20com=20cap=20de?= =?UTF-8?q?=20assessores?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit O teste 'assigns and removes multiple municipalities in one batch' escolhia o segundo município com id not_equals cru; sob ~48 workers paralelos podia cair num município que um spec paralelo (cap 10 do B27/B154) acabara de encher, fazendo o batch estourar o teto. getMunicipality() aloca município globalmente único e purga resíduo. --- ...ar-assessor-inline-popover-municipios-impl.md | 5 +++++ tests/int/campaignAdvisorManagement.int.spec.ts | 16 ++++++---------- 2 files changed, 11 insertions(+), 10 deletions(-) diff --git a/docs/plans/criar-assessor-inline-popover-municipios-impl.md b/docs/plans/criar-assessor-inline-popover-municipios-impl.md index 142cd3cf..cbb22d8b 100644 --- a/docs/plans/criar-assessor-inline-popover-municipios-impl.md +++ b/docs/plans/criar-assessor-inline-popover-municipios-impl.md @@ -140,3 +140,8 @@ Três revisores paralelos (qualidade, reuso/DRY, comportamento) no diff do B154; - Reconcile assume commit na ordem de envio (machinery-wide do B27, toggle compartilha): um interleave raro pode dropar o chip do create até a próxima navegação. **Gatilho:** chip sumindo observado em produção. **Descartado:** renomear `isPlanilhaPlaceholderEmail` (drive-by de 4 call sites pré-existentes); alias table do E4R no stub (TLDs distintos, sem colisão); `payload-types.ts` com drift do B134 (regenerado por cada run e2e — pertence à entrega do B134). + +**Pré-existente documentado (não é débito do B154):** + +- **Raça do batch B19** (`campaignAdvisorManagement.int.spec.ts`): o teste escolhia o 2º município com `id not_equals` cru — podia cair num município que um spec paralelo acabara de encher até o cap 10. Os testes de cap do B154 agravaram a probabilidade. **Fixado neste PR**: `getMunicipality()` nos dois municípios (alocação globalmente única + purga de resíduo). +- **Flake pré-existente `testDatabaseLease` × `onda0Provision`** (`~1 em 4–5 runs`, ~48 workers paralelos): `onda0Provision.int.spec.ts` grava os textos Onda 0 (banner "Texto provisório…") na mesma row `lideranca-autopreenchimento` que `withMutableConsentFixture` muta/restaura — os dois specs de infra disputam a row sem coordenação. Reproduz em main limpo; nenhuma relação com B154 (nenhum arquivo deste PR toca consent/lease). Fix exige coordenação entre os dois specs de infra (ex.: onda0Provision respeitar o lease) — fora do escopo desta entrega, registrado aqui para não se perder. diff --git a/tests/int/campaignAdvisorManagement.int.spec.ts b/tests/int/campaignAdvisorManagement.int.spec.ts index 865e981e..867a033a 100644 --- a/tests/int/campaignAdvisorManagement.int.spec.ts +++ b/tests/int/campaignAdvisorManagement.int.spec.ts @@ -199,17 +199,13 @@ describe('campaign advisor management (B19)', () => { const fixtures = campaignFixtures() const coordinator = await fixtures.createCampaignUser('coordinator') const advisor = await fixtures.createCampaignUser('advisor') + // Both municipios go through the allocation mechanism: globally unique + // across parallel spec files AND purged of residue on claim. The old + // arbitrary `id not_equals` pick could land on a municipio a parallel test + // had just filled to the 10-advisor cap, making the batch throw. const first = await fixtures.getMunicipality() - const second = ( - await payload.find({ - collection: 'municipality', - where: { id: { not_equals: first.id } }, - limit: 1, - depth: 0, - overrideAccess: true, - }) - ).docs[0] - expect(second).toBeTruthy() + const second = await fixtures.getMunicipality() + expect(second.id).not.toBe(first.id) await setAdvisorMunicipalitiesBatchRecord(payload, coordinator, { advisorId: advisor.id,