import { describe, expect, it } from 'vitest' import { LEGAL_DOCUMENT_UPDATED_AT_ISO, LEGAL_PAGE_SEO, legalWebPageSchema, refundPolicyFaqSchema } from '@/lib/seo/legalPages' describe('legal page SEO helpers', () => { it('keeps absolute legal titles within SERP-safe length', () => { for (const page of Object.values(LEGAL_PAGE_SEO)) { expect(page.metaTitle.length).toBeGreaterThan(20) expect(page.metaTitle.length).toBeLessThanOrEqual(60) expect(page.metaDescription.length).toBeGreaterThanOrEqual(70) expect(page.metaDescription.length).toBeLessThanOrEqual(160) expect(page.h1.length).toBeGreaterThan(5) } }) it('emits WebPage schema with language, dates, and site graph links', () => { const schema = legalWebPageSchema('terms') expect(schema).toMatchObject({ '@id': 'https://ghabilee.ir/terms#webpage', inLanguage: 'fa-IR', datePublished: LEGAL_DOCUMENT_UPDATED_AT_ISO, dateModified: LEGAL_DOCUMENT_UPDATED_AT_ISO, isPartOf: { '@id': 'https://ghabilee.ir/#website' }, publisher: { '@id': 'https://ghabilee.ir/#organization' }, url: 'https://ghabilee.ir/terms', }) expect(schema['@type']).toEqual(['WebPage', 'TermsOfService']) }) it('exposes FAQ entities for refund-policy rich results', () => { const faq = refundPolicyFaqSchema() expect(faq['@type']).toBe('FAQPage') expect(faq.mainEntity.length).toBeGreaterThanOrEqual(6) expect(faq.mainEntity[0]).toMatchObject({ '@type': 'Question', acceptedAnswer: { '@type': 'Answer' }, }) }) })