teqo/tests/unit/advisorMunicipalityPortfolio.unit.spec.ts

73 lines
2.5 KiB
TypeScript

import { describe, expect, it } from 'vitest'
import {
buildAdvisorPortfolioChips,
catalogEntriesForTseZone,
searchAdvisorPortfolio,
type AdvisorMunicipalityIndexEntry,
} from '@/lib/advisorMunicipalityPortfolio'
import { citiesForTerritory } from '@/lib/bahiaTerritories'
import { municipalityCatalog } from '@/lib/municipalityCatalog'
const buildIndex = (): AdvisorMunicipalityIndexEntry[] =>
municipalityCatalog.map((entry, index) => ({
id: index + 1,
name: entry.name,
slug: entry.slug,
region: entry.region,
city: entry.city,
zoneNumber: entry.zoneNumber ?? null,
}))
describe('advisorMunicipalityPortfolio', () => {
it('collapses a full identity territory into a single chip', () => {
const index = buildIndex()
const irece = citiesForTerritory('Irecê')
const assigned = index
.filter((entry) => irece.includes(entry.city))
.map((entry) => ({ id: entry.id, name: entry.name, slug: entry.slug }))
const chips = buildAdvisorPortfolioChips(assigned, index)
expect(chips).toHaveLength(1)
expect(chips[0]).toMatchObject({ kind: 'territory', label: 'Irecê' })
})
it('keeps partial territory membership as municipality chips', () => {
const index = buildIndex()
const one = index.find((entry) => entry.city === 'Irecê')
expect(one).toBeTruthy()
const chips = buildAdvisorPortfolioChips(
[{ id: one!.id, name: one!.name, slug: one!.slug }],
index,
)
expect(chips).toEqual([
{
kind: 'municipality',
key: `municipality:${one!.id}`,
label: one!.name,
municipalityId: one!.id,
slug: one!.slug,
},
])
})
it('resolves Salvador ZE to the zone municipality entry only', () => {
const entries = catalogEntriesForTseZone(3)
expect(entries).toHaveLength(1)
expect(entries[0]?.slug).toBe('salvador-ze-3')
})
it('searches municipalities, territories and zones', () => {
const index = buildIndex()
const municipalityHits = searchAdvisorPortfolio('Feira', index, new Set())
expect(municipalityHits.some((hit) => hit.kind === 'municipality')).toBe(true)
const territoryHits = searchAdvisorPortfolio('Irecê', index, new Set())
expect(territoryHits.some((hit) => hit.kind === 'territory' && hit.label === 'Irecê')).toBe(
true,
)
const zoneHits = searchAdvisorPortfolio('ZE 3', index, new Set())
expect(zoneHits.some((hit) => hit.kind === 'zone' && hit.zoneNumber === 3)).toBe(true)
})
})