@@ -6,21 +6,23 @@ import { describe, expect, test } from 'vitest'
66import {
77 addPermissions ,
88 ATOMIC_PERMISSIONS ,
9- BUNDLED_PERMISSIONS ,
109 canTogglePermissions ,
10+ getBundledPermissions ,
1111 hasPermissions ,
1212 permissionsSetIsValid ,
1313 subtractPermissions ,
1414 togglePermissions ,
1515} from '../lib/SharePermissionsToolBox.js'
1616
17+ const BUNDLED_PERMISSIONS = getBundledPermissions ( )
18+
1719describe ( 'SharePermissionsToolBox' , ( ) => {
1820 test ( 'Adding permissions' , ( ) => {
1921 expect ( addPermissions ( ATOMIC_PERMISSIONS . NONE , ATOMIC_PERMISSIONS . NONE ) ) . toBe ( ATOMIC_PERMISSIONS . NONE )
2022 expect ( addPermissions ( ATOMIC_PERMISSIONS . NONE , ATOMIC_PERMISSIONS . READ ) ) . toBe ( ATOMIC_PERMISSIONS . READ )
2123 expect ( addPermissions ( ATOMIC_PERMISSIONS . READ , ATOMIC_PERMISSIONS . READ ) ) . toBe ( ATOMIC_PERMISSIONS . READ )
2224 expect ( addPermissions ( ATOMIC_PERMISSIONS . READ , ATOMIC_PERMISSIONS . UPDATE ) ) . toBe ( ATOMIC_PERMISSIONS . READ | ATOMIC_PERMISSIONS . UPDATE )
23- expect ( addPermissions ( ATOMIC_PERMISSIONS . READ | ATOMIC_PERMISSIONS . UPDATE , ATOMIC_PERMISSIONS . CREATE | ATOMIC_PERMISSIONS . DELETE ) ) . toBe ( BUNDLED_PERMISSIONS . ALL )
25+ expect ( addPermissions ( ATOMIC_PERMISSIONS . READ | ATOMIC_PERMISSIONS . UPDATE , ATOMIC_PERMISSIONS . CREATE | ATOMIC_PERMISSIONS . DELETE | ATOMIC_PERMISSIONS . SHARE ) ) . toBe ( BUNDLED_PERMISSIONS . ALL )
2426 expect ( addPermissions ( BUNDLED_PERMISSIONS . ALL , ATOMIC_PERMISSIONS . READ ) ) . toBe ( BUNDLED_PERMISSIONS . ALL )
2527 expect ( addPermissions ( BUNDLED_PERMISSIONS . ALL , ATOMIC_PERMISSIONS . NONE ) ) . toBe ( BUNDLED_PERMISSIONS . ALL )
2628 } )
@@ -32,7 +34,7 @@ describe('SharePermissionsToolBox', () => {
3234 expect ( subtractPermissions ( ATOMIC_PERMISSIONS . READ | ATOMIC_PERMISSIONS . UPDATE , ATOMIC_PERMISSIONS . UPDATE ) ) . toBe ( ATOMIC_PERMISSIONS . READ )
3335 expect ( subtractPermissions ( ATOMIC_PERMISSIONS . READ | ATOMIC_PERMISSIONS . UPDATE , ATOMIC_PERMISSIONS . CREATE | ATOMIC_PERMISSIONS . DELETE ) ) . toBe ( ATOMIC_PERMISSIONS . READ | ATOMIC_PERMISSIONS . UPDATE )
3436 expect ( subtractPermissions ( ATOMIC_PERMISSIONS . READ | ATOMIC_PERMISSIONS . UPDATE , ATOMIC_PERMISSIONS . UPDATE | ATOMIC_PERMISSIONS . DELETE ) ) . toBe ( ATOMIC_PERMISSIONS . READ )
35- expect ( subtractPermissions ( BUNDLED_PERMISSIONS . ALL , ATOMIC_PERMISSIONS . READ ) ) . toBe ( ATOMIC_PERMISSIONS . UPDATE | ATOMIC_PERMISSIONS . CREATE | ATOMIC_PERMISSIONS . DELETE )
37+ expect ( subtractPermissions ( BUNDLED_PERMISSIONS . ALL , ATOMIC_PERMISSIONS . READ ) ) . toBe ( ATOMIC_PERMISSIONS . UPDATE | ATOMIC_PERMISSIONS . CREATE | ATOMIC_PERMISSIONS . DELETE | ATOMIC_PERMISSIONS . SHARE )
3638 } )
3739
3840 test ( 'Has permissions' , ( ) => {
@@ -45,8 +47,8 @@ describe('SharePermissionsToolBox', () => {
4547 } )
4648
4749 test ( 'Toggle permissions' , ( ) => {
48- expect ( togglePermissions ( BUNDLED_PERMISSIONS . ALL , BUNDLED_PERMISSIONS . UPLOAD_AND_UPDATE ) ) . toBe ( ATOMIC_PERMISSIONS . NONE )
49- expect ( togglePermissions ( BUNDLED_PERMISSIONS . ALL , BUNDLED_PERMISSIONS . FILE_DROP ) ) . toBe ( ATOMIC_PERMISSIONS . READ | ATOMIC_PERMISSIONS . UPDATE | ATOMIC_PERMISSIONS . DELETE )
50+ expect ( togglePermissions ( BUNDLED_PERMISSIONS . ALL , BUNDLED_PERMISSIONS . UPLOAD_AND_UPDATE ) ) . toBe ( ATOMIC_PERMISSIONS . SHARE )
51+ expect ( togglePermissions ( BUNDLED_PERMISSIONS . ALL , BUNDLED_PERMISSIONS . FILE_DROP ) ) . toBe ( ATOMIC_PERMISSIONS . READ | ATOMIC_PERMISSIONS . UPDATE | ATOMIC_PERMISSIONS . DELETE | ATOMIC_PERMISSIONS . SHARE )
5052 expect ( togglePermissions ( BUNDLED_PERMISSIONS . ALL , ATOMIC_PERMISSIONS . NONE ) ) . toBe ( BUNDLED_PERMISSIONS . ALL )
5153 expect ( togglePermissions ( ATOMIC_PERMISSIONS . NONE , BUNDLED_PERMISSIONS . ALL ) ) . toBe ( BUNDLED_PERMISSIONS . ALL )
5254 expect ( togglePermissions ( ATOMIC_PERMISSIONS . READ , BUNDLED_PERMISSIONS . ALL ) ) . toBe ( BUNDLED_PERMISSIONS . ALL )
@@ -76,4 +78,70 @@ describe('SharePermissionsToolBox', () => {
7678 expect ( canTogglePermissions ( ATOMIC_PERMISSIONS . READ | ATOMIC_PERMISSIONS . CREATE | ATOMIC_PERMISSIONS . UPDATE , ATOMIC_PERMISSIONS . CREATE ) ) . toBe ( true )
7779 expect ( canTogglePermissions ( ATOMIC_PERMISSIONS . READ | ATOMIC_PERMISSIONS . CREATE | ATOMIC_PERMISSIONS . DELETE , ATOMIC_PERMISSIONS . CREATE ) ) . toBe ( true )
7880 } )
81+
82+ test ( 'Get bundled permissions with SHARE included (default)' , ( ) => {
83+ const permissions = getBundledPermissions ( )
84+ expect ( permissions . READ_ONLY ) . toBe ( BUNDLED_PERMISSIONS . READ_ONLY )
85+ expect ( permissions . FILE_DROP ) . toBe ( BUNDLED_PERMISSIONS . FILE_DROP )
86+ expect ( permissions . UPLOAD_AND_UPDATE ) . toBe ( BUNDLED_PERMISSIONS . UPLOAD_AND_UPDATE )
87+ expect ( permissions . ALL ) . toBe ( BUNDLED_PERMISSIONS . ALL )
88+ expect ( permissions . ALL_FILE ) . toBe ( BUNDLED_PERMISSIONS . ALL_FILE )
89+ expect ( permissions . ALL ) . toBe ( 31 )
90+ expect ( permissions . ALL_FILE ) . toBe ( 19 )
91+ expect ( hasPermissions ( permissions . ALL , ATOMIC_PERMISSIONS . SHARE ) ) . toBe ( true )
92+ expect ( hasPermissions ( permissions . ALL_FILE , ATOMIC_PERMISSIONS . SHARE ) ) . toBe ( true )
93+ } )
94+
95+ test ( 'Get bundled permissions without SHARE (excludeShare=true)' , ( ) => {
96+ const permissions = getBundledPermissions ( true )
97+ expect ( permissions . READ_ONLY ) . toBe ( BUNDLED_PERMISSIONS . READ_ONLY )
98+ expect ( permissions . FILE_DROP ) . toBe ( BUNDLED_PERMISSIONS . FILE_DROP )
99+ expect ( permissions . UPLOAD_AND_UPDATE ) . toBe ( BUNDLED_PERMISSIONS . UPLOAD_AND_UPDATE )
100+ expect ( permissions . ALL ) . toBe ( BUNDLED_PERMISSIONS . ALL & ~ ATOMIC_PERMISSIONS . SHARE )
101+ expect ( permissions . ALL_FILE ) . toBe ( BUNDLED_PERMISSIONS . ALL_FILE & ~ ATOMIC_PERMISSIONS . SHARE )
102+ expect ( permissions . ALL ) . toBe ( 15 )
103+ expect ( permissions . ALL_FILE ) . toBe ( 3 )
104+ expect ( hasPermissions ( permissions . ALL , ATOMIC_PERMISSIONS . SHARE ) ) . toBe ( false )
105+ expect ( hasPermissions ( permissions . ALL_FILE , ATOMIC_PERMISSIONS . SHARE ) ) . toBe ( false )
106+ } )
107+
108+ test ( 'Operations with bundled permissions including SHARE' , ( ) => {
109+ const permissionsWithShare = getBundledPermissions ( false )
110+ const permissionsWithoutShare = getBundledPermissions ( true )
111+
112+ // Adding permissions to ALL with SHARE should preserve SHARE
113+ expect ( addPermissions ( permissionsWithShare . ALL , ATOMIC_PERMISSIONS . READ ) ) . toBe ( permissionsWithShare . ALL )
114+
115+ // Subtracting READ from ALL with SHARE should leave UPDATE | CREATE | DELETE | SHARE
116+ expect ( subtractPermissions ( permissionsWithShare . ALL , ATOMIC_PERMISSIONS . READ ) )
117+ . toBe ( ATOMIC_PERMISSIONS . UPDATE | ATOMIC_PERMISSIONS . CREATE | ATOMIC_PERMISSIONS . DELETE | ATOMIC_PERMISSIONS . SHARE )
118+
119+ // Toggle UPLOAD_AND_UPDATE from ALL with SHARE should leave only SHARE
120+ expect ( togglePermissions ( permissionsWithShare . ALL , BUNDLED_PERMISSIONS . UPLOAD_AND_UPDATE ) )
121+ . toBe ( ATOMIC_PERMISSIONS . SHARE )
122+
123+ // Toggle FILE_DROP from ALL with SHARE
124+ expect ( togglePermissions ( permissionsWithShare . ALL , BUNDLED_PERMISSIONS . FILE_DROP ) )
125+ . toBe ( ATOMIC_PERMISSIONS . READ | ATOMIC_PERMISSIONS . UPDATE | ATOMIC_PERMISSIONS . DELETE | ATOMIC_PERMISSIONS . SHARE )
126+
127+ // BUNDLED_PERMISSIONS.ALL already includes SHARE
128+ expect ( BUNDLED_PERMISSIONS . ALL ) . toBe ( permissionsWithShare . ALL )
129+
130+ // Subtracting SHARE from ALL with SHARE should equal ALL without SHARE
131+ expect ( subtractPermissions ( permissionsWithShare . ALL , ATOMIC_PERMISSIONS . SHARE ) ) . toBe ( permissionsWithoutShare . ALL )
132+ } )
133+
134+ test ( 'Operations with bundled permissions for files including SHARE' , ( ) => {
135+ const permissionsWithShare = getBundledPermissions ( false )
136+ const permissionsWithoutShare = getBundledPermissions ( true )
137+
138+ // ALL_FILE with SHARE should be READ | UPDATE | SHARE
139+ expect ( permissionsWithShare . ALL_FILE ) . toBe ( ATOMIC_PERMISSIONS . READ | ATOMIC_PERMISSIONS . UPDATE | ATOMIC_PERMISSIONS . SHARE )
140+
141+ // Subtracting SHARE from ALL_FILE with SHARE should equal ALL_FILE without SHARE
142+ expect ( subtractPermissions ( permissionsWithShare . ALL_FILE , ATOMIC_PERMISSIONS . SHARE ) ) . toBe ( permissionsWithoutShare . ALL_FILE )
143+
144+ // BUNDLED_PERMISSIONS.ALL_FILE already includes SHARE
145+ expect ( BUNDLED_PERMISSIONS . ALL_FILE ) . toBe ( permissionsWithShare . ALL_FILE )
146+ } )
79147} )
0 commit comments