155 lines
3.8 KiB
JavaScript
155 lines
3.8 KiB
JavaScript
const test = require('node:test');
|
|
const assert = require('node:assert/strict');
|
|
|
|
require('../src/common');
|
|
|
|
const registerTimetableRoutes = require('../src/web/routes/data-sources/timetables/routes');
|
|
|
|
function createApp() {
|
|
const handlers = {};
|
|
return {
|
|
handlers: handlers,
|
|
app: {
|
|
get(path, ...routeHandlers) {
|
|
handlers['GET ' + path] = routeHandlers;
|
|
},
|
|
post(path, ...routeHandlers) {
|
|
handlers['POST ' + path] = routeHandlers;
|
|
}
|
|
}
|
|
};
|
|
}
|
|
|
|
function createConnection() {
|
|
const queries = [];
|
|
return {
|
|
queries: queries,
|
|
async beginTransaction() {
|
|
queries.push(['beginTransaction']);
|
|
},
|
|
async query(sql, params) {
|
|
queries.push([sql, params]);
|
|
if (String(sql).indexOf('INSERT INTO i_timetable_groups') !== -1) {
|
|
return [{ insertId: 42 }];
|
|
}
|
|
return [{}];
|
|
},
|
|
async commit() {
|
|
queries.push(['commit']);
|
|
},
|
|
async rollback() {
|
|
queries.push(['rollback']);
|
|
},
|
|
release() {
|
|
queries.push(['release']);
|
|
}
|
|
};
|
|
}
|
|
|
|
test('timetable create and update persist the selected timezone', async () => {
|
|
const connection = createConnection();
|
|
const { app, handlers } = createApp();
|
|
|
|
registerTimetableRoutes(app, {
|
|
pool: {
|
|
getConnection() {
|
|
return connection;
|
|
}
|
|
},
|
|
common: {
|
|
fetchTimetableGroupById: async function () {
|
|
return {
|
|
id: 7,
|
|
name: 'Existing',
|
|
short_description: 'Old description',
|
|
timezone: 'Europe/London'
|
|
};
|
|
},
|
|
fetchDuplicateName: async function () {
|
|
return false;
|
|
},
|
|
buildTimetableGroupPayload: function (req) {
|
|
return {
|
|
name: req.body.name,
|
|
shortDescription: req.body.short_description,
|
|
timezone: req.body.timezone
|
|
};
|
|
},
|
|
fetchTimetableEntriesByGroupId: async function () {
|
|
return [];
|
|
}
|
|
},
|
|
getAuditUserId: function () {
|
|
return 9;
|
|
},
|
|
redirectAfterSave: function (_req, res, url) {
|
|
res.redirect(url);
|
|
},
|
|
parseDateTimeLocal: function (value) {
|
|
return value ? new Date(value) : null;
|
|
},
|
|
requirePermission: function () {
|
|
return function (_req, _res, next) {
|
|
next();
|
|
};
|
|
}
|
|
});
|
|
|
|
const createRoute = handlers['POST /data-sources/timetables'][1];
|
|
const updateRoute = handlers['POST /data-sources/timetables/:id'][1];
|
|
|
|
const createResponse = {
|
|
redirects: [],
|
|
redirect(url) {
|
|
this.redirects.push(url);
|
|
},
|
|
status() {
|
|
return this;
|
|
}
|
|
};
|
|
|
|
await createRoute({
|
|
body: {
|
|
name: 'Morning',
|
|
short_description: 'Breakfast block',
|
|
timezone: 'Europe/Berlin'
|
|
},
|
|
currentUser: { id: 1 },
|
|
query: {}
|
|
}, createResponse, function () {});
|
|
|
|
assert.deepEqual(connection.queries[1], [
|
|
'INSERT INTO i_timetable_groups (name, short_description, timezone, created_by, modified_by) VALUES (?, ?, ?, ?, ?)',
|
|
['Morning', 'Breakfast block', 'Europe/Berlin', 9, 9]
|
|
]);
|
|
assert.equal(createResponse.redirects[0], '/data-sources/timetables/42/edit');
|
|
|
|
connection.queries.length = 0;
|
|
|
|
const updateResponse = {
|
|
redirects: [],
|
|
redirect(url) {
|
|
this.redirects.push(url);
|
|
},
|
|
status() {
|
|
return this;
|
|
}
|
|
};
|
|
|
|
await updateRoute({
|
|
params: { id: '7' },
|
|
body: {
|
|
name: 'Morning',
|
|
short_description: 'Breakfast block',
|
|
timezone: 'Europe/Berlin'
|
|
},
|
|
currentUser: { id: 1 },
|
|
query: {}
|
|
}, updateResponse, function () {});
|
|
|
|
assert.deepEqual(connection.queries[1], [
|
|
'UPDATE i_timetable_groups SET name = ?, short_description = ?, timezone = ?, modified_by = ? WHERE id = ?',
|
|
['Morning', 'Breakfast block', 'Europe/Berlin', 9, 7]
|
|
]);
|
|
assert.equal(updateResponse.redirects[0], '/data-sources/timetables/7/edit');
|
|
}); |