]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blobdiff - server/tests/shared/checks.ts
Add runner server tests
[github/Chocobozzz/PeerTube.git] / server / tests / shared / checks.ts
index dcc16d7ea492b5e7af6cbed515db436a7243db2e..d7eb25bb54ccfbbae67a5801781561a9bd8ff9d4 100644 (file)
@@ -2,13 +2,16 @@
 
 import { expect } from 'chai'
 import { pathExists, readFile } from 'fs-extra'
+import JPEG from 'jpeg-js'
 import { join } from 'path'
+import pixelmatch from 'pixelmatch'
+import { PNG } from 'pngjs'
 import { root } from '@shared/core-utils'
 import { HttpStatusCode } from '@shared/models'
 import { makeGetRequest, PeerTubeServer } from '@shared/server-commands'
 
 // Default interval -> 5 minutes
-function dateIsValid (dateString: string, interval = 300000) {
+function dateIsValid (dateString: string | Date, interval = 300000) {
   const dateToCheck = new Date(dateString)
   const now = new Date()
 
@@ -19,13 +22,29 @@ function expectStartWith (str: string, start: string) {
   expect(str.startsWith(start), `${str} does not start with ${start}`).to.be.true
 }
 
+function expectNotStartWith (str: string, start: string) {
+  expect(str.startsWith(start), `${str} does not start with ${start}`).to.be.false
+}
+
+function expectEndWith (str: string, end: string) {
+  expect(str.endsWith(end), `${str} does not end with ${end}`).to.be.true
+}
+
+// ---------------------------------------------------------------------------
+
 async function expectLogDoesNotContain (server: PeerTubeServer, str: string) {
   const content = await server.servers.getLogContent()
 
   expect(content.toString()).to.not.contain(str)
 }
 
-async function testImage (url: string, imageName: string, imageHTTPPath: string, extension = '.jpg') {
+async function expectLogContain (server: PeerTubeServer, str: string) {
+  const content = await server.servers.getLogContent()
+
+  expect(content.toString()).to.contain(str)
+}
+
+async function testImageSize (url: string, imageName: string, imageHTTPPath: string, extension = '.jpg') {
   const res = await makeGetRequest({
     url,
     path: imageHTTPPath,
@@ -42,12 +61,37 @@ async function testImage (url: string, imageName: string, imageHTTPPath: string,
   expect(body.length).to.be.below(maxLength, 'the generated image is way larger than the recorded fixture')
 }
 
+async function testImage (url: string, imageName: string, imageHTTPPath: string, extension = '.jpg') {
+  const res = await makeGetRequest({
+    url,
+    path: imageHTTPPath,
+    expectedStatus: HttpStatusCode.OK_200
+  })
+
+  const body = res.body
+  const data = await readFile(join(root(), 'server', 'tests', 'fixtures', imageName + extension))
+
+  const img1 = imageHTTPPath.endsWith('.png')
+    ? PNG.sync.read(body)
+    : JPEG.decode(body)
+
+  const img2 = extension === '.png'
+    ? PNG.sync.read(data)
+    : JPEG.decode(data)
+
+  const result = pixelmatch(img1.data, img2.data, null, img1.width, img1.height, { threshold: 0.1 })
+
+  expect(result).to.equal(0, `${imageHTTPPath} image is not the same as ${imageName}${extension}`)
+}
+
 async function testFileExistsOrNot (server: PeerTubeServer, directory: string, filePath: string, exist: boolean) {
   const base = server.servers.buildDirectory(directory)
 
   expect(await pathExists(join(base, filePath))).to.equal(exist)
 }
 
+// ---------------------------------------------------------------------------
+
 function checkBadStartPagination (url: string, path: string, token?: string, query = {}) {
   return makeGetRequest({
     url,
@@ -88,11 +132,15 @@ function checkBadSortPagination (url: string, path: string, token?: string, quer
 
 export {
   dateIsValid,
+  testImageSize,
   testImage,
   expectLogDoesNotContain,
   testFileExistsOrNot,
   expectStartWith,
+  expectNotStartWith,
+  expectEndWith,
   checkBadStartPagination,
   checkBadCountPagination,
-  checkBadSortPagination
+  checkBadSortPagination,
+  expectLogContain
 }