1
1
import { describe , expect , it } from 'vitest' ;
2
- import { computeChmodOctalRepresentation , computeChmodSymbolicRepresentation } from './chmod-calculator.service' ;
2
+ import { computeChmodOctalRepresentation , computeChmodSymbolicRepresentation , computePermissionsFromChmodOctalRepresentation } from './chmod-calculator.service' ;
3
3
4
4
describe ( 'chmod-calculator' , ( ) => {
5
5
describe ( 'computeChmodOctalRepresentation' , ( ) => {
@@ -10,6 +10,7 @@ describe('chmod-calculator', () => {
10
10
owner : { read : true , write : true , execute : true } ,
11
11
group : { read : true , write : true , execute : true } ,
12
12
public : { read : true , write : true , execute : true } ,
13
+ flags : { setuid : false , setgid : false , stickybit : false } ,
13
14
} ,
14
15
} ) ,
15
16
) . to . eql ( '777' ) ;
@@ -20,6 +21,7 @@ describe('chmod-calculator', () => {
20
21
owner : { read : false , write : false , execute : false } ,
21
22
group : { read : false , write : false , execute : false } ,
22
23
public : { read : false , write : false , execute : false } ,
24
+ flags : { setuid : false , setgid : false , stickybit : false } ,
23
25
} ,
24
26
} ) ,
25
27
) . to . eql ( '000' ) ;
@@ -30,6 +32,7 @@ describe('chmod-calculator', () => {
30
32
owner : { read : false , write : true , execute : false } ,
31
33
group : { read : false , write : true , execute : true } ,
32
34
public : { read : true , write : false , execute : true } ,
35
+ flags : { setuid : false , setgid : false , stickybit : false } ,
33
36
} ,
34
37
} ) ,
35
38
) . to . eql ( '235' ) ;
@@ -40,6 +43,7 @@ describe('chmod-calculator', () => {
40
43
owner : { read : true , write : false , execute : false } ,
41
44
group : { read : false , write : true , execute : false } ,
42
45
public : { read : false , write : false , execute : true } ,
46
+ flags : { setuid : false , setgid : false , stickybit : false } ,
43
47
} ,
44
48
} ) ,
45
49
) . to . eql ( '421' ) ;
@@ -50,6 +54,7 @@ describe('chmod-calculator', () => {
50
54
owner : { read : false , write : false , execute : true } ,
51
55
group : { read : false , write : true , execute : false } ,
52
56
public : { read : true , write : false , execute : false } ,
57
+ flags : { setuid : false , setgid : false , stickybit : false } ,
53
58
} ,
54
59
} ) ,
55
60
) . to . eql ( '124' ) ;
@@ -60,18 +65,65 @@ describe('chmod-calculator', () => {
60
65
owner : { read : false , write : true , execute : false } ,
61
66
group : { read : false , write : true , execute : false } ,
62
67
public : { read : false , write : true , execute : false } ,
68
+ flags : { setuid : false , setgid : false , stickybit : false } ,
63
69
} ,
64
70
} ) ,
65
71
) . to . eql ( '222' ) ;
66
- } ) ;
67
72
73
+ expect (
74
+ computeChmodOctalRepresentation ( {
75
+ permissions : {
76
+ owner : { read : false , write : true , execute : false } ,
77
+ group : { read : false , write : true , execute : false } ,
78
+ public : { read : false , write : true , execute : false } ,
79
+ flags : { setuid : true , setgid : true , stickybit : true } ,
80
+ } ,
81
+ } ) ,
82
+ ) . to . eql ( '7222' ) ;
83
+
84
+ expect (
85
+ computeChmodOctalRepresentation ( {
86
+ permissions : {
87
+ owner : { read : false , write : true , execute : false } ,
88
+ group : { read : false , write : true , execute : false } ,
89
+ public : { read : false , write : true , execute : false } ,
90
+ flags : { setuid : true , setgid : false , stickybit : false } ,
91
+ } ,
92
+ } ) ,
93
+ ) . to . eql ( '4222' ) ;
94
+
95
+ expect (
96
+ computeChmodOctalRepresentation ( {
97
+ permissions : {
98
+ owner : { read : false , write : true , execute : false } ,
99
+ group : { read : false , write : true , execute : false } ,
100
+ public : { read : false , write : true , execute : false } ,
101
+ flags : { setuid : false , setgid : true , stickybit : false } ,
102
+ } ,
103
+ } ) ,
104
+ ) . to . eql ( '2222' ) ;
105
+
106
+ expect (
107
+ computeChmodOctalRepresentation ( {
108
+ permissions : {
109
+ owner : { read : false , write : true , execute : false } ,
110
+ group : { read : false , write : true , execute : false } ,
111
+ public : { read : false , write : true , execute : false } ,
112
+ flags : { setuid : false , setgid : false , stickybit : true } ,
113
+ } ,
114
+ } ) ,
115
+ ) . to . eql ( '1222' ) ;
116
+ } ) ;
117
+ } ) ;
118
+ describe ( 'computeChmodSymbolicRepresentation' , ( ) => {
68
119
it ( 'get the symbolic representation from permissions' , ( ) => {
69
120
expect (
70
121
computeChmodSymbolicRepresentation ( {
71
122
permissions : {
72
123
owner : { read : true , write : true , execute : true } ,
73
124
group : { read : true , write : true , execute : true } ,
74
125
public : { read : true , write : true , execute : true } ,
126
+ flags : { setuid : false , setgid : false , stickybit : false } ,
75
127
} ,
76
128
} ) ,
77
129
) . to . eql ( 'rwxrwxrwx' ) ;
@@ -82,6 +134,7 @@ describe('chmod-calculator', () => {
82
134
owner : { read : false , write : false , execute : false } ,
83
135
group : { read : false , write : false , execute : false } ,
84
136
public : { read : false , write : false , execute : false } ,
137
+ flags : { setuid : false , setgid : false , stickybit : false } ,
85
138
} ,
86
139
} ) ,
87
140
) . to . eql ( '---------' ) ;
@@ -92,6 +145,7 @@ describe('chmod-calculator', () => {
92
145
owner : { read : false , write : true , execute : false } ,
93
146
group : { read : false , write : true , execute : true } ,
94
147
public : { read : true , write : false , execute : true } ,
148
+ flags : { setuid : false , setgid : false , stickybit : false } ,
95
149
} ,
96
150
} ) ,
97
151
) . to . eql ( '-w--wxr-x' ) ;
@@ -102,6 +156,7 @@ describe('chmod-calculator', () => {
102
156
owner : { read : true , write : false , execute : false } ,
103
157
group : { read : false , write : true , execute : false } ,
104
158
public : { read : false , write : false , execute : true } ,
159
+ flags : { setuid : false , setgid : false , stickybit : false } ,
105
160
} ,
106
161
} ) ,
107
162
) . to . eql ( 'r---w---x' ) ;
@@ -112,6 +167,7 @@ describe('chmod-calculator', () => {
112
167
owner : { read : false , write : false , execute : true } ,
113
168
group : { read : false , write : true , execute : false } ,
114
169
public : { read : true , write : false , execute : false } ,
170
+ flags : { setuid : false , setgid : false , stickybit : false } ,
115
171
} ,
116
172
} ) ,
117
173
) . to . eql ( '--x-w-r--' ) ;
@@ -122,9 +178,165 @@ describe('chmod-calculator', () => {
122
178
owner : { read : false , write : true , execute : false } ,
123
179
group : { read : false , write : true , execute : false } ,
124
180
public : { read : false , write : true , execute : false } ,
181
+ flags : { setuid : false , setgid : false , stickybit : false } ,
125
182
} ,
126
183
} ) ,
127
184
) . to . eql ( '-w--w--w-' ) ;
185
+
186
+ expect (
187
+ computeChmodSymbolicRepresentation ( {
188
+ permissions : {
189
+ owner : { read : false , write : false , execute : true } ,
190
+ group : { read : false , write : true , execute : false } ,
191
+ public : { read : true , write : false , execute : false } ,
192
+ flags : { setuid : false , setgid : false , stickybit : true } ,
193
+ } ,
194
+ } ) ,
195
+ ) . to . eql ( '--x-w-r-t' ) ;
196
+
197
+ expect (
198
+ computeChmodSymbolicRepresentation ( {
199
+ permissions : {
200
+ owner : { read : false , write : false , execute : true } ,
201
+ group : { read : false , write : true , execute : false } ,
202
+ public : { read : true , write : false , execute : false } ,
203
+ flags : { setuid : false , setgid : true , stickybit : true } ,
204
+ } ,
205
+ } ) ,
206
+ ) . to . eql ( '--x-wsr-t' ) ;
207
+
208
+ expect (
209
+ computeChmodSymbolicRepresentation ( {
210
+ permissions : {
211
+ owner : { read : false , write : false , execute : true } ,
212
+ group : { read : false , write : true , execute : false } ,
213
+ public : { read : true , write : false , execute : false } ,
214
+ flags : { setuid : true , setgid : true , stickybit : true } ,
215
+ } ,
216
+ } ) ,
217
+ ) . to . eql ( '--s-wsr-t' ) ;
218
+
219
+ expect (
220
+ computeChmodSymbolicRepresentation ( {
221
+ permissions : {
222
+ owner : { read : true , write : false , execute : true } ,
223
+ group : { read : true , write : true , execute : false } ,
224
+ public : { read : true , write : false , execute : false } ,
225
+ flags : { setuid : false , setgid : false , stickybit : false } ,
226
+ } ,
227
+ } ) ,
228
+ ) . to . eql ( 'r-xrw-r--' ) ;
229
+
230
+ expect (
231
+ computeChmodSymbolicRepresentation ( {
232
+ permissions : {
233
+ owner : { read : true , write : true , execute : true } ,
234
+ group : { read : true , write : true , execute : true } ,
235
+ public : { read : true , write : true , execute : true } ,
236
+ flags : { setuid : true , setgid : true , stickybit : true } ,
237
+ } ,
238
+ } ) ,
239
+ ) . to . eql ( 'rwsrwsrwt' ) ;
240
+ } ) ;
241
+ } ) ;
242
+ describe ( 'computePermissionsFromChmodOctalRepresentation' , ( ) => {
243
+ it ( 'throws on invalid octal values' , ( ) => {
244
+ expect ( ( ) => computePermissionsFromChmodOctalRepresentation ( '12' ) ) . to . throw ( ) ;
245
+ expect ( ( ) => computePermissionsFromChmodOctalRepresentation ( '12345' ) ) . to . throw ( ) ;
246
+ expect ( ( ) => computePermissionsFromChmodOctalRepresentation ( '999' ) ) . to . throw ( ) ;
247
+ expect ( ( ) => computePermissionsFromChmodOctalRepresentation ( '9999' ) ) . to . throw ( ) ;
248
+ } ) ;
249
+
250
+ it ( 'get permissions from octal representation' , ( ) => {
251
+ expect (
252
+ computePermissionsFromChmodOctalRepresentation ( '777' ) ,
253
+ ) . to . eql ( {
254
+ owner : { read : true , write : true , execute : true } ,
255
+ group : { read : true , write : true , execute : true } ,
256
+ public : { read : true , write : true , execute : true } ,
257
+ flags : { setuid : false , setgid : false , stickybit : false } ,
258
+ } ) ;
259
+
260
+ expect (
261
+ computePermissionsFromChmodOctalRepresentation ( '000' ) ,
262
+ ) . to . eql ( {
263
+ owner : { read : false , write : false , execute : false } ,
264
+ group : { read : false , write : false , execute : false } ,
265
+ public : { read : false , write : false , execute : false } ,
266
+ flags : { setuid : false , setgid : false , stickybit : false } ,
267
+ } ) ;
268
+
269
+ expect (
270
+ computePermissionsFromChmodOctalRepresentation ( '235' ) ,
271
+ ) . to . eql ( {
272
+ owner : { read : false , write : true , execute : false } ,
273
+ group : { read : false , write : true , execute : true } ,
274
+ public : { read : true , write : false , execute : true } ,
275
+ flags : { setuid : false , setgid : false , stickybit : false } ,
276
+ } ) ;
277
+
278
+ expect (
279
+ computePermissionsFromChmodOctalRepresentation ( '421' ) ,
280
+ ) . to . eql ( {
281
+ owner : { read : true , write : false , execute : false } ,
282
+ group : { read : false , write : true , execute : false } ,
283
+ public : { read : false , write : false , execute : true } ,
284
+ flags : { setuid : false , setgid : false , stickybit : false } ,
285
+ } ) ;
286
+
287
+ expect (
288
+ computePermissionsFromChmodOctalRepresentation ( '124' ) ,
289
+ ) . to . eql ( {
290
+ owner : { read : false , write : false , execute : true } ,
291
+ group : { read : false , write : true , execute : false } ,
292
+ public : { read : true , write : false , execute : false } ,
293
+ flags : { setuid : false , setgid : false , stickybit : false } ,
294
+ } ) ;
295
+
296
+ expect (
297
+ computePermissionsFromChmodOctalRepresentation ( '222' ) ,
298
+ ) . to . eql ( {
299
+ owner : { read : false , write : true , execute : false } ,
300
+ group : { read : false , write : true , execute : false } ,
301
+ public : { read : false , write : true , execute : false } ,
302
+ flags : { setuid : false , setgid : false , stickybit : false } ,
303
+ } ) ;
304
+
305
+ expect (
306
+ computePermissionsFromChmodOctalRepresentation ( '7222' ) ,
307
+ ) . to . eql ( {
308
+ owner : { read : false , write : true , execute : false } ,
309
+ group : { read : false , write : true , execute : false } ,
310
+ public : { read : false , write : true , execute : false } ,
311
+ flags : { setuid : true , setgid : true , stickybit : true } ,
312
+ } ) ;
313
+
314
+ expect (
315
+ computePermissionsFromChmodOctalRepresentation ( '4222' ) ,
316
+ ) . to . eql ( {
317
+ owner : { read : false , write : true , execute : false } ,
318
+ group : { read : false , write : true , execute : false } ,
319
+ public : { read : false , write : true , execute : false } ,
320
+ flags : { setuid : true , setgid : false , stickybit : false } ,
321
+ } ) ;
322
+
323
+ expect (
324
+ computePermissionsFromChmodOctalRepresentation ( '2222' ) ,
325
+ ) . to . eql ( {
326
+ owner : { read : false , write : true , execute : false } ,
327
+ group : { read : false , write : true , execute : false } ,
328
+ public : { read : false , write : true , execute : false } ,
329
+ flags : { setuid : false , setgid : true , stickybit : false } ,
330
+ } ) ;
331
+
332
+ expect (
333
+ computePermissionsFromChmodOctalRepresentation ( '1222' ) ,
334
+ ) . to . eql ( {
335
+ owner : { read : false , write : true , execute : false } ,
336
+ group : { read : false , write : true , execute : false } ,
337
+ public : { read : false , write : true , execute : false } ,
338
+ flags : { setuid : false , setgid : false , stickybit : true } ,
339
+ } ) ;
128
340
} ) ;
129
341
} ) ;
130
342
} ) ;
0 commit comments