운영 의존성 보안 업데이트
This commit is contained in:
88
tests/sharp-image-processing.test.js
Normal file
88
tests/sharp-image-processing.test.js
Normal file
@@ -0,0 +1,88 @@
|
||||
import assert from 'node:assert/strict'
|
||||
import { mkdir, mkdtemp, rm } from 'node:fs/promises'
|
||||
import { tmpdir } from 'node:os'
|
||||
import { join } from 'node:path'
|
||||
import test from 'node:test'
|
||||
import sharp from 'sharp'
|
||||
import {
|
||||
createPageCoverThumbnailForImageUrl,
|
||||
createPostBodyThumbnailForImageUrl,
|
||||
createPostThumbnailForImageUrl,
|
||||
getPageCoverThumbnailDiskPath,
|
||||
getPostBodyPreviewThumbnailDiskPath,
|
||||
getPostBodyThumbnailDiskPath,
|
||||
getPostLightboxThumbnailDiskPath,
|
||||
getPostThumbnailDiskPath
|
||||
} from '../server/utils/post-thumbnail-image.js'
|
||||
|
||||
test('sharp 파생 이미지 생성 경로는 게시물 카드·본문·페이지 커버 WebP를 만든다', async (t) => {
|
||||
const previousPlaywrightTest = process.env.PLAYWRIGHT_TEST
|
||||
const previousUploadRoot = process.env.SORI_TEST_UPLOAD_ROOT
|
||||
const previousUseRuntimeConfig = globalThis.useRuntimeConfig
|
||||
const uploadRoot = await mkdtemp(join(tmpdir(), 'sori-sharp-'))
|
||||
const sourceDirectory = join(uploadRoot, 'posts', '2026', '07')
|
||||
const sourceUrl = '/uploads/posts/2026/07/sample.png'
|
||||
const sourcePath = join(sourceDirectory, 'sample.png')
|
||||
const originalWarn = console.warn
|
||||
|
||||
process.env.PLAYWRIGHT_TEST = '1'
|
||||
process.env.SORI_TEST_UPLOAD_ROOT = uploadRoot
|
||||
globalThis.useRuntimeConfig = () => ({})
|
||||
console.warn = (...args) => {
|
||||
if (String(args[0] || '').includes('[media-catalog]')) {
|
||||
return
|
||||
}
|
||||
|
||||
originalWarn(...args)
|
||||
}
|
||||
|
||||
t.after(async () => {
|
||||
console.warn = originalWarn
|
||||
if (previousPlaywrightTest === undefined) {
|
||||
delete process.env.PLAYWRIGHT_TEST
|
||||
} else {
|
||||
process.env.PLAYWRIGHT_TEST = previousPlaywrightTest
|
||||
}
|
||||
|
||||
if (previousUploadRoot === undefined) {
|
||||
delete process.env.SORI_TEST_UPLOAD_ROOT
|
||||
} else {
|
||||
process.env.SORI_TEST_UPLOAD_ROOT = previousUploadRoot
|
||||
}
|
||||
|
||||
if (previousUseRuntimeConfig === undefined) {
|
||||
delete globalThis.useRuntimeConfig
|
||||
} else {
|
||||
globalThis.useRuntimeConfig = previousUseRuntimeConfig
|
||||
}
|
||||
|
||||
await rm(uploadRoot, { recursive: true, force: true })
|
||||
})
|
||||
|
||||
await mkdir(sourceDirectory, { recursive: true })
|
||||
await sharp({
|
||||
create: {
|
||||
width: 900,
|
||||
height: 600,
|
||||
channels: 4,
|
||||
background: '#336699ff'
|
||||
}
|
||||
}).png().toFile(sourcePath)
|
||||
|
||||
assert.equal(await createPostThumbnailForImageUrl(sourceUrl), '/uploads/posts/2026/07/thumbs/sample-card.webp')
|
||||
assert.equal(await createPostBodyThumbnailForImageUrl(sourceUrl), '/uploads/posts/2026/07/thumbs/sample-body-1600.webp')
|
||||
assert.equal(await createPageCoverThumbnailForImageUrl(sourceUrl), '/uploads/posts/2026/07/thumbs/sample-page-cover.webp')
|
||||
|
||||
const cardMetadata = await sharp(getPostThumbnailDiskPath(sourceUrl)).metadata()
|
||||
const bodyMetadata = await sharp(getPostBodyThumbnailDiskPath(sourceUrl)).metadata()
|
||||
const previewMetadata = await sharp(getPostBodyPreviewThumbnailDiskPath(sourceUrl)).metadata()
|
||||
const lightboxMetadata = await sharp(getPostLightboxThumbnailDiskPath(sourceUrl)).metadata()
|
||||
const pageCoverMetadata = await sharp(getPageCoverThumbnailDiskPath(sourceUrl)).metadata()
|
||||
|
||||
assert.equal(cardMetadata.format, 'webp')
|
||||
assert.deepEqual([cardMetadata.width, cardMetadata.height], [640, 360])
|
||||
assert.equal(bodyMetadata.width, 900)
|
||||
assert.equal(previewMetadata.width, 720)
|
||||
assert.equal(lightboxMetadata.width, 900)
|
||||
assert.deepEqual([pageCoverMetadata.width, pageCoverMetadata.height], [450, 600])
|
||||
})
|
||||
Reference in New Issue
Block a user