import { describe, expect, it } from 'vitest'; import { getIgnoredOperations, getMappedOperations, getPermissionsFromDefinition, } from './mappings-helpers'; import { PermissionDefinition } from './permission-definition-interface'; describe('Endpoints to Permission Definition', () => { describe('getMappedEndpoints', () => { it('with no custom permissions -> returns empty operations array', () => { // Arrange const permissionDefinition: PermissionDefinition = { gqlOptions: { anonymousGqlOperations: [], ignoredGqlOperations: [], }, permissions: [], }; // Act const result = getMappedOperations(permissionDefinition); // Assert expect(result).toHaveLength(0); }); it('with single permission of empty operations -> returns empty operations array', () => { // Arrange const permissionDefinition: PermissionDefinition = { gqlOptions: { anonymousGqlOperations: [], ignoredGqlOperations: [], }, permissions: [ { key: 'ASSET_QUERY', title: 'Asset: View', gqlOperations: [], }, ], }; // Act const result = getMappedOperations(permissionDefinition); // Assert expect(result).toHaveLength(0); }); it('with duplicate endpoints -> removes duplicates', () => { // Arrange const permissionDefinition: PermissionDefinition = { gqlOptions: { anonymousGqlOperations: [], ignoredGqlOperations: [], }, permissions: [ { key: 'ASSET_QUERY', title: 'Asset: View', gqlOperations: ['assets', 'assetsCount'], }, { key: 'ASSET_QUERY_ADMIN', title: 'Asset admin: View', gqlOperations: ['assets', 'assetsFilteredCount'], }, ], }; // Act const result = getMappedOperations(permissionDefinition); // Assert expect(result).toHaveLength(3); expect(result).toContain('assets'); expect(result).toContain('assetsCount'); expect(result).toContain('assetsFilteredCount'); }); it('without duplicate endpoints -> returns all endpoints', () => { // Arrange const permissionDefinition: PermissionDefinition = { gqlOptions: { anonymousGqlOperations: [], ignoredGqlOperations: [], }, permissions: [ { key: 'ASSET_QUERY', title: 'Asset: View', gqlOperations: ['assets', 'assetsCount'], }, { key: 'ASSET_QUERY_ADMIN', title: 'Asset admin: View', gqlOperations: ['asset', 'assetsFilteredCount'], }, ], }; // Act const result = getMappedOperations(permissionDefinition); // Assert expect(result).toHaveLength(4); expect(result).toContain('asset'); expect(result).toContain('assets'); expect(result).toContain('assetsCount'); expect(result).toContain('assetsFilteredCount'); }); it('with ignore endpoints -> removes ignore endpoints', () => { // Arrange const permissionDefinition: PermissionDefinition = { gqlOptions: { anonymousGqlOperations: [], ignoredGqlOperations: ['parentUserRole'], }, permissions: [ { key: 'ASSET_QUERY', title: 'Asset: View', gqlOperations: ['assets', 'assetsCount'], }, ], }; // Act const result = getMappedOperations(permissionDefinition); // Assert expect(result).toHaveLength(2); expect(result).toContain('assets'); expect(result).toContain('assetsCount'); expect(result).not.toContain('parentUserRole'); }); }); describe('getPermissionsFromMapping', () => { it('with only well-known permissions -> empty array', () => { // Arrange const permissionDefinition: PermissionDefinition = { gqlOptions: { anonymousGqlOperations: [], ignoredGqlOperations: [], }, permissions: [], }; // Act const result = getPermissionsFromDefinition(permissionDefinition); // Assert expect(result).toHaveLength(0); }); }); describe('getIgnoredOperations', () => { it('with no ignored operations -> returns empty operations array', () => { // Arrange const permissionDefinition: PermissionDefinition = { gqlOptions: { anonymousGqlOperations: [], ignoredGqlOperations: [], }, permissions: [], }; // Act const result = getIgnoredOperations(permissionDefinition); // Assert expect(result).toHaveLength(0); }); it('with ignored endpoints -> returns ignored endpoints', () => { // Arrange const permissionDefinition: PermissionDefinition = { gqlOptions: { anonymousGqlOperations: [], ignoredGqlOperations: ['assets'], }, permissions: [], }; // Act const result = getIgnoredOperations(permissionDefinition); // Assert expect(result).toHaveLength(1); expect(result).toContain('assets'); }); }); });