longevity: revisione finale - codice cliente non riusabile, ruoli allineati, middleware verificato
- creaCliente: il codice si deduce dal massimo fra identity E longevity (non piu' solo identity), cosi' un client_code cancellato dall'anagrafica non torna mai disponibile e non si attribuiscono le misure di un vecchio cliente a uno nuovo. Compensazione se la scrittura su longevity fallisce dopo quella su identity. - ROLES unica fonte in auth.ts (Role e isRole derivati); users.astro e users/new.astro usano quella lista invece di array scritti a mano che dimenticavano cliente/trainer. - Commento falso su cosa protegge il middleware, riscritto: rimanda a isProtectedPath. - vitest.config.ts: alias per astro:middleware (stesso bersaglio della pipeline vite di Astro), cosi' src/middleware.ts e' finalmente importabile e testabile in isolamento - prima nessun test lo caricava davvero. - export.test.ts: asserzione posizionale per colonna, non piu' solo intestazioni scritte a mano; intercetta un riordino della SELECT che disallinea etichette e valori. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -1,5 +1,7 @@
|
||||
import { describe, it, expect } from 'vitest';
|
||||
import { canAccessAdminPath, isProtectedPath, landingFor, isRole } from '../../src/lib/auth';
|
||||
import { readFileSync } from 'node:fs';
|
||||
import { join } from 'node:path';
|
||||
import { canAccessAdminPath, isProtectedPath, landingFor, isRole, ROLES } from '../../src/lib/auth';
|
||||
|
||||
describe('accesso alle rotte longevity', () => {
|
||||
it('il cliente entra nel proprio spazio', () => {
|
||||
@@ -93,3 +95,29 @@ describe('isRole — validazione dei ruoli', () => {
|
||||
expect(isRole('qualsiasi-cosa')).toBe(false);
|
||||
});
|
||||
});
|
||||
|
||||
describe('ROLES — fonte unica dei ruoli, usata dal pannello utenti', () => {
|
||||
it('contiene tutti e sei i ruoli, cliente e trainer inclusi', () => {
|
||||
expect(ROLES).toContain('cliente');
|
||||
expect(ROLES).toContain('trainer');
|
||||
expect(ROLES).toContain('admin');
|
||||
expect(ROLES).toContain('superuser');
|
||||
expect(ROLES).toContain('user');
|
||||
expect(ROLES).toContain('piattaforme');
|
||||
expect(ROLES.length).toBe(6);
|
||||
});
|
||||
|
||||
it('isRole accetta esattamente i ruoli di ROLES, nessuno in piu o in meno', () => {
|
||||
for (const r of ROLES) expect(isRole(r)).toBe(true);
|
||||
expect(isRole('non-un-ruolo')).toBe(false);
|
||||
});
|
||||
});
|
||||
|
||||
describe('pannello utenti — la tendina dei ruoli non e piu scritta a mano', () => {
|
||||
it('users.astro pesca i ruoli da ROLES, non da una lista propria che ne dimentica due', () => {
|
||||
const src = readFileSync(join(process.cwd(), 'src/pages/admin/users.astro'), 'utf8');
|
||||
expect(src).toContain('ROLES');
|
||||
// La vecchia lista a quattro (dimenticava cliente e trainer) non deve piu comparire.
|
||||
expect(src).not.toContain("['user', 'superuser', 'piattaforme', 'admin']");
|
||||
});
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user