Reactoring + added new tests

This commit is contained in:
Vic 2022-01-28 18:29:09 +01:00
parent 30775e7b41
commit 41d83e8b61
6 changed files with 66 additions and 45 deletions

Binary file not shown.

Before

Width:  |  Height:  |  Size: 28 KiB

After

Width:  |  Height:  |  Size: 110 KiB

View File

@ -32,14 +32,15 @@
"eslint-plugin-prettier": "^4.0.0",
"jasmine": "^4.0.2",
"jasmine-spec-reporter": "^7.0.0",
"supertest": "^6.2.2",
"ts-node": "^10.4.0",
"typescript": "^4.5.4"
},
"dependencies": {
"express": "^4.17.2",
"image-size": "^1.0.1",
"nodemon": "^2.0.15",
"path": "^0.12.7",
"sharp": "^0.29.3",
"supertest": "^6.2.2"
"sharp": "^0.29.3"
}
}

View File

@ -1,26 +1,10 @@
import express from "express"
import fs from "fs"
import path from "path"
import sharp from "sharp"
import resizeImg from "../../utilities/imgProcessing"
const image = express.Router();
const resizeImg = async (width: number, height: number, inputimgPath: string, fileName: string): Promise<string> => {
// output file for resized img
let outputImg = path.resolve("images/thumb", `${fileName}.jpg`);
await sharp(path.resolve(inputimgPath))
.resize(width, height)
.toFormat("jpeg")
.jpeg({
quality: 100,
mozjpeg: true
})
.toFile(path.resolve(outputImg))
return outputImg
}
image.get('/', async (req: express.Request, res: express.Response): Promise<void> => {
@ -28,10 +12,9 @@ image.get('/', async (req: express.Request, res: express.Response): Promise<void
let width = parseInt(req.query.width as string);
let height = parseInt(req.query.height as string);
// fetch file from server
// get correct path
let inputimgPath: string = path.resolve("images/full", `${fileName}.jpg`);
// check if the inputFile exist
if (!fs.existsSync(inputimgPath)) {
res.status(404).send("Image not found");
@ -43,7 +26,7 @@ image.get('/', async (req: express.Request, res: express.Response): Promise<void
if (fileName && width && height) {
//resize image
let outputImg: string = await resizeImg(width, height, inputimgPath, fileName);
let outputImg: string = await resizeImg(width, height, fileName);
res.sendFile(outputImg);
} else if (fileName) {

View File

@ -0,0 +1,26 @@
import app from "../index"
import resizeImg from "../utilities/imgProcessing"
import sizeOf from 'image-size'
import supertest from "supertest"
const request = supertest(app);
describe('Test on utilities', () => {
it('Image should have correct size after resize', async () => {
let outputImg = await resizeImg(400, 400, 'fjord');
let dimensions = sizeOf(outputImg);
expect(dimensions.width).toBe(400);
expect(dimensions.height).toBe(400);
})
})
describe('Test on the image endpoint with resize', () => {
it('Resize working with filename and width/height parameters', async () => {
const response = await request.get('/api/image?filename=encenadaport&width=200&height=200');
expect(response.status).toBe(200);
})
})

View File

@ -1,11 +1,21 @@
import app from "../index"
import image from "../routes/api/image"
import supertest from "supertest"
import path from "path"
import fs from "fs"
const request = supertest(app);
// Endpoint testing
describe('Test endpoint responses', () => {
it('Check if input images folder exists', async () => {
let inputimgPath: string = path.resolve("images/full", `fjord.jpg`);
let result = fs.existsSync(inputimgPath)
expect(result).toBe(true);
})
it('Get the api endpoint', async () => {
const response = await request.get('/api/image?filename=fjord');
expect(response.status).toBe(200);
@ -14,29 +24,10 @@ describe('Test endpoint responses', () => {
const response = await request.get('/api/image?filename=test');
expect(response.status).toBe(404);
})
it('Working if we only have a filename in the url', async () => {
const response = await request.get('/api/image?filename=encenadaport');
expect(response.status).toBe(200);
})
})
// Image resize test
describe('Test of the image endpoint with resize', () => {
it('Resize working with filename and width parameter', async () => {
const response = await request.get('/api/image?filename=encenadaport&height=200');
expect(response.status).toBe(200);
})
it('Resize working with filename and height parameter', async () => {
const response = await request.get('/api/image?filename=encenadaport&width=200');
expect(response.status).toBe(200);
})
it('Resize working with filename and width, height parameter', async () => {
const response = await request.get('/api/image?filename=encenadaport&height=200');
expect(response.status).toBe(200);
})
})

View File

@ -0,0 +1,20 @@
import sharp from "sharp"
import path from "path"
const resizeImg = async (width: number, height: number, fileName: string): Promise<string> => {
// output file for resized img
let inputimgPath: string = path.resolve("images/full", `${fileName}.jpg`);
let outputImg: string = path.resolve("images/thumb", `${fileName}.jpg`);
await sharp(path.resolve(inputimgPath))
.resize(width, height)
.toFormat("jpeg")
.jpeg({
quality: 100,
mozjpeg: true
})
.toFile(path.resolve(outputImg))
return outputImg
}
export default resizeImg