teqo-backup/tests/int/wizardMunicipalitySuggestions.int.spec.ts
Cursor Agent dbf6a7fdce
B93 — wizard empty state continuity (visitados + última ação)
Merge client-side recent visits and last-acted municipality storage into
wizard municipality suggest idle list ahead of B92 server rankings.

- Add campaignLastActedMunicipality + wizardMunicipalitySuggestMerge libs
- Extend wizard-municipality-suggest with scopeMunicipalities for hit lookup
- Record last-acted on wizard write success (votes, signal, trend, leadership)
- Clear last-acted on logout alongside recent visits

Co-authored-by: Francisco Solla <fsolla@users.noreply.github.com>
2026-08-01 07:21:56 +00:00

54 lines
2 KiB
TypeScript

// @vitest-environment node
import type { Payload } from 'payload'
import { getPayload } from 'payload'
import { beforeAll, describe, expect, it } from 'vitest'
import config from '@/payload.config'
import { loadWizardMunicipalitySuggestions } from '@/utilities/homeSearch/loadWizardMunicipalitySuggestions'
import { installCampaignFixtures } from '../helpers/campaignFixtures'
let payload: Payload
const campaignFixtures = installCampaignFixtures({
getPayload: () => payload,
setPayload: (nextPayload) => {
payload = nextPayload
},
})
describe('loadWizardMunicipalitySuggestions (B92)', () => {
beforeAll(async () => {
payload = await getPayload({ config: await config })
})
it('returns up to eight scoped municipalities for coordinator', async () => {
const fixtures = campaignFixtures()
const coordinator = await fixtures.createCampaignUser('coordinator')
const result = await loadWizardMunicipalitySuggestions(payload, coordinator)
expect(result.resultKind).toBe('wizard-suggest')
expect(result.municipalities.length).toBeGreaterThan(0)
expect(result.municipalities.length).toBeLessThanOrEqual(8)
expect(result.scopeMunicipalities?.length).toBeGreaterThan(0)
})
it('scopes advisor suggestions to administered municipalities', async () => {
const fixtures = campaignFixtures()
const advisor = await fixtures.createCampaignUser('advisor')
const administered = await fixtures.getMunicipality()
await fixtures.assignMunicipalityAdvisors(administered.id, [advisor.id])
const result = await loadWizardMunicipalitySuggestions(payload, advisor)
expect(result.municipalities.every((hit) => hit.slug === administered.slug)).toBe(true)
})
it('rejects leaders from wizard municipality suggestions', async () => {
const fixtures = campaignFixtures()
const leader = await fixtures.createCampaignUser('leader')
await expect(loadWizardMunicipalitySuggestions(payload, leader)).rejects.toThrow(
/equipe de campanha/i,
)
})
})