teqo-backup/tests/unit/municipalityMapNavigation.unit.spec.ts
Francisco Ignácio Fontoura Solla 84e796ab49 B8 F2: polígonos das ZE de Salvador e re-keying do coroplético por map key
Salvador era um polígono só carregando os votos da cidade inteira, então o
coroplético não conseguia responder "qual pedaço de Salvador está fraco / é
meu". As 19 ZE ganham polígono próprio, dissolvido da malha de bairros do IBGE
(Censo 2022) pela lista de circunscrição da RA 02/2017 do TRE-BA, e o mapa passa
a pintar por map key (slug para as zonas, ibgeCode para o resto) em vez de
codarea. O polígono municipal de Salvador continua desenhado por baixo, sem dado
e sem interação, para não abrir buraco no contorno do estado.

Aproximação declarada na copy e no cabeçalho do script: o TRE publica a
circunscrição como lista de bairros, então o bairro é o átomo geométrico —
Periperi, que a resolução corta na Rua das Pedrinhas, vai inteiro para a ZE 17.
competitiveRank segue por cidade (o artefato TSE só tem federalRankByIbgeCode).

Sem migration, sem collection, sem action, sem Consent.
2026-07-26 23:08:09 -03:00

70 lines
2.4 KiB
TypeScript

import { describe, expect, it } from 'vitest'
import {
buildMunicipalitiesByIbgeCode,
buildMunicipalitiesByMapKey,
mapKeyForMunicipality,
resolveMunicipalityMapNavigation,
} from '@/utilities/municipalityMapNavigation'
const abaira = { slug: 'abaira', name: 'Abaíra', ibgeCode: '2900108', kind: 'municipio' } as const
const salvadorZe1 = {
slug: 'salvador-ze-1',
name: 'Salvador — ZE 1',
ibgeCode: '2927408',
kind: 'zona',
} as const
const salvadorZe2 = {
slug: 'salvador-ze-2',
name: 'Salvador — ZE 2',
ibgeCode: '2927408',
kind: 'zona',
} as const
describe('municipalityMapNavigation', () => {
it('buildMunicipalitiesByIbgeCode groups municipalities by ibgeCode and sorts by name', () => {
const result = buildMunicipalitiesByIbgeCode([salvadorZe2, salvadorZe1, abaira])
expect(result['2900108']).toEqual([{ slug: 'abaira', name: 'Abaíra' }])
expect(result['2927408']).toEqual([
{ slug: 'salvador-ze-1', name: 'Salvador — ZE 1' },
{ slug: 'salvador-ze-2', name: 'Salvador — ZE 2' },
])
})
it('keys zone municipalities by slug and everything else by codarea', () => {
expect(mapKeyForMunicipality(abaira)).toBe('2900108')
expect(mapKeyForMunicipality(salvadorZe1)).toBe('salvador-ze-1')
})
it('gives every zone its own map key instead of pooling them under the city', () => {
const byMapKey = buildMunicipalitiesByMapKey([salvadorZe1, salvadorZe2, abaira])
expect(Object.keys(byMapKey).sort()).toEqual(['2900108', 'salvador-ze-1', 'salvador-ze-2'])
expect(byMapKey['2927408']).toBeUndefined()
expect(byMapKey['salvador-ze-2']).toEqual({
slug: 'salvador-ze-2',
name: 'Salvador — ZE 2',
})
})
it('resolveMunicipalityMapNavigation returns none for an unknown or empty key', () => {
const byMapKey = buildMunicipalitiesByMapKey([abaira])
expect(resolveMunicipalityMapNavigation('9999999', byMapKey)).toEqual({ kind: 'none' })
expect(resolveMunicipalityMapNavigation('2900108', {})).toEqual({ kind: 'none' })
})
it('resolveMunicipalityMapNavigation opens the unit behind the key, zone included', () => {
const byMapKey = buildMunicipalitiesByMapKey([abaira, salvadorZe1])
expect(resolveMunicipalityMapNavigation('2900108', byMapKey)).toEqual({
kind: 'navigate',
slug: 'abaira',
})
expect(resolveMunicipalityMapNavigation('salvador-ze-1', byMapKey)).toEqual({
kind: 'navigate',
slug: 'salvador-ze-1',
})
})
})