admin/lib/routing/eventRoute.test.ts
alisaza e1eaf5eff5 feat: initial ghabilee-admin backoffice app
Extract admin dashboard from ghabilee-frontend2 into a dedicated Next.js
app for backoffice.ghabilee.ir (no SEO indexing / Clarity).
2026-09-05 13:12:59 +03:30

33 lines
1.2 KiB
TypeScript

import { describe, expect, it } from 'vitest'
import {
isCanonicalEventLandingRoute,
isEventUuid,
isLegacyEventDetailRoute,
isLegacyEventLandingRoute,
isPublicEventSlug,
} from '@/lib/routing/eventRoute'
const eventId = '462f10ff-7466-4a58-9631-d09f02b76eaf'
describe('event route classification', () => {
it('keeps public slugs distinct from UUIDs and reserved application routes', () => {
expect(isPublicEventSlug('tehran-book-club')).toBe(true)
expect(isPublicEventSlug('new')).toBe(false)
expect(isPublicEventSlug(eventId)).toBe(false)
expect(isEventUuid(eventId)).toBe(true)
})
it('classifies canonical /e, UUID legacy, and /events legacy URLs independently', () => {
expect(isCanonicalEventLandingRoute('/e/tehran-book-club')).toBe(true)
expect(isCanonicalEventLandingRoute(`/e/${eventId}`)).toBe(false)
expect(isLegacyEventDetailRoute(`/events/${eventId}`)).toBe(true)
expect(isLegacyEventLandingRoute('/events/tehran-book-club')).toBe(true)
})
it('does not classify nested management paths or malformed encodings as landings', () => {
expect(isCanonicalEventLandingRoute('/e/tehran-book-club/manage')).toBe(false)
expect(isCanonicalEventLandingRoute('/e/%E0%A4%A')).toBe(false)
})
})