diff --git a/src/utils/paginate.ts b/src/utils/paginate.ts index 2d52890..7408ecb 100644 --- a/src/utils/paginate.ts +++ b/src/utils/paginate.ts @@ -10,6 +10,5 @@ export const paginate = (options: PaginatedOptions = { page: 1, size: 24 }, max const offset = (page - 1) * size; const limit = size; - return { offset, limit }; }; diff --git a/tests/hasPermissions.test.ts b/tests/hasPermissions.test.ts new file mode 100644 index 0000000..21557ab --- /dev/null +++ b/tests/hasPermissions.test.ts @@ -0,0 +1,115 @@ +import type { User } from '../src/entities/User'; +import { Permission } from '../src/enums/Permission'; +import { UserType } from '../src/enums/UserType'; +import { hasPermissions } from '../src/utils/hasPermission'; + +let user: User; // Variável para armazenar o usuário + +beforeAll(() => { + user = { + id: 1, + authId: '123', + name: 'John Doe', + email: 'johnD@gmail.com', + phone: '912345678', + vat: '123456789', + type: UserType.Consumer, + disableEmails: false + }; + + return user; +}); + +test('no permissions user example', () => { + const noPermissions = hasPermissions(user, Permission.READ_OTHER_CONSUMER); + expect(noPermissions).toBe(false); +}); + +test('read/write other consumer permission example', () => { + const role = { + id: 1, + name: 'AccountManager', + permissions: Permission.READ_OTHER_CONSUMER + }; + + user.role = role; + + const readOtherConsumer = hasPermissions(user, Permission.READ_OTHER_CONSUMER); + const writeOtherConsumer = hasPermissions(user, Permission.WRITE_OTHER_CONSUMER); + + const readOtherProducer = hasPermissions(user, Permission.READ_OTHER_PRODUCER); + const writeOtherProducer = hasPermissions(user, Permission.WRITE_OTHER_PRODUCER); + + expect(readOtherConsumer).toBe(true); + expect(writeOtherConsumer).toBe(false); + + expect(readOtherProducer).toBe(false); + expect(writeOtherProducer).toBe(false); +}); + +test('read/write other user (consumero or producer) permission example', () => { + const role = { + id: 2, + name: 'AccountEditor', + permissions: + Permission.READ_OTHER_CONSUMER | Permission.WRITE_OTHER_CONSUMER | Permission.READ_OTHER_PRODUCER | Permission.WRITE_OTHER_PRODUCER + }; + + user.role = role; + + const readOtherConsumer = hasPermissions(user, Permission.READ_OTHER_CONSUMER); + const writeOtherConsumer = hasPermissions(user, Permission.WRITE_OTHER_CONSUMER); + + const readOtherProducer = hasPermissions(user, Permission.READ_OTHER_PRODUCER); + const writeOtherProducer = hasPermissions(user, Permission.WRITE_OTHER_PRODUCER); + + const writeCategory = hasPermissions(user, Permission.WRITE_CATEGORY); + + expect(readOtherConsumer).toBe(true); + expect(writeOtherConsumer).toBe(true); + + expect(readOtherProducer).toBe(true); + expect(writeOtherProducer).toBe(true); + + expect(writeCategory).toBe(false); +}); + +test('all permissions user example', () => { + const role = { + id: 3, + name: 'Admin', + permissions: Permission.ALL + }; + + user.role = role; + + const readOtherConsumer = hasPermissions(user, Permission.READ_OTHER_CONSUMER); + const writeOtherConsumer = hasPermissions(user, Permission.WRITE_OTHER_CONSUMER); + + const readOtherProducer = hasPermissions(user, Permission.READ_OTHER_PRODUCER); + const writeOtherProducer = hasPermissions(user, Permission.WRITE_OTHER_PRODUCER); + + const writeCategory = hasPermissions(user, Permission.WRITE_CATEGORY); + const deleteCategory = hasPermissions(user, Permission.DELETE_CATEGORY); + + const writeProduct = hasPermissions(user, Permission.WRITE_PRODUCT); + const deleteProduct = hasPermissions(user, Permission.DELETE_PRODUCT); + + const createAdmin = hasPermissions(user, Permission.CREATE_ADMIN); + const deleteAdmin = hasPermissions(user, Permission.DELETE_ADMIN); + + expect(readOtherConsumer).toBe(true); + expect(writeOtherConsumer).toBe(true); + + expect(readOtherProducer).toBe(true); + expect(writeOtherProducer).toBe(true); + + expect(writeCategory).toBe(true); + expect(deleteCategory).toBe(true); + + expect(writeProduct).toBe(true); + expect(deleteProduct).toBe(true); + + expect(createAdmin).toBe(true); + expect(deleteAdmin).toBe(true); +}); diff --git a/tests/paginate.test.ts b/tests/paginate.test.ts new file mode 100644 index 0000000..e50bb25 --- /dev/null +++ b/tests/paginate.test.ts @@ -0,0 +1,62 @@ +import { paginate } from '../src/utils/paginate'; +import type { PaginatedOptions } from '../src/interfaces/PaginationOptions'; + +test('valid paginated example', () => { + const options: PaginatedOptions = { + page: 3, + size: 10 + }; + + const result = paginate(options); + + expect(result.limit).toEqual(10); + expect(result.offset).toEqual(20); +}); + +test('invalid paginated example - negative page', () => { + const options: PaginatedOptions = { + page: -3, + size: 10 + }; + + const result = paginate(options); + + expect(result.limit).toEqual(10); + expect(result.offset).toEqual(0); +}); + +test('invalid paginated example - negative size', () => { + const options: PaginatedOptions = { + page: 3, + size: -10 + }; + + const result = paginate(options); + + expect(result.limit).toEqual(1); + expect(result.offset).toEqual(2); +}); + +test('invalid paginated example - negative page and size', () => { + const options: PaginatedOptions = { + page: -3, + size: -10 + }; + + const result = paginate(options); + + expect(result.limit).toEqual(1); + expect(result.offset).toEqual(0); +}); + +test('invalid paginated example - size too big', () => { + const options: PaginatedOptions = { + page: 10, + size: 1000 + }; + + const result = paginate(options); + + expect(result.limit).toEqual(100); + expect(result.offset).toEqual(900); +}); diff --git a/tests/tsconfig.json b/tests/tsconfig.json index 351e062..757b2b9 100644 --- a/tests/tsconfig.json +++ b/tests/tsconfig.json @@ -2,7 +2,7 @@ "extends": "../tsconfig.base.json", "compilerOptions": { "outDir": "../dist/tests", - "rootDir": ".", + "rootDir": "../", "types": ["node", "jest"] } }