Release v2.15.4
This commit is contained in:
1 parent
64aeb1b47e
commit
05c9341b08
25 files changed
+595
-31
No files matched your search
@@ -5,6 +5,9 @@ const os = require('os');
|
||||
const path = require('path');
|
||||
const crypto = require('crypto');
|
||||
const sharp = require('sharp');
|
||||
require('../src/common');
|
||||
const mediaLibrary = require('../src/web/lib/media/library');
|
||||
const registerMediaLibraryRoutes = require('../src/web/routes/settings/media-library');
|
||||
const {
|
||||
normalizeMediaPath,
|
||||
createImageVariants,
|
||||
@@ -140,4 +143,72 @@ test('media library counts slide and template references', async () => {
|
||||
assert.equal(queries[0].params[0], '/media/uploads/shared.png');
|
||||
assert.equal(queries[1].params[0], '/media/uploads/shared.png');
|
||||
assert.match(queries[0].sql, /LOCATE/);
|
||||
assert.match(queries[0].sql, /CAST\(COALESCE\(content_json, ''\) AS CHAR\)/);
|
||||
});
|
||||
|
||||
test('media library upload and delete routes audit successful asset changes', async () => {
|
||||
const originalCreateVariants = mediaLibrary.createImageVariants;
|
||||
const originalRegisterAsset = mediaLibrary.registerMediaAsset;
|
||||
const originalCountReferences = mediaLibrary.countMediaAssetReferences;
|
||||
const originalRemoveVariants = mediaLibrary.removeImageVariants;
|
||||
const root = await fs.promises.mkdtemp(path.join(os.tmpdir(), 'pulse-media-audit-'));
|
||||
const uploadDir = path.join(root, 'media', 'uploads');
|
||||
const filePath = path.join(uploadDir, 'photo.png');
|
||||
await fs.promises.mkdir(uploadDir, { recursive: true });
|
||||
await fs.promises.writeFile(filePath, 'image');
|
||||
const routeHandlers = {};
|
||||
const events = [];
|
||||
const app = {
|
||||
get(route, ...handlers) { routeHandlers['GET ' + route] = handlers; },
|
||||
post(route, ...handlers) { routeHandlers['POST ' + route] = handlers; }
|
||||
};
|
||||
const pool = {
|
||||
async query(sql) {
|
||||
if (sql.includes('FROM o_app_settings')) return [[]];
|
||||
if (sql.includes('FROM c_media_assets')) {
|
||||
return [[{ id: 9, media_path: '/media/uploads/photo.png', original_name: 'Photo.png', media_type: 'image', file_size: 5 }]];
|
||||
}
|
||||
return [[]];
|
||||
}
|
||||
};
|
||||
|
||||
mediaLibrary.createImageVariants = async function () {};
|
||||
mediaLibrary.registerMediaAsset = async function () {};
|
||||
mediaLibrary.countMediaAssetReferences = async function () { return 0; };
|
||||
mediaLibrary.removeImageVariants = async function () {};
|
||||
|
||||
try {
|
||||
registerMediaLibraryRoutes(app, {
|
||||
pool: pool,
|
||||
pages: {},
|
||||
upload: { single() { return function (_req, _res, next) { next(); }; } },
|
||||
uploadDir: uploadDir,
|
||||
getAuditUserId(req) { return req.currentUser.id; },
|
||||
recordRequestAuditEvent(_pool, _req, event) { events.push(event); },
|
||||
requirePermission() { return function (_req, _res, next) { next(); }; }
|
||||
});
|
||||
const response = { redirect(value) { this.location = value; return this; } };
|
||||
const next = function (error) { if (error) throw error; };
|
||||
const request = {
|
||||
currentUser: { id: 4 },
|
||||
body: {},
|
||||
file: { path: filePath, filename: 'photo.png', originalname: 'Photo.png', mimetype: 'image/png', size: 5 }
|
||||
};
|
||||
|
||||
await routeHandlers['POST /media-library'].at(-1)(request, response, next);
|
||||
await routeHandlers['POST /media-library/:id/delete'].at(-1)(
|
||||
{ currentUser: { id: 4 }, params: { id: '9' } }, response, next
|
||||
);
|
||||
|
||||
assert.deepEqual(events.map(function (event) { return event.eventType; }), ['media.uploaded', 'media.deleted']);
|
||||
assert.equal(events[0].targetLabel, 'Photo.png');
|
||||
assert.equal(events[1].targetId, 9);
|
||||
assert.ok(events.every(function (event) { return event.category === 'media-assets' && event.actorUserId === 4; }));
|
||||
} finally {
|
||||
mediaLibrary.createImageVariants = originalCreateVariants;
|
||||
mediaLibrary.registerMediaAsset = originalRegisterAsset;
|
||||
mediaLibrary.countMediaAssetReferences = originalCountReferences;
|
||||
mediaLibrary.removeImageVariants = originalRemoveVariants;
|
||||
await fs.promises.rm(root, { recursive: true, force: true });
|
||||
}
|
||||
});
|
||||
Reference in new issue
Block a user