Extract admin dashboard from ghabilee-frontend2 into a dedicated Next.js app for backoffice.ghabilee.ir (no SEO indexing / Clarity).
42 lines
1.5 KiB
TypeScript
42 lines
1.5 KiB
TypeScript
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' },
|
|
})
|
|
})
|
|
})
|