aboutsummaryrefslogtreecommitdiffhomepage
path: root/server
diff options
context:
space:
mode:
authorChocobozzz <me@florianbigard.com>2023-02-24 14:48:15 +0100
committerChocobozzz <me@florianbigard.com>2023-02-24 15:10:13 +0100
commitd41f4a6dc69d098e9dc9173b7e1a586695ef7b97 (patch)
tree828ec8e08a1f326369e3720c310e2b059be9ead5 /server
parent09a7ce0c60d3e98eedf58f245bf2aaba9837785b (diff)
downloadPeerTube-d41f4a6dc69d098e9dc9173b7e1a586695ef7b97.tar.gz
PeerTube-d41f4a6dc69d098e9dc9173b7e1a586695ef7b97.tar.zst
PeerTube-d41f4a6dc69d098e9dc9173b7e1a586695ef7b97.zip
Improve image test comparison
Diffstat (limited to 'server')
-rw-r--r--server/tests/api/users/users.ts6
-rw-r--r--server/tests/api/videos/video-imports.ts28
-rw-r--r--server/tests/fixtures/thumbnail-playlist.jpgbin4981 -> 5040 bytes
-rw-r--r--server/tests/fixtures/thumbnail.jpgbin4221 -> 5568 bytes
-rw-r--r--server/tests/fixtures/video_import_thumbnail_yt_dlp.jpgbin10163 -> 10676 bytes
-rw-r--r--server/tests/fixtures/video_short.mp4.jpgbin4981 -> 5028 bytes
-rw-r--r--server/tests/fixtures/video_short.ogv.jpgbin4981 -> 5023 bytes
-rw-r--r--server/tests/fixtures/video_short.webm.jpgbin4981 -> 5028 bytes
-rw-r--r--server/tests/fixtures/video_short1-preview.webm.jpgbin31388 -> 31351 bytes
-rw-r--r--server/tests/fixtures/video_short1.webm.jpgbin6309 -> 6222 bytes
-rw-r--r--server/tests/fixtures/video_short2.webm.jpgbin5506 -> 5568 bytes
-rw-r--r--server/tests/fixtures/video_short3.webm.jpgbin4981 -> 5674 bytes
-rw-r--r--server/tests/helpers/image.ts2
-rw-r--r--server/tests/shared/checks.ts29
14 files changed, 48 insertions, 17 deletions
diff --git a/server/tests/api/users/users.ts b/server/tests/api/users/users.ts
index f1e170971..1c00f9a93 100644
--- a/server/tests/api/users/users.ts
+++ b/server/tests/api/users/users.ts
@@ -1,7 +1,7 @@
1/* eslint-disable @typescript-eslint/no-unused-expressions,@typescript-eslint/require-await */ 1/* eslint-disable @typescript-eslint/no-unused-expressions,@typescript-eslint/require-await */
2 2
3import { expect } from 'chai' 3import { expect } from 'chai'
4import { testImage } from '@server/tests/shared' 4import { testImageSize } from '@server/tests/shared'
5import { AbuseState, HttpStatusCode, UserAdminFlag, UserRole, VideoPlaylistType } from '@shared/models' 5import { AbuseState, HttpStatusCode, UserAdminFlag, UserRole, VideoPlaylistType } from '@shared/models'
6import { cleanupTests, createSingleServer, PeerTubeServer, setAccessTokensToServers } from '@shared/server-commands' 6import { cleanupTests, createSingleServer, PeerTubeServer, setAccessTokensToServers } from '@shared/server-commands'
7 7
@@ -274,7 +274,7 @@ describe('Test users', function () {
274 274
275 const user = await server.users.getMyInfo({ token: userToken }) 275 const user = await server.users.getMyInfo({ token: userToken })
276 for (const avatar of user.account.avatars) { 276 for (const avatar of user.account.avatars) {
277 await testImage(server.url, `avatar-resized-${avatar.width}x${avatar.width}`, avatar.path, '.gif') 277 await testImageSize(server.url, `avatar-resized-${avatar.width}x${avatar.width}`, avatar.path, '.gif')
278 } 278 }
279 }) 279 })
280 280
@@ -286,7 +286,7 @@ describe('Test users', function () {
286 286
287 const user = await server.users.getMyInfo({ token: userToken }) 287 const user = await server.users.getMyInfo({ token: userToken })
288 for (const avatar of user.account.avatars) { 288 for (const avatar of user.account.avatars) {
289 await testImage(server.url, `avatar-resized-${avatar.width}x${avatar.width}`, avatar.path, extension) 289 await testImageSize(server.url, `avatar-resized-${avatar.width}x${avatar.width}`, avatar.path, extension)
290 } 290 }
291 } 291 }
292 }) 292 })
diff --git a/server/tests/api/videos/video-imports.ts b/server/tests/api/videos/video-imports.ts
index 5636de45f..80215f038 100644
--- a/server/tests/api/videos/video-imports.ts
+++ b/server/tests/api/videos/video-imports.ts
@@ -68,6 +68,8 @@ async function checkVideoServer2 (server: PeerTubeServer, id: number | string) {
68 expect(video.description).to.equal('my super description') 68 expect(video.description).to.equal('my super description')
69 expect(video.tags).to.deep.equal([ 'supertag1', 'supertag2' ]) 69 expect(video.tags).to.deep.equal([ 'supertag1', 'supertag2' ])
70 70
71 await testImage(server.url, 'thumbnail', video.thumbnailPath)
72
71 expect(video.files).to.have.lengthOf(1) 73 expect(video.files).to.have.lengthOf(1)
72 74
73 const bodyCaptions = await server.captions.list({ videoId: id }) 75 const bodyCaptions = await server.captions.list({ videoId: id })
@@ -254,18 +256,20 @@ describe('Test video imports', function () {
254 it('Should import a video on server 2 with some fields', async function () { 256 it('Should import a video on server 2 with some fields', async function () {
255 this.timeout(60_000) 257 this.timeout(60_000)
256 258
257 const attributes = { 259 const { video } = await servers[1].imports.importVideo({
258 targetUrl: FIXTURE_URLS.youtube, 260 attributes: {
259 channelId: servers[1].store.channel.id, 261 targetUrl: FIXTURE_URLS.youtube,
260 privacy: VideoPrivacy.PUBLIC, 262 channelId: servers[1].store.channel.id,
261 category: 10, 263 privacy: VideoPrivacy.PUBLIC,
262 licence: 7, 264 category: 10,
263 language: 'en', 265 licence: 7,
264 name: 'my super name', 266 language: 'en',
265 description: 'my super description', 267 name: 'my super name',
266 tags: [ 'supertag1', 'supertag2' ] 268 description: 'my super description',
267 } 269 tags: [ 'supertag1', 'supertag2' ],
268 const { video } = await servers[1].imports.importVideo({ attributes }) 270 thumbnailfile: 'thumbnail.jpg'
271 }
272 })
269 expect(video.name).to.equal('my super name') 273 expect(video.name).to.equal('my super name')
270 }) 274 })
271 275
diff --git a/server/tests/fixtures/thumbnail-playlist.jpg b/server/tests/fixtures/thumbnail-playlist.jpg
index 62cd77435..12de5817b 100644
--- a/server/tests/fixtures/thumbnail-playlist.jpg
+++ b/server/tests/fixtures/thumbnail-playlist.jpg
Binary files differ
diff --git a/server/tests/fixtures/thumbnail.jpg b/server/tests/fixtures/thumbnail.jpg
index b331aba3b..1e2897fb8 100644
--- a/server/tests/fixtures/thumbnail.jpg
+++ b/server/tests/fixtures/thumbnail.jpg
Binary files differ
diff --git a/server/tests/fixtures/video_import_thumbnail_yt_dlp.jpg b/server/tests/fixtures/video_import_thumbnail_yt_dlp.jpg
index f672a785a..a10e07207 100644
--- a/server/tests/fixtures/video_import_thumbnail_yt_dlp.jpg
+++ b/server/tests/fixtures/video_import_thumbnail_yt_dlp.jpg
Binary files differ
diff --git a/server/tests/fixtures/video_short.mp4.jpg b/server/tests/fixtures/video_short.mp4.jpg
index 62cd77435..7ac29122c 100644
--- a/server/tests/fixtures/video_short.mp4.jpg
+++ b/server/tests/fixtures/video_short.mp4.jpg
Binary files differ
diff --git a/server/tests/fixtures/video_short.ogv.jpg b/server/tests/fixtures/video_short.ogv.jpg
index 62cd77435..5bc63969b 100644
--- a/server/tests/fixtures/video_short.ogv.jpg
+++ b/server/tests/fixtures/video_short.ogv.jpg
Binary files differ
diff --git a/server/tests/fixtures/video_short.webm.jpg b/server/tests/fixtures/video_short.webm.jpg
index 62cd77435..7ac29122c 100644
--- a/server/tests/fixtures/video_short.webm.jpg
+++ b/server/tests/fixtures/video_short.webm.jpg
Binary files differ
diff --git a/server/tests/fixtures/video_short1-preview.webm.jpg b/server/tests/fixtures/video_short1-preview.webm.jpg
index 1f8bb38be..d65af1f21 100644
--- a/server/tests/fixtures/video_short1-preview.webm.jpg
+++ b/server/tests/fixtures/video_short1-preview.webm.jpg
Binary files differ
diff --git a/server/tests/fixtures/video_short1.webm.jpg b/server/tests/fixtures/video_short1.webm.jpg
index 615cb2a5d..0ab7c58ad 100644
--- a/server/tests/fixtures/video_short1.webm.jpg
+++ b/server/tests/fixtures/video_short1.webm.jpg
Binary files differ
diff --git a/server/tests/fixtures/video_short2.webm.jpg b/server/tests/fixtures/video_short2.webm.jpg
index aa3126381..1e2897fb8 100644
--- a/server/tests/fixtures/video_short2.webm.jpg
+++ b/server/tests/fixtures/video_short2.webm.jpg
Binary files differ
diff --git a/server/tests/fixtures/video_short3.webm.jpg b/server/tests/fixtures/video_short3.webm.jpg
index 62cd77435..b572f676e 100644
--- a/server/tests/fixtures/video_short3.webm.jpg
+++ b/server/tests/fixtures/video_short3.webm.jpg
Binary files differ
diff --git a/server/tests/helpers/image.ts b/server/tests/helpers/image.ts
index 19a99cba9..530c9bacd 100644
--- a/server/tests/helpers/image.ts
+++ b/server/tests/helpers/image.ts
@@ -32,7 +32,7 @@ describe('Image helpers', function () {
32 const imageDestJPG = join(imageDestDir, 'test.jpg') 32 const imageDestJPG = join(imageDestDir, 'test.jpg')
33 const imageDestPNG = join(imageDestDir, 'test.png') 33 const imageDestPNG = join(imageDestDir, 'test.png')
34 34
35 const thumbnailSize = { width: 223, height: 122 } 35 const thumbnailSize = { width: 280, height: 157 }
36 36
37 it('Should skip processing if the source image is okay', async function () { 37 it('Should skip processing if the source image is okay', async function () {
38 const input = buildAbsoluteFixturePath('thumbnail.jpg') 38 const input = buildAbsoluteFixturePath('thumbnail.jpg')
diff --git a/server/tests/shared/checks.ts b/server/tests/shared/checks.ts
index 523d37420..c0098b293 100644
--- a/server/tests/shared/checks.ts
+++ b/server/tests/shared/checks.ts
@@ -2,7 +2,10 @@
2 2
3import { expect } from 'chai' 3import { expect } from 'chai'
4import { pathExists, readFile } from 'fs-extra' 4import { pathExists, readFile } from 'fs-extra'
5import JPEG from 'jpeg-js'
5import { join } from 'path' 6import { join } from 'path'
7import pixelmatch from 'pixelmatch'
8import { PNG } from 'pngjs'
6import { root } from '@shared/core-utils' 9import { root } from '@shared/core-utils'
7import { HttpStatusCode } from '@shared/models' 10import { HttpStatusCode } from '@shared/models'
8import { makeGetRequest, PeerTubeServer } from '@shared/server-commands' 11import { makeGetRequest, PeerTubeServer } from '@shared/server-commands'
@@ -41,7 +44,7 @@ async function expectLogContain (server: PeerTubeServer, str: string) {
41 expect(content.toString()).to.contain(str) 44 expect(content.toString()).to.contain(str)
42} 45}
43 46
44async function testImage (url: string, imageName: string, imageHTTPPath: string, extension = '.jpg') { 47async function testImageSize (url: string, imageName: string, imageHTTPPath: string, extension = '.jpg') {
45 const res = await makeGetRequest({ 48 const res = await makeGetRequest({
46 url, 49 url,
47 path: imageHTTPPath, 50 path: imageHTTPPath,
@@ -58,6 +61,29 @@ async function testImage (url: string, imageName: string, imageHTTPPath: string,
58 expect(body.length).to.be.below(maxLength, 'the generated image is way larger than the recorded fixture') 61 expect(body.length).to.be.below(maxLength, 'the generated image is way larger than the recorded fixture')
59} 62}
60 63
64async function testImage (url: string, imageName: string, imageHTTPPath: string, extension = '.jpg') {
65 const res = await makeGetRequest({
66 url,
67 path: imageHTTPPath,
68 expectedStatus: HttpStatusCode.OK_200
69 })
70
71 const body = res.body
72 const data = await readFile(join(root(), 'server', 'tests', 'fixtures', imageName + extension))
73
74 const img1 = imageHTTPPath.endsWith('.png')
75 ? PNG.sync.read(body)
76 : JPEG.decode(body)
77
78 const img2 = extension === '.png'
79 ? PNG.sync.read(data)
80 : JPEG.decode(data)
81
82 const result = pixelmatch(img1.data, img2.data, null, img1.width, img1.height, { threshold: 0.1 })
83
84 expect(result).to.equal(0, `${imageHTTPPath} image is not the same as ${imageName}${extension}`)
85}
86
61async function testFileExistsOrNot (server: PeerTubeServer, directory: string, filePath: string, exist: boolean) { 87async function testFileExistsOrNot (server: PeerTubeServer, directory: string, filePath: string, exist: boolean) {
62 const base = server.servers.buildDirectory(directory) 88 const base = server.servers.buildDirectory(directory)
63 89
@@ -104,6 +130,7 @@ function checkBadSortPagination (url: string, path: string, token?: string, quer
104 130
105export { 131export {
106 dateIsValid, 132 dateIsValid,
133 testImageSize,
107 testImage, 134 testImage,
108 expectLogDoesNotContain, 135 expectLogDoesNotContain,
109 testFileExistsOrNot, 136 testFileExistsOrNot,