fix(int): batch B19 usa municípios alocados — remove raça com cap de assessores

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.
This commit is contained in:
Francisco Ignácio Fontoura Solla 2026-08-03 23:13:01 -03:00
parent 26b2205c3a
commit 5a52bb0efa
2 changed files with 11 additions and 10 deletions

View file

@ -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.

View file

@ -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,