Release v2.13.1
Publish Docker Image / build-and-push-existing-registry (./build/Dockerfile, web, pulse-signage-web) (push) Successful in 1m15s
Publish Docker Image / build-and-push-existing-registry (./build/Dockerfile.player, player, pulse-signage-player) (push) Successful in 32s

This commit is contained in:
2026-09-11 20:46:37 +01:00
parent 0a03cdd0b7
commit 394d23bb4d
47 changed files with 2408 additions and 559 deletions
+25 -13
View File
@@ -1,6 +1,8 @@
const test = require('node:test');
const assert = require('node:assert/strict');
const fs = require('node:fs');
const os = require('node:os');
const path = require('node:path');
require('../src/common');
@@ -172,7 +174,11 @@ test('canvas size update returns a warning when an in-use canvas changes dimensi
assert.equal(queries.length, 2);
});
test('slide upload cleanup route removes unused uploads', async () => {
test('slide upload cleanup route removes pending media assets', async () => {
const uploadRoot = await fs.promises.mkdtemp(path.join(os.tmpdir(), 'pulse-slide-upload-cleanup-'));
const uploadDir = path.join(uploadRoot, 'media', 'uploads');
await fs.promises.mkdir(uploadDir, { recursive: true });
await fs.promises.writeFile(path.join(uploadDir, 'test-file.png'), Buffer.from('temporary upload'));
const handlers = {};
const app = {
get(path, ...routeHandlers) {
@@ -183,12 +189,16 @@ test('slide upload cleanup route removes unused uploads', async () => {
}
};
let cleanupCall = null;
const deps = {
pool: {
async query() {
return [[]];
async query(sql) {
if (String(sql).includes('is_published = 0')) {
return [[{ id: 1 }]];
}
if (String(sql).includes('DELETE FROM c_media_assets')) {
return [{ affectedRows: 1 }];
}
return [[{ ref_count: 0 }]];
}
},
common: {
@@ -239,9 +249,7 @@ test('slide upload cleanup route removes unused uploads', async () => {
collectUploadReferencesFromSlide: () => [],
collectUploadReferencesFromTemplate: () => [],
collectUploadReferencesFromPayload: () => [],
removeUnusedUploadFiles: async (pool, uploadDir, uploadPaths) => {
cleanupCall = { pool, uploadDir, uploadPaths };
},
removeUnusedUploadFiles: async () => {},
syncPlaylistUploadsOnChange: async () => {},
getAuditUserId: () => 1,
redirectAfterSave: () => {},
@@ -257,7 +265,7 @@ test('slide upload cleanup route removes unused uploads', async () => {
};
},
hasAnyPermission: () => true,
uploadDir: 'e:\\Projects Git\\pulse-signage\\media\\uploads'
uploadDir
};
registerContentRoutes(app, deps);
@@ -286,11 +294,15 @@ test('slide upload cleanup route removes unused uploads', async () => {
}
};
await routeHandlers[1](req, res, () => {});
try {
await routeHandlers[1](req, res, () => {});
assert.equal(res.statusCode, 204);
assert.equal(cleanupCall.uploadDir, 'e:\\Projects Git\\pulse-signage\\media\\uploads');
assert.deepEqual(cleanupCall.uploadPaths, ['/media/uploads/test-file.png']);
assert.equal(res.statusCode, 204);
assert.equal(fs.existsSync(path.join(uploadDir, 'test-file.png')), false);
assert.equal(res.statusCode, 204);
} finally {
await fs.promises.rm(uploadRoot, { recursive: true, force: true });
}
});
test('wysiwyg image uploads are capped below the dedicated image region limit', async () => {