mirror of
https://github.com/lingble/chatwoot.git
synced 2025-11-03 04:27:53 +00:00
We previously relied on user roles to determine whether to render specific routes in our frontend components. A permissions-based model is replacing this approach. Follow up: #9695 Co-authored-by: Pranav <pranavrajs@gmail.com>
85 lines
2.1 KiB
JavaScript
85 lines
2.1 KiB
JavaScript
import {
|
|
buildPermissionsFromRouter,
|
|
hasPermissions,
|
|
} from '../permissionsHelper';
|
|
|
|
describe('hasPermissions', () => {
|
|
it('returns true if permission is present', () => {
|
|
expect(
|
|
hasPermissions(['contact_manage'], ['team_manage', 'contact_manage'])
|
|
).toBe(true);
|
|
});
|
|
|
|
it('returns true if permission is not present', () => {
|
|
expect(
|
|
hasPermissions(['contact_manage'], ['team_manage', 'user_manage'])
|
|
).toBe(false);
|
|
expect(hasPermissions()).toBe(false);
|
|
expect(hasPermissions([])).toBe(false);
|
|
});
|
|
});
|
|
|
|
describe('buildPermissionsFromRouter', () => {
|
|
it('returns a valid object when routes have permissions defined', () => {
|
|
expect(
|
|
buildPermissionsFromRouter([
|
|
{
|
|
path: 'agent',
|
|
name: 'agent_list',
|
|
meta: { permissions: ['agent_admin'] },
|
|
},
|
|
{
|
|
path: 'inbox',
|
|
children: [
|
|
{
|
|
path: '',
|
|
name: 'inbox_list',
|
|
meta: { permissions: ['inbox_admin'] },
|
|
},
|
|
],
|
|
},
|
|
{
|
|
path: 'conversations',
|
|
children: [
|
|
{
|
|
path: '',
|
|
children: [
|
|
{
|
|
path: 'attachments',
|
|
name: 'attachments_list',
|
|
meta: { permissions: ['conversation_admin'] },
|
|
},
|
|
],
|
|
},
|
|
],
|
|
},
|
|
])
|
|
).toEqual({
|
|
agent_list: ['agent_admin'],
|
|
inbox_list: ['inbox_admin'],
|
|
attachments_list: ['conversation_admin'],
|
|
});
|
|
});
|
|
|
|
it('throws an error if a named routed does not have permissions defined', () => {
|
|
expect(() => {
|
|
buildPermissionsFromRouter([
|
|
{
|
|
path: 'agent',
|
|
name: 'agent_list',
|
|
},
|
|
]);
|
|
}).toThrow("The route doesn't have the required permissions defined");
|
|
|
|
expect(() => {
|
|
buildPermissionsFromRouter([
|
|
{
|
|
path: 'agent',
|
|
name: 'agent_list',
|
|
meta: {},
|
|
},
|
|
]);
|
|
}).toThrow("The route doesn't have the required permissions defined");
|
|
});
|
|
});
|