Files
RenewCMS/web/src/lib/__tests__/bodyCounts.spec.ts
T

34 lines
1.2 KiB
TypeScript

import { describe, expect, it } from 'vitest'
import { bodyCounts, isLargeBody, LARGE_BODY_CHARACTERS } from '../bodyCounts'
describe('bodyCounts', () => {
it('counts words across block boundaries and characters as the string length', () => {
const html =
'<h2>Price</h2><ul><li>One</li><li>Two</li></ul><p>A <strong>bold</strong> end.</p>'
expect(bodyCounts(html)).toEqual({ words: 6, characters: html.length })
})
it('splits adjacent blocks and line breaks into separate words', () => {
expect(bodyCounts('<p>one</p><p>two</p>').words).toBe(2)
expect(bodyCounts('<p>one<br>two</p>').words).toBe(2)
expect(bodyCounts('<p> one two </p>').words).toBe(2)
})
it('counts no words in markup without text', () => {
expect(bodyCounts('<p> </p>')).toEqual({ words: 0, characters: 8 })
})
it('reads an empty document as zero', () => {
expect(bodyCounts('')).toEqual({ words: 0, characters: 0 })
expect(bodyCounts('<p></p>')).toEqual({ words: 0, characters: 0 })
})
})
describe('isLargeBody', () => {
it('flips exactly at the threshold', () => {
expect(isLargeBody(LARGE_BODY_CHARACTERS - 1)).toBe(false)
expect(isLargeBody(LARGE_BODY_CHARACTERS)).toBe(true)
})
})