diff options
author | Chocobozzz <me@florianbigard.com> | 2023-02-24 14:48:15 +0100 |
---|---|---|
committer | Chocobozzz <me@florianbigard.com> | 2023-02-24 15:10:13 +0100 |
commit | d41f4a6dc69d098e9dc9173b7e1a586695ef7b97 (patch) | |
tree | 828ec8e08a1f326369e3720c310e2b059be9ead5 /server | |
parent | 09a7ce0c60d3e98eedf58f245bf2aaba9837785b (diff) | |
download | PeerTube-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.ts | 6 | ||||
-rw-r--r-- | server/tests/api/videos/video-imports.ts | 28 | ||||
-rw-r--r-- | server/tests/fixtures/thumbnail-playlist.jpg | bin | 4981 -> 5040 bytes | |||
-rw-r--r-- | server/tests/fixtures/thumbnail.jpg | bin | 4221 -> 5568 bytes | |||
-rw-r--r-- | server/tests/fixtures/video_import_thumbnail_yt_dlp.jpg | bin | 10163 -> 10676 bytes | |||
-rw-r--r-- | server/tests/fixtures/video_short.mp4.jpg | bin | 4981 -> 5028 bytes | |||
-rw-r--r-- | server/tests/fixtures/video_short.ogv.jpg | bin | 4981 -> 5023 bytes | |||
-rw-r--r-- | server/tests/fixtures/video_short.webm.jpg | bin | 4981 -> 5028 bytes | |||
-rw-r--r-- | server/tests/fixtures/video_short1-preview.webm.jpg | bin | 31388 -> 31351 bytes | |||
-rw-r--r-- | server/tests/fixtures/video_short1.webm.jpg | bin | 6309 -> 6222 bytes | |||
-rw-r--r-- | server/tests/fixtures/video_short2.webm.jpg | bin | 5506 -> 5568 bytes | |||
-rw-r--r-- | server/tests/fixtures/video_short3.webm.jpg | bin | 4981 -> 5674 bytes | |||
-rw-r--r-- | server/tests/helpers/image.ts | 2 | ||||
-rw-r--r-- | server/tests/shared/checks.ts | 29 |
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 | ||
3 | import { expect } from 'chai' | 3 | import { expect } from 'chai' |
4 | import { testImage } from '@server/tests/shared' | 4 | import { testImageSize } from '@server/tests/shared' |
5 | import { AbuseState, HttpStatusCode, UserAdminFlag, UserRole, VideoPlaylistType } from '@shared/models' | 5 | import { AbuseState, HttpStatusCode, UserAdminFlag, UserRole, VideoPlaylistType } from '@shared/models' |
6 | import { cleanupTests, createSingleServer, PeerTubeServer, setAccessTokensToServers } from '@shared/server-commands' | 6 | import { 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 | ||
3 | import { expect } from 'chai' | 3 | import { expect } from 'chai' |
4 | import { pathExists, readFile } from 'fs-extra' | 4 | import { pathExists, readFile } from 'fs-extra' |
5 | import JPEG from 'jpeg-js' | ||
5 | import { join } from 'path' | 6 | import { join } from 'path' |
7 | import pixelmatch from 'pixelmatch' | ||
8 | import { PNG } from 'pngjs' | ||
6 | import { root } from '@shared/core-utils' | 9 | import { root } from '@shared/core-utils' |
7 | import { HttpStatusCode } from '@shared/models' | 10 | import { HttpStatusCode } from '@shared/models' |
8 | import { makeGetRequest, PeerTubeServer } from '@shared/server-commands' | 11 | import { 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 | ||
44 | async function testImage (url: string, imageName: string, imageHTTPPath: string, extension = '.jpg') { | 47 | async 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 | ||
64 | async 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 | |||
61 | async function testFileExistsOrNot (server: PeerTubeServer, directory: string, filePath: string, exist: boolean) { | 87 | async 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 | ||
105 | export { | 131 | export { |
106 | dateIsValid, | 132 | dateIsValid, |
133 | testImageSize, | ||
107 | testImage, | 134 | testImage, |
108 | expectLogDoesNotContain, | 135 | expectLogDoesNotContain, |
109 | testFileExistsOrNot, | 136 | testFileExistsOrNot, |