@@ -38,10 +38,12 @@ const setup = ({
38
38
onSelection = noOp ,
39
39
displayedItems = ContextMenuItem . All ,
40
40
additionalConfig = { } ,
41
+ roles = undefined ,
41
42
} : {
42
43
onSelection ?: ( ) => void ;
43
44
displayedItems ?: ContextMenuItem | ContextMenuItem [ ] ;
44
45
additionalConfig ?: Record < string , any > ;
46
+ roles ?: Record < string , string [ ] [ ] > ;
45
47
} = { } ) => {
46
48
const { result } = renderHook ( ( ) =>
47
49
useContextMenu (
@@ -58,7 +60,12 @@ const setup = ({
58
60
...mockState ,
59
61
user : {
60
62
...mockState . user ,
61
- roles : { Admin : [ [ 'can_explore' , 'Superset' ] ] } ,
63
+ roles : roles ?? {
64
+ Admin : [
65
+ [ 'can_explore' , 'Superset' ] ,
66
+ [ 'can_samples' , 'Datasource' ] ,
67
+ ] ,
68
+ } ,
62
69
} ,
63
70
} ,
64
71
} ) ;
@@ -75,7 +82,7 @@ test('Context menu renders', () => {
75
82
expect ( screen . getByText ( 'Drill by' ) ) . toBeInTheDocument ( ) ;
76
83
} ) ;
77
84
78
- test ( 'Context menu contains all items only' , ( ) => {
85
+ test ( 'Context menu contains all displayed items only' , ( ) => {
79
86
const result = setup ( {
80
87
displayedItems : [ ContextMenuItem . DrillToDetail , ContextMenuItem . DrillBy ] ,
81
88
} ) ;
@@ -84,3 +91,28 @@ test('Context menu contains all items only', () => {
84
91
expect ( screen . getByText ( 'Drill to detail' ) ) . toBeInTheDocument ( ) ;
85
92
expect ( screen . getByText ( 'Drill by' ) ) . toBeInTheDocument ( ) ;
86
93
} ) ;
94
+
95
+ test ( 'Context menu shows all items tied to can_view_and_drill permission' , ( ) => {
96
+ const result = setup ( {
97
+ roles : {
98
+ Admin : [
99
+ [ 'can_view_and_drill' , 'Dashboard' ] ,
100
+ [ 'can_samples' , 'Datasource' ] ,
101
+ ] ,
102
+ } ,
103
+ } ) ;
104
+ result . current . onContextMenu ( 0 , 0 , { } ) ;
105
+ expect ( screen . getByText ( 'Drill to detail' ) ) . toBeInTheDocument ( ) ;
106
+ expect ( screen . getByText ( 'Drill by' ) ) . toBeInTheDocument ( ) ;
107
+ expect ( screen . getByText ( 'Add cross-filter' ) ) . toBeInTheDocument ( ) ;
108
+ } ) ;
109
+
110
+ test ( 'Context menu does not show "Drill to detail" without proper permissions' , ( ) => {
111
+ const result = setup ( {
112
+ roles : { Admin : [ [ 'can_view_and_drill' , 'Dashboard' ] ] } ,
113
+ } ) ;
114
+ result . current . onContextMenu ( 0 , 0 , { } ) ;
115
+ expect ( screen . queryByText ( 'Drill to detail' ) ) . not . toBeInTheDocument ( ) ;
116
+ expect ( screen . getByText ( 'Drill by' ) ) . toBeInTheDocument ( ) ;
117
+ expect ( screen . getByText ( 'Add cross-filter' ) ) . toBeInTheDocument ( ) ;
118
+ } ) ;
0 commit comments