From 0f24c99456f96611f8bbfaace24ed6e78d8a3f62 Mon Sep 17 00:00:00 2001 From: Faruk AYDIN Date: Wed, 21 Feb 2024 16:01:45 +0100 Subject: [PATCH] feat: Add permissions to role serializer --- packages/backend/src/serializers/role.js | 12 ++++++++- packages/backend/src/serializers/role.test.js | 25 ++++++++++++++++++- 2 files changed, 35 insertions(+), 2 deletions(-) diff --git a/packages/backend/src/serializers/role.js b/packages/backend/src/serializers/role.js index 1835a093..0209097d 100644 --- a/packages/backend/src/serializers/role.js +++ b/packages/backend/src/serializers/role.js @@ -1,5 +1,7 @@ +import permissionSerializer from './permission'; + const roleSerializer = (role) => { - return { + let roleData = { id: role.id, name: role.name, key: role.key, @@ -8,6 +10,14 @@ const roleSerializer = (role) => { updatedAt: role.updatedAt, isAdmin: role.isAdmin, }; + + if (role.permissions) { + roleData.permissions = role.permissions.map((permission) => + permissionSerializer(permission) + ); + } + + return roleData; }; export default roleSerializer; diff --git a/packages/backend/src/serializers/role.test.js b/packages/backend/src/serializers/role.test.js index 92a0d6b5..900ad9c2 100644 --- a/packages/backend/src/serializers/role.test.js +++ b/packages/backend/src/serializers/role.test.js @@ -1,12 +1,25 @@ import { describe, it, expect, beforeEach } from 'vitest'; import { createRole } from '../../test/factories/role'; import roleSerializer from './role'; +import { createPermission } from '../../test/factories/permission'; describe('roleSerializer', () => { - let role; + let role, permissionOne, permissionTwo; beforeEach(async () => { role = await createRole(); + + permissionOne = await createPermission({ + roleId: role.id, + action: 'read', + subject: 'User', + }); + + permissionTwo = await createPermission({ + roleId: role.id, + action: 'read', + subject: 'Role', + }); }); it('should return role data', async () => { @@ -22,4 +35,14 @@ describe('roleSerializer', () => { expect(roleSerializer(role)).toEqual(expectedPayload); }); + + it('should return role data with the permissions', async () => { + role.permissions = [permissionOne, permissionTwo]; + + const expectedPayload = { + permissions: [permissionOne, permissionTwo], + }; + + expect(roleSerializer(role)).toMatchObject(expectedPayload); + }); });