v0.1.11 - Editor

This commit is contained in:
2026-06-03 00:17:12 +12:00
parent f5a588d631
commit cf968e802b
23 changed files with 2165 additions and 655 deletions
+61 -1
View File
@@ -1,6 +1,6 @@
import { describe, expect, it } from 'vitest';
import { canAccessRoute, getDefaultRouteForRole, getWorkspaceRole } from './workspace-access';
import { canAccessRoute, canOpenEditor, getDefaultRouteForRole, getWorkspaceRole } from './workspace-access';
describe('workspace access policy', () => {
const operationsSession = {
@@ -21,6 +21,51 @@ describe('workspace access policy', () => {
token: 'token'
};
const fullAccessSession = {
role: 'internal',
role_name: 'Full Access',
permissions: ['edit_products', 'edit_mixes'],
name: 'Full User',
email: 'full@example.com',
token: 'token'
};
const leanSession = {
role: 'internal',
role_name: 'lean',
permissions: [
'view_dashboard',
'edit_products',
'edit_mixes',
'edit_scenarios',
'manage_client_access',
'view_settings'
],
module_permissions: {
dashboard: 'view',
products: 'edit',
mix_master: 'edit',
scenarios: 'edit',
client_access: 'manage'
},
name: 'Lean User',
email: 'lean@example.com',
token: 'token'
};
const ownerSession = {
role: 'client',
client_role: 'superadmin',
module_permissions: {
products: 'edit',
mix_master: 'edit',
client_access: 'manage'
},
name: 'Owner User',
email: 'owner@example.com',
token: 'token'
};
it('classifies operations users and sends them to mix calculator by default', () => {
expect(getWorkspaceRole(operationsSession)).toBe('operations');
expect(getDefaultRouteForRole(operationsSession)).toBe('/mix-calculator');
@@ -35,4 +80,19 @@ describe('workspace access policy', () => {
expect(getWorkspaceRole(adminSession)).toBe('admin');
expect(canAccessRoute(adminSession, '/')).toBe(true);
});
it('treats lean users as owner-level internal admins', () => {
expect(getWorkspaceRole(leanSession)).toBe('admin');
expect(canOpenEditor(leanSession)).toBe(true);
expect(canAccessRoute(leanSession, '/scenarios')).toBe(true);
expect(canAccessRoute(leanSession, '/client-access')).toBe(true);
});
it('limits editor access to internal admin sessions', () => {
expect(canOpenEditor(adminSession)).toBe(true);
expect(canOpenEditor(ownerSession)).toBe(false);
expect(canOpenEditor(fullAccessSession)).toBe(false);
expect(canAccessRoute(ownerSession, '/editor')).toBe(false);
expect(canAccessRoute(fullAccessSession, '/editor')).toBe(false);
});
});