Compare commits
2 Commits
2c5e4ebf11
...
PMPR-ui
| Author | SHA1 | Date | |
|---|---|---|---|
| bb09c1cce5 | |||
| f162fcaadc |
@@ -7,4 +7,5 @@ INSERT INTO "permissions" ("id", "nom") VALUES
|
||||
('module_read', 'Consulter les modules et enseignements'),
|
||||
('module_write', 'Gérer les modules et enseignements'),
|
||||
('user_read', 'Consulter les utilisateurs et leurs rôles'),
|
||||
('user_write', 'Gérer les utilisateurs et leurs rôles');
|
||||
('user_write', 'Gérer les utilisateurs et leurs rôles'),
|
||||
('role_write', 'Gérer les rôles et leurs permissions');
|
||||
|
||||
@@ -9,5 +9,6 @@ INSERT INTO "permissions" ("id", "nom") VALUES
|
||||
('module_read', 'Consulter les modules et enseignements'),
|
||||
('module_write', 'Gérer les modules et enseignements'),
|
||||
('user_read', 'Consulter les utilisateurs et leurs rôles'),
|
||||
('user_write', 'Gérer les utilisateurs et leurs rôles')
|
||||
('user_write', 'Gérer les utilisateurs et leurs rôles'),
|
||||
('role_write', 'Gérer les rôles et leurs permissions')
|
||||
ON CONFLICT ("id") DO UPDATE SET "nom" = EXCLUDED."nom";
|
||||
|
||||
@@ -1,8 +1,18 @@
|
||||
import { useEffect, useState } from "preact/hooks";
|
||||
|
||||
type Student = { numEtud: number; nom: string; prenom: string; idPromo: string };
|
||||
type Student = {
|
||||
numEtud: number;
|
||||
nom: string;
|
||||
prenom: string;
|
||||
idPromo: string;
|
||||
};
|
||||
type UE = { id: number; nom: string };
|
||||
type UEModule = { idModule: string; idUE: number; idPromo: string; coeff: number };
|
||||
type UEModule = {
|
||||
idModule: string;
|
||||
idUE: number;
|
||||
idPromo: string;
|
||||
coeff: number;
|
||||
};
|
||||
type Module = { id: string; nom: string };
|
||||
type Note = { numEtud: number; idModule: string; note: number };
|
||||
type Ajustement = { numEtud: number; idUE: number; valeur: number };
|
||||
@@ -202,9 +212,7 @@ export default function NoteRecap({ numEtud }: Props) {
|
||||
return (
|
||||
<div key={ue.id} class="edit-section">
|
||||
{/* UE header */}
|
||||
<div
|
||||
style="display: flex; align-items: center; gap: 0.75rem; margin-bottom: 0.75rem; flex-wrap: wrap"
|
||||
>
|
||||
<div style="display: flex; align-items: center; gap: 0.75rem; margin-bottom: 0.75rem; flex-wrap: wrap">
|
||||
<p class="edit-section-title" style="margin: 0">{ue.nom}</p>
|
||||
{avg !== null && (
|
||||
<span class={noteClass(avg)} style="font-size: 0.78rem">
|
||||
@@ -254,9 +262,7 @@ export default function NoteRecap({ numEtud }: Props) {
|
||||
</span>
|
||||
{isEditing
|
||||
? (
|
||||
<div
|
||||
style="display: flex; align-items: center; gap: 0.25rem"
|
||||
>
|
||||
<div style="display: flex; align-items: center; gap: 0.25rem">
|
||||
<input
|
||||
class="form-input"
|
||||
style="width: 5rem; text-align: center; font-size: 0.85rem"
|
||||
|
||||
@@ -1,24 +1,40 @@
|
||||
// #115 - E2E tests for GET /permissions
|
||||
// Handler statique (pas de DB), test direct du handler
|
||||
|
||||
import { assertEquals, assertExists } from "@std/assert";
|
||||
import { makeEmployeeContext, makeGetRequest } from "../helpers/handler.ts";
|
||||
import { seedPermissions, truncateAll } from "../helpers/db_integration.ts";
|
||||
import { handler as permissionsHandler } from "$apps/admin/api/permissions.ts";
|
||||
|
||||
const PERMISSIONS = [
|
||||
{ id: "note_read", nom: "Consulter les notes des étudiants" },
|
||||
{ id: "note_write", nom: "Saisir et modifier les notes" },
|
||||
{ id: "student_read", nom: "Consulter la liste des étudiants" },
|
||||
{
|
||||
id: "student_write",
|
||||
nom: "Gérer les étudiants (ajout, modification, suppression)",
|
||||
},
|
||||
{ id: "module_read", nom: "Consulter les modules et enseignements" },
|
||||
{ id: "module_write", nom: "Gérer les modules et enseignements" },
|
||||
{ id: "user_read", nom: "Consulter les utilisateurs et leurs rôles" },
|
||||
{ id: "user_write", nom: "Gérer les utilisateurs et leurs rôles" },
|
||||
{ id: "role_write", nom: "Gérer les rôles et leurs permissions" },
|
||||
];
|
||||
|
||||
Deno.test({
|
||||
name: "e2e permissions: GET /permissions returns all 9 permissions",
|
||||
fn() {
|
||||
const res = permissionsHandler.GET!(
|
||||
async fn() {
|
||||
await truncateAll();
|
||||
await seedPermissions(PERMISSIONS);
|
||||
const res = await permissionsHandler.GET!(
|
||||
makeGetRequest("/permissions"),
|
||||
makeEmployeeContext(),
|
||||
);
|
||||
assertEquals(res.status, 200);
|
||||
return res.text().then((text) => {
|
||||
const data = JSON.parse(text);
|
||||
assertEquals(data.length, 9);
|
||||
assertExists(data.find((p: { id: string }) => p.id === "student_read"));
|
||||
assertExists(data.find((p: { id: string }) => p.id === "role_write"));
|
||||
});
|
||||
const text = await res.text();
|
||||
const data = JSON.parse(text);
|
||||
assertEquals(data.length, 9);
|
||||
assertExists(data.find((p: { id: string }) => p.id === "student_read"));
|
||||
assertExists(data.find((p: { id: string }) => p.id === "role_write"));
|
||||
},
|
||||
sanitizeResources: false,
|
||||
sanitizeOps: false,
|
||||
@@ -27,7 +43,9 @@ Deno.test({
|
||||
Deno.test({
|
||||
name: "e2e permissions: GET /permissions - all entries have id and nom",
|
||||
async fn() {
|
||||
const res = permissionsHandler.GET!(
|
||||
await truncateAll();
|
||||
await seedPermissions(PERMISSIONS);
|
||||
const res = await permissionsHandler.GET!(
|
||||
makeGetRequest("/permissions"),
|
||||
makeEmployeeContext(),
|
||||
);
|
||||
|
||||
@@ -111,3 +111,9 @@ export async function seedAjustements(
|
||||
): Promise<typeof schema.ajustements.$inferSelect[]> {
|
||||
return await testDb.insert(schema.ajustements).values(rows).returning();
|
||||
}
|
||||
|
||||
export async function seedPermissions(
|
||||
rows: { id: string; nom: string }[],
|
||||
): Promise<typeof schema.permissions.$inferSelect[]> {
|
||||
return await testDb.insert(schema.permissions).values(rows).returning();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user