@@ -377,3 +377,88 @@ test('updateNamedGroupingPolicy', async () => {
377377 groupingPolicy = await e . getGroupingPolicy ( ) ;
378378 testArray2DEquals ( groupingPolicy , [ [ 'alice' , 'update_test' ] ] ) ;
379379} ) ;
380+
381+ test ( 'addPoliciesEx' , async ( ) => {
382+ const a = new FileAdapter ( 'examples/rbac_policy.csv' ) ;
383+ e . setAdapter ( a ) ;
384+ const rules = [
385+ [ 'alice' , 'data1' , 'read' ] , // already exists
386+ [ 'bob' , 'data2' , 'write' ] , // already exists
387+ [ 'jack' , 'data4' , 'read' ] , // new rule
388+ [ 'katy' , 'data4' , 'write' ] , // new rule
389+ ] ;
390+ const added = await e . addPoliciesEx ( rules ) ;
391+ expect ( added ) . toBe ( true ) ;
392+ // Check that new rules were added
393+ expect ( await e . hasPolicy ( 'jack' , 'data4' , 'read' ) ) . toBe ( true ) ;
394+ expect ( await e . hasPolicy ( 'katy' , 'data4' , 'write' ) ) . toBe ( true ) ;
395+ // Check that existing rules are still there
396+ expect ( await e . hasPolicy ( 'alice' , 'data1' , 'read' ) ) . toBe ( true ) ;
397+ expect ( await e . hasPolicy ( 'bob' , 'data2' , 'write' ) ) . toBe ( true ) ;
398+ } ) ;
399+
400+ test ( 'addPoliciesEx - all existing rules' , async ( ) => {
401+ const a = new FileAdapter ( 'examples/rbac_policy.csv' ) ;
402+ e . setAdapter ( a ) ;
403+ const rules = [
404+ [ 'alice' , 'data1' , 'read' ] , // already exists
405+ [ 'bob' , 'data2' , 'write' ] , // already exists
406+ ] ;
407+ const added = await e . addPoliciesEx ( rules ) ;
408+ expect ( added ) . toBe ( false ) ;
409+ } ) ;
410+
411+ test ( 'addNamedPoliciesEx' , async ( ) => {
412+ const a = new FileAdapter ( 'examples/rbac_policy.csv' ) ;
413+ e . setAdapter ( a ) ;
414+ const rules = [
415+ [ 'alice' , 'data1' , 'read' ] , // already exists
416+ [ 'jack' , 'data4' , 'read' ] , // new rule
417+ [ 'katy' , 'data4' , 'write' ] , // new rule
418+ ] ;
419+ const added = await e . addNamedPoliciesEx ( 'p' , rules ) ;
420+ expect ( added ) . toBe ( true ) ;
421+ expect ( await e . hasPolicy ( 'jack' , 'data4' , 'read' ) ) . toBe ( true ) ;
422+ expect ( await e . hasPolicy ( 'katy' , 'data4' , 'write' ) ) . toBe ( true ) ;
423+ expect ( await e . hasPolicy ( 'alice' , 'data1' , 'read' ) ) . toBe ( true ) ;
424+ } ) ;
425+
426+ test ( 'addGroupingPoliciesEx' , async ( ) => {
427+ const a = new FileAdapter ( 'examples/rbac_policy.csv' ) ;
428+ e . setAdapter ( a ) ;
429+ const groupingRules = [
430+ [ 'alice' , 'data2_admin' ] , // already exists
431+ [ 'ham' , 'data4_admin' ] , // new rule
432+ [ 'jack' , 'data5_admin' ] , // new rule
433+ ] ;
434+ const added = await e . addGroupingPoliciesEx ( groupingRules ) ;
435+ expect ( added ) . toBe ( true ) ;
436+ expect ( await e . hasGroupingPolicy ( 'ham' , 'data4_admin' ) ) . toBe ( true ) ;
437+ expect ( await e . hasGroupingPolicy ( 'jack' , 'data5_admin' ) ) . toBe ( true ) ;
438+ expect ( await e . hasGroupingPolicy ( 'alice' , 'data2_admin' ) ) . toBe ( true ) ;
439+ } ) ;
440+
441+ test ( 'addGroupingPoliciesEx - all existing rules' , async ( ) => {
442+ const a = new FileAdapter ( 'examples/rbac_policy.csv' ) ;
443+ e . setAdapter ( a ) ;
444+ const groupingRules = [
445+ [ 'alice' , 'data2_admin' ] , // already exists
446+ ] ;
447+ const added = await e . addGroupingPoliciesEx ( groupingRules ) ;
448+ expect ( added ) . toBe ( false ) ;
449+ } ) ;
450+
451+ test ( 'addNamedGroupingPoliciesEx' , async ( ) => {
452+ const a = new FileAdapter ( 'examples/rbac_policy.csv' ) ;
453+ e . setAdapter ( a ) ;
454+ const groupingRules = [
455+ [ 'alice' , 'data2_admin' ] , // already exists
456+ [ 'ham' , 'data4_admin' ] , // new rule
457+ [ 'jack' , 'data5_admin' ] , // new rule
458+ ] ;
459+ const added = await e . addNamedGroupingPoliciesEx ( 'g' , groupingRules ) ;
460+ expect ( added ) . toBe ( true ) ;
461+ expect ( await e . hasGroupingPolicy ( 'ham' , 'data4_admin' ) ) . toBe ( true ) ;
462+ expect ( await e . hasGroupingPolicy ( 'jack' , 'data5_admin' ) ) . toBe ( true ) ;
463+ expect ( await e . hasGroupingPolicy ( 'alice' , 'data2_admin' ) ) . toBe ( true ) ;
464+ } ) ;
0 commit comments