56 lines
2.2 KiB
JavaScript
56 lines
2.2 KiB
JavaScript
import assert from 'node:assert/strict'
|
|
import test from 'node:test'
|
|
import {
|
|
getBlockPlainTextLength,
|
|
getInArticleAdAfterBlockIds,
|
|
getInArticleAdTargetRatios,
|
|
isInArticleAdCandidateBlock
|
|
} from '../lib/content-in-article-ad.js'
|
|
|
|
/**
|
|
* 테스트용 문단 블록을 만든다.
|
|
* @param {number} index - 블록 순서
|
|
* @param {string} text - 본문 텍스트
|
|
* @returns {Object} 문단 블록
|
|
*/
|
|
const createParagraphBlock = (index, text) => ({
|
|
id: `paragraph-${index}`,
|
|
type: 'paragraph',
|
|
text
|
|
})
|
|
|
|
test('블록 텍스트 길이는 배열과 문자열의 공백을 제외해 계산한다', () => {
|
|
assert.equal(getBlockPlainTextLength({ text: '가 나 다' }), 3)
|
|
assert.equal(getBlockPlainTextLength({ text: ['첫 줄', '둘째 줄'] }), 5)
|
|
})
|
|
|
|
test('인아티클 광고 목표 비율은 본문 길이 기준으로 반환한다', () => {
|
|
assert.deepEqual(getInArticleAdTargetRatios(1999), [])
|
|
assert.deepEqual(getInArticleAdTargetRatios(2000), [0.4])
|
|
assert.deepEqual(getInArticleAdTargetRatios(6000), [0.35, 0.7])
|
|
})
|
|
|
|
test('후보 블록은 충분한 길이의 문단만 허용한다', () => {
|
|
assert.equal(isInArticleAdCandidateBlock(createParagraphBlock(1, '충분히 긴 문단입니다'.repeat(2))), true)
|
|
assert.equal(isInArticleAdCandidateBlock(createParagraphBlock(2, '짧음')), false)
|
|
assert.equal(isInArticleAdCandidateBlock({ id: 'heading', type: 'heading', text: '충분히 긴 제목입니다' }), false)
|
|
})
|
|
|
|
test('짧은 본문에는 인아티클 광고 삽입 위치를 만들지 않는다', () => {
|
|
const blocks = Array.from({ length: 12 }, (_, index) => createParagraphBlock(index, '짧은 문단입니다'))
|
|
|
|
assert.deepEqual(getInArticleAdAfterBlockIds(blocks), [])
|
|
})
|
|
|
|
test('긴 본문은 중앙 근처 문단 하나를 광고 삽입 위치로 선택한다', () => {
|
|
const blocks = Array.from({ length: 12 }, (_, index) => createParagraphBlock(index, '가'.repeat(180)))
|
|
|
|
assert.deepEqual(getInArticleAdAfterBlockIds(blocks), ['paragraph-4'])
|
|
})
|
|
|
|
test('매우 긴 본문은 충분한 간격을 두고 두 위치를 선택한다', () => {
|
|
const blocks = Array.from({ length: 24 }, (_, index) => createParagraphBlock(index, '가'.repeat(260)))
|
|
|
|
assert.deepEqual(getInArticleAdAfterBlockIds(blocks), ['paragraph-8', 'paragraph-16'])
|
|
})
|