Skip to content

Commit 35c9d78

Browse files
iqbalhasandevgithub-actions[bot]
authored andcommitted
style: fix code formatting [skip ci]
1 parent 9b2879b commit 35c9d78

File tree

2 files changed

+88
-53
lines changed

2 files changed

+88
-53
lines changed

__tests__/verify-user-case.test.tsx

Lines changed: 84 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -31,51 +31,62 @@ describe('Verify User Case: properties.view-all||properties.view-own', () => {
3131
// Test case 1: User has both permissions
3232
mockPageProps(['properties.view-all', 'properties.view-own']);
3333
let { result } = renderHook(() => usePermissions());
34-
34+
3535
console.log('\n=== Test Case 1: User has BOTH permissions ===');
36-
console.log('User permissions:', ['properties.view-all', 'properties.view-own']);
36+
console.log('User permissions:', [
37+
'properties.view-all',
38+
'properties.view-own',
39+
]);
3740
console.log('Expression: "properties.view-all||properties.view-own"');
38-
39-
const result1 = result.current.hasPermission('properties.view-all||properties.view-own');
41+
42+
const result1 = result.current.hasPermission(
43+
'properties.view-all||properties.view-own'
44+
);
4045
console.log('Result:', result1);
4146
expect(result1).toBe(true);
4247
console.log('✅ PASS: Should return true when user has both permissions');
4348

4449
// Test case 2: User has only first permission
4550
mockPageProps(['properties.view-all']);
4651
result = renderHook(() => usePermissions()).result;
47-
52+
4853
console.log('\n=== Test Case 2: User has FIRST permission only ===');
4954
console.log('User permissions:', ['properties.view-all']);
5055
console.log('Expression: "properties.view-all||properties.view-own"');
51-
52-
const result2 = result.current.hasPermission('properties.view-all||properties.view-own');
56+
57+
const result2 = result.current.hasPermission(
58+
'properties.view-all||properties.view-own'
59+
);
5360
console.log('Result:', result2);
5461
expect(result2).toBe(true);
5562
console.log('✅ PASS: Should return true when user has first permission');
5663

5764
// Test case 3: User has only second permission
5865
mockPageProps(['properties.view-own']);
5966
result = renderHook(() => usePermissions()).result;
60-
67+
6168
console.log('\n=== Test Case 3: User has SECOND permission only ===');
6269
console.log('User permissions:', ['properties.view-own']);
6370
console.log('Expression: "properties.view-all||properties.view-own"');
64-
65-
const result3 = result.current.hasPermission('properties.view-all||properties.view-own');
71+
72+
const result3 = result.current.hasPermission(
73+
'properties.view-all||properties.view-own'
74+
);
6675
console.log('Result:', result3);
6776
expect(result3).toBe(true);
6877
console.log('✅ PASS: Should return true when user has second permission');
6978

7079
// Test case 4: User has neither permission
7180
mockPageProps([]);
7281
result = renderHook(() => usePermissions()).result;
73-
82+
7483
console.log('\n=== Test Case 4: User has NO permissions ===');
7584
console.log('User permissions:', []);
7685
console.log('Expression: "properties.view-all||properties.view-own"');
77-
78-
const result4 = result.current.hasPermission('properties.view-all||properties.view-own');
86+
87+
const result4 = result.current.hasPermission(
88+
'properties.view-all||properties.view-own'
89+
);
7990
console.log('Result:', result4);
8091
expect(result4).toBe(false);
8192
console.log('✅ PASS: Should return false when user has no permissions');
@@ -84,102 +95,126 @@ describe('Verify User Case: properties.view-all||properties.view-own', () => {
8495
it('should work with different permission combinations', () => {
8596
// Test with different permission names to ensure the fix is general
8697
mockPageProps(['users.create', 'posts.view']);
87-
98+
8899
const { result } = renderHook(() => usePermissions());
89-
100+
90101
console.log('\n=== Test with different permissions ===');
91102
console.log('User permissions:', ['users.create', 'posts.view']);
92-
103+
93104
// Test OR expression
94105
const orResult = result.current.hasPermission('users.create||posts.view');
95106
console.log('users.create||posts.view:', orResult);
96107
expect(orResult).toBe(true);
97-
108+
98109
// Test AND expression
99110
const andResult = result.current.hasPermission('users.create&&posts.view');
100111
console.log('users.create&&posts.view:', andResult);
101112
expect(andResult).toBe(true);
102-
113+
103114
// Test with one missing permission
104-
const missingResult = result.current.hasPermission('users.create||posts.delete');
115+
const missingResult = result.current.hasPermission(
116+
'users.create||posts.delete'
117+
);
105118
console.log('users.create||posts.delete:', missingResult);
106119
expect(missingResult).toBe(true);
107-
120+
108121
// Test with both missing permissions
109-
const bothMissingResult = result.current.hasPermission('users.delete||posts.delete');
122+
const bothMissingResult = result.current.hasPermission(
123+
'users.delete||posts.delete'
124+
);
110125
console.log('users.delete||posts.delete:', bothMissingResult);
111126
expect(bothMissingResult).toBe(false);
112-
113-
console.log('✅ PASS: All different permission combinations work correctly');
127+
128+
console.log(
129+
'✅ PASS: All different permission combinations work correctly'
130+
);
114131
});
115132

116133
it('should work with hyphenated permission names', () => {
117134
// Test specifically with hyphenated permissions like the user's case
118-
mockPageProps(['user-profile.edit', 'api-access.read', 'system-config.update']);
119-
135+
mockPageProps([
136+
'user-profile.edit',
137+
'api-access.read',
138+
'system-config.update',
139+
]);
140+
120141
const { result } = renderHook(() => usePermissions());
121-
142+
122143
console.log('\n=== Test with hyphenated permissions ===');
123-
console.log('User permissions:', ['user-profile.edit', 'api-access.read', 'system-config.update']);
124-
144+
console.log('User permissions:', [
145+
'user-profile.edit',
146+
'api-access.read',
147+
'system-config.update',
148+
]);
149+
125150
// Test OR with hyphens
126-
const orResult = result.current.hasPermission('user-profile.edit||api-access.read');
151+
const orResult = result.current.hasPermission(
152+
'user-profile.edit||api-access.read'
153+
);
127154
console.log('user-profile.edit||api-access.read:', orResult);
128155
expect(orResult).toBe(true);
129-
156+
130157
// Test AND with hyphens
131-
const andResult = result.current.hasPermission('user-profile.edit&&api-access.read');
158+
const andResult = result.current.hasPermission(
159+
'user-profile.edit&&api-access.read'
160+
);
132161
console.log('user-profile.edit&&api-access.read:', andResult);
133162
expect(andResult).toBe(true);
134-
163+
135164
// Test complex expression with hyphens
136-
const complexResult = result.current.hasPermission('(user-profile.edit||api-access.read)&&system-config.update');
137-
console.log('(user-profile.edit||api-access.read)&&system-config.update:', complexResult);
165+
const complexResult = result.current.hasPermission(
166+
'(user-profile.edit||api-access.read)&&system-config.update'
167+
);
168+
console.log(
169+
'(user-profile.edit||api-access.read)&&system-config.update:',
170+
complexResult
171+
);
138172
expect(complexResult).toBe(true);
139-
173+
140174
console.log('✅ PASS: Hyphenated permission names work correctly');
141175
});
142176

143177
it('should debug the evaluation process step by step', () => {
144178
mockPageProps(['properties.view-all', 'properties.view-own']);
145-
179+
146180
const { result } = renderHook(() => usePermissions());
147-
181+
148182
console.log('\n=== Step-by-step debugging ===');
149-
console.log('User permissions:', ['properties.view-all', 'properties.view-own']);
150-
183+
console.log('User permissions:', [
184+
'properties.view-all',
185+
'properties.view-own',
186+
]);
187+
151188
const expression = 'properties.view-all||properties.view-own';
152189
console.log('Original expression:', expression);
153-
190+
154191
// Let's manually trace through the normalization process
155192
let jsExpression = expression;
156-
193+
157194
// Step 1: Replace double operators with markers
158195
jsExpression = jsExpression
159196
.replace(/\|\|/g, ' DOUBLE_PIPE ')
160197
.replace(/&&/g, ' DOUBLE_AMP ');
161198
console.log('After double operator replacement:', jsExpression);
162-
199+
163200
// Step 2: Replace single operators
164-
jsExpression = jsExpression
165-
.replace(/\|/g, ' || ')
166-
.replace(/&/g, ' && ');
201+
jsExpression = jsExpression.replace(/\|/g, ' || ').replace(/&/g, ' && ');
167202
console.log('After single operator replacement:', jsExpression);
168-
203+
169204
// Step 3: Replace markers with proper operators
170205
jsExpression = jsExpression
171206
.replace(/DOUBLE_PIPE/g, ' || ')
172207
.replace(/DOUBLE_AMP/g, ' && ');
173208
console.log('After marker replacement:', jsExpression);
174-
209+
175210
// Step 4: Clean up spaces
176211
jsExpression = jsExpression.replace(/\s+/g, ' ').trim();
177212
console.log('Final normalized expression:', jsExpression);
178-
213+
179214
// Test the actual function
180215
const actualResult = result.current.hasPermission(expression);
181216
console.log('Actual function result:', actualResult);
182-
217+
183218
expect(actualResult).toBe(true);
184219
console.log('✅ PASS: Step-by-step debugging shows correct evaluation');
185220
});

hooks/use-permissions.tsx

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -98,17 +98,17 @@ export function usePermissions(permissions?: string[]) {
9898
// Normalize logical operators to JavaScript equivalents
9999
// Use a more robust approach to avoid double replacement issues
100100
let jsExpression = expression;
101-
101+
102102
// First, replace double operators with temporary markers
103103
jsExpression = jsExpression
104104
.replace(/\|\|/g, ' DOUBLE_PIPE ') // Double || becomes temporary marker
105-
.replace(/&&/g, ' DOUBLE_AMP '); // Double && becomes temporary marker
106-
105+
.replace(/&&/g, ' DOUBLE_AMP '); // Double && becomes temporary marker
106+
107107
// Then replace single operators
108108
jsExpression = jsExpression
109109
.replace(/\|/g, ' || ') // Single | becomes ||
110110
.replace(/&/g, ' && '); // Single & becomes &&
111-
111+
112112
// Finally, replace temporary markers with proper operators
113113
jsExpression = jsExpression
114114
.replace(/DOUBLE_PIPE/g, ' || ') // Double || with spaces

0 commit comments

Comments
 (0)