Verbeter grafische kwaliteit van kleurplaten (v0.4.67-beta) #5
4 changed files with 16 additions and 5 deletions
2
VERSION
2
VERSION
|
|
@ -1 +1 @@
|
||||||
0.3.98-beta
|
0.3.99-beta
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,7 @@
|
||||||
"use strict";
|
"use strict";
|
||||||
/* version — shown until /api/version resolves (or if the fetch fails, e.g. offline).
|
/* version — shown until /api/version resolves (or if the fetch fails, e.g. offline).
|
||||||
Kept in sync by hand with the VERSION file at the repo root on every release. */
|
Kept in sync by hand with the VERSION file at the repo root on every release. */
|
||||||
const VERSION = "0.3.98-beta";
|
const VERSION = "0.3.99-beta";
|
||||||
(function(){
|
(function(){
|
||||||
const tag = document.getElementById("verTag");
|
const tag = document.getElementById("verTag");
|
||||||
tag.textContent = "v"+VERSION;
|
tag.textContent = "v"+VERSION;
|
||||||
|
|
|
||||||
|
|
@ -441,11 +441,15 @@ export default async function api(app) {
|
||||||
need(req, reply, PERMISSIONS['users.manage']);
|
need(req, reply, PERMISSIONS['users.manage']);
|
||||||
// Ouders hebben school_id NULL en vallen daardoor buiten elke schoollijst;
|
// Ouders hebben school_id NULL en vallen daardoor buiten elke schoollijst;
|
||||||
// een school ziet wél de ouders die aan haar eigen leerlingen gekoppeld zijn.
|
// een school ziet wél de ouders die aan haar eigen leerlingen gekoppeld zijn.
|
||||||
|
// Postgres eist bij SELECT DISTINCT dat elke ORDER BY-expressie letterlijk
|
||||||
|
// in de select-lijst staat - lower(p.username) alleen via p.* volstond niet
|
||||||
|
// (gaf "for SELECT DISTINCT, ORDER BY expressions must appear in select
|
||||||
|
// list"), dus expliciet als extra kolom toevoegen.
|
||||||
const linkedParents = async (schoolId, extra = '', params = []) => (await pool.query(
|
const linkedParents = async (schoolId, extra = '', params = []) => (await pool.query(
|
||||||
`SELECT DISTINCT p.* FROM users p
|
`SELECT DISTINCT p.*, lower(p.username) AS sort_key FROM users p
|
||||||
JOIN parent_children pc ON pc.parent_id = p.id
|
JOIN parent_children pc ON pc.parent_id = p.id
|
||||||
JOIN users k ON k.id = pc.pupil_id
|
JOIN users k ON k.id = pc.pupil_id
|
||||||
WHERE k.school_id = $1 ${extra} ORDER BY lower(p.username)`,
|
WHERE k.school_id = $1 ${extra} ORDER BY sort_key`,
|
||||||
[schoolId, ...params])).rows;
|
[schoolId, ...params])).rows;
|
||||||
let rows;
|
let rows;
|
||||||
if (req.user.allRoles.includes('super')) {
|
if (req.user.allRoles.includes('super')) {
|
||||||
|
|
|
||||||
|
|
@ -289,7 +289,7 @@ test('afwijzen verwijdert alleen het verzoek; andere school mag niet afhandelen'
|
||||||
});
|
});
|
||||||
|
|
||||||
test('schoolbeheerder ziet gekoppelde ouders (met kindernamen) in de gebruikerslijst', async () => {
|
test('schoolbeheerder ziet gekoppelde ouders (met kindernamen) in de gebruikerslijst', async () => {
|
||||||
const { app } = await makeApp({ user: admin, respond: (sql) => {
|
const { app, calls } = await makeApp({ user: admin, respond: (sql) => {
|
||||||
if (sql.startsWith('SELECT * FROM users WHERE school_id')) return { rows: [
|
if (sql.startsWith('SELECT * FROM users WHERE school_id')) return { rows: [
|
||||||
{ id: 50, username: 'lena', role: 'pupil', school_id: 2, class_id: 5 },
|
{ id: 50, username: 'lena', role: 'pupil', school_id: 2, class_id: 5 },
|
||||||
] };
|
] };
|
||||||
|
|
@ -306,6 +306,13 @@ test('schoolbeheerder ziet gekoppelde ouders (met kindernamen) in de gebruikersl
|
||||||
const p = res.json().users.find((u) => u.role === 'parent');
|
const p = res.json().users.find((u) => u.role === 'parent');
|
||||||
assert.ok(p, 'ouder hoort in de schoollijst te staan');
|
assert.ok(p, 'ouder hoort in de schoollijst te staan');
|
||||||
assert.deepEqual(p.childNames, ['Lena']);
|
assert.deepEqual(p.childNames, ['Lena']);
|
||||||
|
// regressie: Postgres weigert "SELECT DISTINCT ... ORDER BY lower(p.username)"
|
||||||
|
// omdat die expressie niet letterlijk in de select-lijst staat (was stuk in
|
||||||
|
// productie voor elke school-gescopede gebruikerslijst) - de sort-expressie
|
||||||
|
// moet dus als kolom in de SELECT staan, niet alleen in de ORDER BY.
|
||||||
|
const linkedParentsCall = calls.find((c) => c.sql.includes('JOIN parent_children pc ON pc.parent_id = p.id'));
|
||||||
|
assert.match(linkedParentsCall.sql, /SELECT DISTINCT p\.\*, lower\(p\.username\) AS sort_key/);
|
||||||
|
assert.match(linkedParentsCall.sql, /ORDER BY sort_key/);
|
||||||
await app.close();
|
await app.close();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue