Merge pull request #338 from trouble/media-tests

This commit is contained in:
Elliot DeNolf
2020-07-31 10:21:41 -04:00
committed by GitHub
7 changed files with 130 additions and 1 deletions

View File

@@ -2,10 +2,14 @@
* @jest-environment node
*/
const fs = require('fs');
const path = require('path');
require('isomorphic-fetch');
const faker = require('faker');
const FormData = require('form-data');
const config = require('../../../demo/payload.config');
const { email, password } = require('../../tests/credentials');
const fileExists = require('../../tests/utils/fileExists');
const url = config.serverURL;
@@ -632,4 +636,89 @@ describe('Collections - REST', () => {
expect(nested).toBe(documentA.id);
});
});
describe('Media', () => {
const mediaDir = path.join(__dirname, '../../../demo', 'media');
beforeAll(async () => {
// Clear demo/media directory
const mediaDirExists = await fileExists(mediaDir);
if (!mediaDirExists) return;
fs.readdir(mediaDir, (err, files) => {
if (err) throw err;
// eslint-disable-next-line no-restricted-syntax
for (const file of files) {
fs.unlink(path.join(mediaDir, file), (unlinkErr) => {
if (unlinkErr) throw unlinkErr;
});
}
});
});
it('create', async () => {
const formData = new FormData();
formData.append('file', fs.createReadStream(path.join(__dirname, '../..', 'tests/assets/image.png')));
formData.append('alt', 'test media');
formData.append('locale', 'en');
const response = await fetch(`${url}/api/media`, {
body: formData,
headers: {
Authorization: `JWT ${token}`,
},
method: 'post',
});
const data = await response.json();
expect(response.status).toBe(201);
expect(data.doc.alt).not.toBeNull();
expect(data.doc.filename).toBe('image.png');
expect(data.doc.mimeType).not.toBeNull();
expect(data.doc.sizes.icon.filesize).not.toBeLessThan(1);
expect(data.doc.sizes.icon.filename).toBe('image-16x16.png');
expect(data.doc.sizes.icon.width).toBe(16);
expect(data.doc.sizes.icon.height).toBe(16);
expect(data.doc.sizes.mobile.filename).toBe('image-320x240.png');
expect(data.doc.sizes.mobile.width).toBe(320);
expect(data.doc.sizes.mobile.height).toBe(240);
expect(data.doc.sizes.tablet.filename).toBe('image-640x480.png');
expect(data.doc.sizes.tablet.width).toBe(640);
expect(data.doc.sizes.tablet.height).toBe(480);
});
it('delete', async () => {
const formData = new FormData();
formData.append('file', fs.createReadStream(path.join(__dirname, '../..', 'tests/assets/delete.png')));
formData.append('alt', 'test media');
formData.append('locale', 'en');
const createResponse = await fetch(`${url}/api/media`, {
body: formData,
headers: {
Authorization: `JWT ${token}`,
},
method: 'post',
});
const createData = await createResponse.json();
expect(createResponse.status).toBe(201);
const docId = createData.doc.id;
const response = await fetch(`${url}/api/media/${docId}`, {
headers: {
Authorization: `JWT ${token}`,
},
method: 'delete',
});
const data = await response.json();
expect(response.status).toBe(200);
expect(data.id).toBe(docId);
const imageExists = await fileExists(path.join(mediaDir, 'delete.png'));
expect(imageExists).toBe(false);
});
});
});

BIN
src/tests/assets/delete.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 88 KiB

BIN
src/tests/assets/image.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 88 KiB

View File

@@ -0,0 +1,15 @@
const fs = require('fs');
const { promisify } = require('util');
const stat = promisify(fs.stat);
const fileExists = async (fileName) => {
try {
await stat(fileName);
return true;
} catch (err) {
return false;
}
};
module.exports = fileExists;