teqo-backup/tests/unit/revalidateRequest.unit.spec.ts
Francisco Solla 269b3d9e3b feat(ops): CLI ops:global para flags de globais públicos (C247)
Grava um único campo do global via Local API e busta a tag no processo Next vivo pelo POST /api/revalidate (allowlist ampliada com REVALIDATE_PHOTO_ALBUM_CACHE_TAG), com guardas de escrita, plan/apply/verify, recibo com rollback e int pin do update parcial.
2026-10-02 10:10:16 -03:00

72 lines
2.7 KiB
TypeScript

// @vitest-environment node
import { describe, expect, it } from 'vitest'
import { getGlobalCacheTag } from '@/utilities/globals'
import { MUNICIPALITY_CATALOG_CACHE_TAG } from '@/utilities/municipality/municipalityCatalogCache'
import {
REVALIDATE_CONTENT_PIECES_TAG,
REVALIDATE_PHOTO_ALBUM_CACHE_TAG,
REVALIDATE_POSTS_TAG,
REVALIDATE_PRIVACY_POLICY_CACHE_TAG,
resolveRevalidateTag,
} from '@/utilities/revalidateRequest'
describe('resolveRevalidateTag', () => {
it('defaults to posts when no tag is provided', () => {
expect(resolveRevalidateTag(null, null)).toEqual({ ok: true, tag: REVALIDATE_POSTS_TAG })
expect(resolveRevalidateTag(undefined, undefined)).toEqual({
ok: true,
tag: REVALIDATE_POSTS_TAG,
})
expect(resolveRevalidateTag('', '')).toEqual({ ok: true, tag: REVALIDATE_POSTS_TAG })
})
it('accepts allowlisted tags from query or body', () => {
expect(resolveRevalidateTag('posts', null)).toEqual({ ok: true, tag: REVALIDATE_POSTS_TAG })
expect(resolveRevalidateTag(null, 'posts')).toEqual({ ok: true, tag: REVALIDATE_POSTS_TAG })
expect(resolveRevalidateTag(null, REVALIDATE_PRIVACY_POLICY_CACHE_TAG)).toEqual({
ok: true,
tag: REVALIDATE_PRIVACY_POLICY_CACHE_TAG,
})
expect(resolveRevalidateTag(MUNICIPALITY_CATALOG_CACHE_TAG, null)).toEqual({
ok: true,
tag: MUNICIPALITY_CATALOG_CACHE_TAG,
})
// C230-followup — the import CLI busts the Central's listing through here.
expect(resolveRevalidateTag(REVALIDATE_CONTENT_PIECES_TAG, null)).toEqual({
ok: true,
tag: REVALIDATE_CONTENT_PIECES_TAG,
})
// C247 — the ops CLI busts the photo album global it wrote outside Next.
expect(resolveRevalidateTag(REVALIDATE_PHOTO_ALBUM_CACHE_TAG, null)).toEqual({
ok: true,
tag: REVALIDATE_PHOTO_ALBUM_CACHE_TAG,
})
})
it('prefers query tag over body tag', () => {
expect(resolveRevalidateTag('posts', REVALIDATE_PRIVACY_POLICY_CACHE_TAG)).toEqual({
ok: true,
tag: REVALIDATE_POSTS_TAG,
})
})
it('rejects unknown tags', () => {
const result = resolveRevalidateTag('global_metadata', null)
expect(result.ok).toBe(false)
if (!result.ok) {
expect(result.error).toContain('Unknown tag')
expect(result.error).toContain(REVALIDATE_POSTS_TAG)
expect(result.error).toContain(REVALIDATE_PRIVACY_POLICY_CACHE_TAG)
}
})
it('maps privacy-policy global slug to the shared cache tag helper', () => {
expect(REVALIDATE_PRIVACY_POLICY_CACHE_TAG).toBe(getGlobalCacheTag('privacy-policy'))
})
it('maps the photo album global slug to the shared cache tag helper (C247)', () => {
expect(REVALIDATE_PHOTO_ALBUM_CACHE_TAG).toBe(getGlobalCacheTag('photoAlbum'))
})
})