2018-02-21 01:11:50 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								package  api  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								import  (  
						 
					
						
							
								
									
										
										
										
											2020-11-24 19:10:32 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									"encoding/json" 
							 
						 
					
						
							
								
									
										
										
										
											2020-11-13 16:52:38 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									"fmt" 
							 
						 
					
						
							
								
									
										
										
										
											2018-02-21 01:11:50 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
									"testing" 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-09-23 23:43:32 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									"github.com/stretchr/testify/assert" 
							 
						 
					
						
							
								
									
										
										
										
											2022-03-11 01:19:50 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									"github.com/stretchr/testify/mock" 
							 
						 
					
						
							
								
									
										
										
										
											2022-05-10 21:48:47 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									"github.com/stretchr/testify/require" 
							 
						 
					
						
							
								
									
										
										
										
											2022-03-11 01:19:50 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-02-21 01:11:50 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
									"github.com/grafana/grafana/pkg/api/dtos" 
							 
						 
					
						
							
								
									
										
										
										
											2021-01-15 21:43:20 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									"github.com/grafana/grafana/pkg/api/response" 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									"github.com/grafana/grafana/pkg/api/routing" 
							 
						 
					
						
							
								
									
										
										
										
											2020-03-04 19:57:20 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									"github.com/grafana/grafana/pkg/models" 
							 
						 
					
						
							
								
									
										
										
										
											2022-05-10 21:48:47 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									accesscontrolmock  "github.com/grafana/grafana/pkg/services/accesscontrol/mock" 
							 
						 
					
						
							
								
									
										
										
										
											2018-02-21 01:11:50 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
									"github.com/grafana/grafana/pkg/services/dashboards" 
							 
						 
					
						
							
								
									
										
										
										
											2022-05-18 02:52:22 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									service  "github.com/grafana/grafana/pkg/services/dashboards/service" 
							 
						 
					
						
							
								
									
										
										
										
											2022-03-03 22:05:47 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									"github.com/grafana/grafana/pkg/services/featuremgmt" 
							 
						 
					
						
							
								
									
										
										
										
											2018-02-21 01:11:50 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
									"github.com/grafana/grafana/pkg/services/guardian" 
							 
						 
					
						
							
								
									
										
										
										
											2022-08-10 17:56:48 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									"github.com/grafana/grafana/pkg/services/org" 
							 
						 
					
						
							
								
									
										
										
										
											2022-02-03 16:20:20 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									"github.com/grafana/grafana/pkg/services/sqlstore/mockstore" 
							 
						 
					
						
							
								
									
										
										
										
											2020-11-24 19:10:32 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									"github.com/grafana/grafana/pkg/setting" 
							 
						 
					
						
							
								
									
										
										
										
											2018-02-21 01:11:50 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								)  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-11-13 16:52:38 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								func  TestFolderPermissionAPIEndpoint ( t  * testing . T )  {  
						 
					
						
							
								
									
										
										
										
											2020-11-24 19:10:32 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									settings  :=  setting . NewCfg ( ) 
							 
						 
					
						
							
								
									
										
										
										
											2022-03-03 22:05:47 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-02-16 21:15:44 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									folderService  :=  & dashboards . FakeFolderService { } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									defer  folderService . AssertExpectations ( t ) 
							 
						 
					
						
							
								
									
										
										
										
											2020-11-24 19:10:32 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-03-11 01:19:50 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									dashboardStore  :=  & dashboards . FakeDashboardStore { } 
							 
						 
					
						
							
								
									
										
										
										
											2022-02-16 21:15:44 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									defer  dashboardStore . AssertExpectations ( t ) 
							 
						 
					
						
							
								
									
										
										
										
											2020-11-13 16:52:38 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-03-10 19:58:18 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									features  :=  featuremgmt . WithFeatures ( ) 
							 
						 
					
						
							
								
									
										
										
										
											2022-06-07 17:02:20 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									ac  :=  accesscontrolmock . New ( ) 
							 
						 
					
						
							
								
									
										
										
										
											2022-05-10 21:48:47 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									folderPermissions  :=  accesscontrolmock . NewMockedPermissionsService ( ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									dashboardPermissions  :=  accesscontrolmock . NewMockedPermissionsService ( ) 
							 
						 
					
						
							
								
									
										
										
										
											2022-03-10 19:58:18 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									hs  :=  & HTTPServer { 
							 
						 
					
						
							
								
									
										
										
										
											2022-05-10 21:48:47 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										Cfg :                          settings , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										Features :                     features , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										folderService :                folderService , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										folderPermissionsService :     folderPermissions , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										dashboardPermissionsService :  dashboardPermissions , 
							 
						 
					
						
							
								
									
										
										
										
											2022-07-07 02:42:39 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										DashboardService :  service . ProvideDashboardService ( 
							 
						 
					
						
							
								
									
										
										
										
											2022-06-07 17:02:20 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											settings ,  dashboardStore ,  nil ,  features ,  folderPermissions ,  dashboardPermissions ,  ac , 
							 
						 
					
						
							
								
									
										
										
										
											2022-03-10 19:58:18 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										) , 
							 
						 
					
						
							
								
									
										
										
										
											2022-04-25 16:42:09 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										AccessControl :  accesscontrolmock . New ( ) . WithDisabled ( ) , 
							 
						 
					
						
							
								
									
										
										
										
											2022-03-10 19:58:18 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
									
										
										
										
											2022-02-16 21:15:44 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									t . Run ( "Given folder not exists" ,  func ( t  * testing . T )  { 
							 
						 
					
						
							
								
									
										
										
										
											2022-06-30 21:31:54 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										folderService . On ( "GetFolderByUID" ,  mock . Anything ,  mock . Anything ,  mock . Anything ,  mock . Anything ) . Return ( nil ,  dashboards . ErrFolderNotFound ) . Twice ( ) 
							 
						 
					
						
							
								
									
										
										
										
											2022-02-03 16:20:20 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										mockSQLStore  :=  mockstore . NewSQLStoreMock ( ) 
							 
						 
					
						
							
								
									
										
										
										
											2022-08-10 17:56:48 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										loggedInUserScenarioWithRole ( t ,  "When calling GET on" ,  "GET" ,  "/api/folders/uid/permissions" ,  "/api/folders/:uid/permissions" ,  org . RoleEditor ,  func ( sc  * scenarioContext )  { 
							 
						 
					
						
							
								
									
										
										
										
											2020-11-24 19:10:32 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											callGetFolderPermissions ( sc ,  hs ) 
							 
						 
					
						
							
								
									
										
										
										
											2020-11-13 16:52:38 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											assert . Equal ( t ,  404 ,  sc . resp . Code ) 
							 
						 
					
						
							
								
									
										
										
										
											2022-02-03 16:20:20 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										} ,  mockSQLStore ) 
							 
						 
					
						
							
								
									
										
										
										
											2020-11-13 16:52:38 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-07-18 21:14:58 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										cmd  :=  dtos . UpdateDashboardACLCommand { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											Items :  [ ] dtos . DashboardACLUpdateItem { 
							 
						 
					
						
							
								
									
										
										
										
											2020-11-18 00:09:14 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
												{ UserID :  1000 ,  Permission :  models . PERMISSION_ADMIN } , 
							 
						 
					
						
							
								
									
										
										
										
											2020-11-13 16:52:38 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											} , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-11-24 19:10:32 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										updateFolderPermissionScenario ( t ,  updatePermissionContext { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											desc :          "When calling POST on" , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											url :           "/api/folders/uid/permissions" , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											routePattern :  "/api/folders/:uid/permissions" , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											cmd :           cmd , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											fn :  func ( sc  * scenarioContext )  { 
							 
						 
					
						
							
								
									
										
										
										
											2021-03-17 23:06:10 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
												callUpdateFolderPermissions ( t ,  sc ) 
							 
						 
					
						
							
								
									
										
										
										
											2020-11-24 19:10:32 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
												assert . Equal ( t ,  404 ,  sc . resp . Code ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											} , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										} ,  hs ) 
							 
						 
					
						
							
								
									
										
										
										
											2020-11-13 16:52:38 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									} ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									t . Run ( "Given user has no admin permissions" ,  func ( t  * testing . T )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										origNewGuardian  :=  guardian . New 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										t . Cleanup ( func ( )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											guardian . New  =  origNewGuardian 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										} ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										guardian . MockDashboardGuardian ( & guardian . FakeDashboardGuardian { CanAdminValue :  false } ) 
							 
						 
					
						
							
								
									
										
										
										
											2022-06-30 21:31:54 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										folderService . On ( "GetFolderByUID" ,  mock . Anything ,  mock . Anything ,  mock . Anything ,  mock . Anything ) . Return ( nil ,  dashboards . ErrFolderAccessDenied ) . Twice ( ) 
							 
						 
					
						
							
								
									
										
										
										
											2022-02-03 16:20:20 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										mockSQLStore  :=  mockstore . NewSQLStoreMock ( ) 
							 
						 
					
						
							
								
									
										
										
										
											2022-02-16 21:15:44 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-08-10 17:56:48 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										loggedInUserScenarioWithRole ( t ,  "When calling GET on" ,  "GET" ,  "/api/folders/uid/permissions" ,  "/api/folders/:uid/permissions" ,  org . RoleEditor ,  func ( sc  * scenarioContext )  { 
							 
						 
					
						
							
								
									
										
										
										
											2020-11-24 19:10:32 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											callGetFolderPermissions ( sc ,  hs ) 
							 
						 
					
						
							
								
									
										
										
										
											2020-11-13 16:52:38 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											assert . Equal ( t ,  403 ,  sc . resp . Code ) 
							 
						 
					
						
							
								
									
										
										
										
											2022-02-03 16:20:20 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										} ,  mockSQLStore ) 
							 
						 
					
						
							
								
									
										
										
										
											2020-11-13 16:52:38 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-07-18 21:14:58 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										cmd  :=  dtos . UpdateDashboardACLCommand { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											Items :  [ ] dtos . DashboardACLUpdateItem { 
							 
						 
					
						
							
								
									
										
										
										
											2020-11-18 00:09:14 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
												{ UserID :  1000 ,  Permission :  models . PERMISSION_ADMIN } , 
							 
						 
					
						
							
								
									
										
										
										
											2020-11-13 16:52:38 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											} , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-11-24 19:10:32 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										updateFolderPermissionScenario ( t ,  updatePermissionContext { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											desc :          "When calling POST on" , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											url :           "/api/folders/uid/permissions" , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											routePattern :  "/api/folders/:uid/permissions" , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											cmd :           cmd , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											fn :  func ( sc  * scenarioContext )  { 
							 
						 
					
						
							
								
									
										
										
										
											2021-03-17 23:06:10 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
												callUpdateFolderPermissions ( t ,  sc ) 
							 
						 
					
						
							
								
									
										
										
										
											2020-11-24 19:10:32 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
												assert . Equal ( t ,  403 ,  sc . resp . Code ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											} , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										} ,  hs ) 
							 
						 
					
						
							
								
									
										
										
										
											2020-11-13 16:52:38 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									} ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									t . Run ( "Given user has admin permissions and permissions to update" ,  func ( t  * testing . T )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										origNewGuardian  :=  guardian . New 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										t . Cleanup ( func ( )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											guardian . New  =  origNewGuardian 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										} ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										guardian . MockDashboardGuardian ( & guardian . FakeDashboardGuardian { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											CanAdminValue :                     true , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											CheckPermissionBeforeUpdateValue :  true , 
							 
						 
					
						
							
								
									
										
										
										
											2022-07-18 21:14:58 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											GetACLValue :  [ ] * models . DashboardACLInfoDTO { 
							 
						 
					
						
							
								
									
										
										
										
											2020-11-13 16:52:38 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
												{ OrgId :  1 ,  DashboardId :  1 ,  UserId :  2 ,  Permission :  models . PERMISSION_VIEW } , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												{ OrgId :  1 ,  DashboardId :  1 ,  UserId :  3 ,  Permission :  models . PERMISSION_EDIT } , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												{ OrgId :  1 ,  DashboardId :  1 ,  UserId :  4 ,  Permission :  models . PERMISSION_ADMIN } , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												{ OrgId :  1 ,  DashboardId :  1 ,  TeamId :  1 ,  Permission :  models . PERMISSION_VIEW } , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												{ OrgId :  1 ,  DashboardId :  1 ,  TeamId :  2 ,  Permission :  models . PERMISSION_ADMIN } , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											} , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										} ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-02-16 21:15:44 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										folderResponse  :=  & models . Folder { Id :  1 ,  Uid :  "uid" ,  Title :  "Folder" } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										folderService . On ( "GetFolderByUID" ,  mock . Anything ,  mock . Anything ,  mock . Anything ,  mock . Anything ) . Return ( folderResponse ,  nil ) . Twice ( ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										dashboardStore . On ( "UpdateDashboardACL" ,  mock . Anything ,  mock . Anything ,  mock . Anything ) . Return ( nil ) . Once ( ) 
							 
						 
					
						
							
								
									
										
										
										
											2022-02-03 16:20:20 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										mockSQLStore  :=  mockstore . NewSQLStoreMock ( ) 
							 
						 
					
						
							
								
									
										
										
										
											2022-02-16 21:15:44 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-08-10 17:56:48 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										loggedInUserScenarioWithRole ( t ,  "When calling GET on" ,  "GET" ,  "/api/folders/uid/permissions" ,  "/api/folders/:uid/permissions" ,  org . RoleAdmin ,  func ( sc  * scenarioContext )  { 
							 
						 
					
						
							
								
									
										
										
										
											2020-11-24 19:10:32 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											callGetFolderPermissions ( sc ,  hs ) 
							 
						 
					
						
							
								
									
										
										
										
											2020-11-13 16:52:38 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											assert . Equal ( t ,  200 ,  sc . resp . Code ) 
							 
						 
					
						
							
								
									
										
										
										
											2020-11-24 19:10:32 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-07-18 21:14:58 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											var  resp  [ ] * models . DashboardACLInfoDTO 
							 
						 
					
						
							
								
									
										
										
										
											2020-11-24 19:10:32 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											err  :=  json . Unmarshal ( sc . resp . Body . Bytes ( ) ,  & resp ) 
							 
						 
					
						
							
								
									
										
										
										
											2020-11-13 16:52:38 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											require . NoError ( t ,  err ) 
							 
						 
					
						
							
								
									
										
										
										
											2020-11-24 19:10:32 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											assert . Len ( t ,  resp ,  5 ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											assert . Equal ( t ,  int64 ( 2 ) ,  resp [ 0 ] . UserId ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											assert . Equal ( t ,  models . PERMISSION_VIEW ,  resp [ 0 ] . Permission ) 
							 
						 
					
						
							
								
									
										
										
										
											2022-02-03 16:20:20 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										} ,  mockSQLStore ) 
							 
						 
					
						
							
								
									
										
										
										
											2020-11-13 16:52:38 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-07-18 21:14:58 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										cmd  :=  dtos . UpdateDashboardACLCommand { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											Items :  [ ] dtos . DashboardACLUpdateItem { 
							 
						 
					
						
							
								
									
										
										
										
											2020-11-18 00:09:14 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
												{ UserID :  1000 ,  Permission :  models . PERMISSION_ADMIN } , 
							 
						 
					
						
							
								
									
										
										
										
											2020-11-13 16:52:38 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											} , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-11-24 19:10:32 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										updateFolderPermissionScenario ( t ,  updatePermissionContext { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											desc :          "When calling POST on" , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											url :           "/api/folders/uid/permissions" , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											routePattern :  "/api/folders/:uid/permissions" , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											cmd :           cmd , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											fn :  func ( sc  * scenarioContext )  { 
							 
						 
					
						
							
								
									
										
										
										
											2021-03-17 23:06:10 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
												callUpdateFolderPermissions ( t ,  sc ) 
							 
						 
					
						
							
								
									
										
										
										
											2020-11-24 19:10:32 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
												assert . Equal ( t ,  200 ,  sc . resp . Code ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												var  resp  struct  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
													ID     int64 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
													Title  string 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												err  :=  json . Unmarshal ( sc . resp . Body . Bytes ( ) ,  & resp ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												require . NoError ( t ,  err ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												assert . Equal ( t ,  int64 ( 1 ) ,  resp . ID ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												assert . Equal ( t ,  "Folder" ,  resp . Title ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											} , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										} ,  hs ) 
							 
						 
					
						
							
								
									
										
										
										
											2020-11-13 16:52:38 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									} ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									t . Run ( "When trying to update permissions with duplicate permissions" ,  func ( t  * testing . T )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										origNewGuardian  :=  guardian . New 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										t . Cleanup ( func ( )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											guardian . New  =  origNewGuardian 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										} ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										guardian . MockDashboardGuardian ( & guardian . FakeDashboardGuardian { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											CanAdminValue :                     true , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											CheckPermissionBeforeUpdateValue :  false , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											CheckPermissionBeforeUpdateError :  guardian . ErrGuardianPermissionExists , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										} ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-02-16 21:15:44 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										folderResponse  :=  & models . Folder { Id :  1 ,  Uid :  "uid" ,  Title :  "Folder" } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										folderService . On ( "GetFolderByUID" ,  mock . Anything ,  mock . Anything ,  mock . Anything ,  mock . Anything ) . Return ( folderResponse ,  nil ) . Once ( ) 
							 
						 
					
						
							
								
									
										
										
										
											2020-11-13 16:52:38 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-07-18 21:14:58 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										cmd  :=  dtos . UpdateDashboardACLCommand { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											Items :  [ ] dtos . DashboardACLUpdateItem { 
							 
						 
					
						
							
								
									
										
										
										
											2020-11-18 00:09:14 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
												{ UserID :  1000 ,  Permission :  models . PERMISSION_ADMIN } , 
							 
						 
					
						
							
								
									
										
										
										
											2020-11-13 16:52:38 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											} , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-11-24 19:10:32 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										updateFolderPermissionScenario ( t ,  updatePermissionContext { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											desc :          "When calling POST on" , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											url :           "/api/folders/uid/permissions" , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											routePattern :  "/api/folders/:uid/permissions" , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											cmd :           cmd , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											fn :  func ( sc  * scenarioContext )  { 
							 
						 
					
						
							
								
									
										
										
										
											2021-03-17 23:06:10 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
												callUpdateFolderPermissions ( t ,  sc ) 
							 
						 
					
						
							
								
									
										
										
										
											2020-11-24 19:10:32 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
												assert . Equal ( t ,  400 ,  sc . resp . Code ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											} , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										} ,  hs ) 
							 
						 
					
						
							
								
									
										
										
										
											2020-11-13 16:52:38 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									} ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-11-18 22:36:41 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									t . Run ( "When trying to update team or user permissions with a role" ,  func ( t  * testing . T )  { 
							 
						 
					
						
							
								
									
										
										
										
											2022-08-10 17:56:48 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										role  :=  org . RoleAdmin 
							 
						 
					
						
							
								
									
										
										
										
											2022-07-18 21:14:58 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										cmds  :=  [ ] dtos . UpdateDashboardACLCommand { 
							 
						 
					
						
							
								
									
										
										
										
											2020-11-18 22:36:41 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											{ 
							 
						 
					
						
							
								
									
										
										
										
											2022-07-18 21:14:58 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
												Items :  [ ] dtos . DashboardACLUpdateItem { 
							 
						 
					
						
							
								
									
										
										
										
											2020-11-18 23:16:58 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
													{ UserID :  1000 ,  Permission :  models . PERMISSION_ADMIN ,  Role :  & role } , 
							 
						 
					
						
							
								
									
										
										
										
											2020-11-18 22:36:41 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
												} , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											} , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											{ 
							 
						 
					
						
							
								
									
										
										
										
											2022-07-18 21:14:58 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
												Items :  [ ] dtos . DashboardACLUpdateItem { 
							 
						 
					
						
							
								
									
										
										
										
											2020-11-18 23:16:58 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
													{ TeamID :  1000 ,  Permission :  models . PERMISSION_ADMIN ,  Role :  & role } , 
							 
						 
					
						
							
								
									
										
										
										
											2020-11-18 22:36:41 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
												} , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											} , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										for  _ ,  cmd  :=  range  cmds  { 
							 
						 
					
						
							
								
									
										
										
										
											2020-11-24 19:10:32 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											updateFolderPermissionScenario ( t ,  updatePermissionContext { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												desc :          "When calling POST on" , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												url :           "/api/folders/uid/permissions" , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												routePattern :  "/api/folders/:uid/permissions" , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												cmd :           cmd , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												fn :  func ( sc  * scenarioContext )  { 
							 
						 
					
						
							
								
									
										
										
										
											2021-03-17 23:06:10 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
													callUpdateFolderPermissions ( t ,  sc ) 
							 
						 
					
						
							
								
									
										
										
										
											2020-11-18 22:36:41 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
													assert . Equal ( t ,  400 ,  sc . resp . Code ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
													respJSON ,  err  :=  jsonMap ( sc . resp . Body . Bytes ( ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
													require . NoError ( t ,  err ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
													assert . Equal ( t ,  models . ErrPermissionsWithRoleNotAllowed . Error ( ) ,  respJSON [ "error" ] ) 
							 
						 
					
						
							
								
									
										
										
										
											2020-11-24 19:10:32 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
												} , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											} ,  hs ) 
							 
						 
					
						
							
								
									
										
										
										
											2020-11-18 22:36:41 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									} ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-11-13 16:52:38 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									t . Run ( "When trying to override inherited permissions with lower precedence" ,  func ( t  * testing . T )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										origNewGuardian  :=  guardian . New 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										t . Cleanup ( func ( )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											guardian . New  =  origNewGuardian 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										} ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										guardian . MockDashboardGuardian ( & guardian . FakeDashboardGuardian { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											CanAdminValue :                     true , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											CheckPermissionBeforeUpdateValue :  false , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											CheckPermissionBeforeUpdateError :  guardian . ErrGuardianOverride } , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-02-16 21:15:44 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										folderResponse  :=  & models . Folder { Id :  1 ,  Uid :  "uid" ,  Title :  "Folder" } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										folderService . On ( "GetFolderByUID" ,  mock . Anything ,  mock . Anything ,  mock . Anything ,  mock . Anything ) . Return ( folderResponse ,  nil ) . Once ( ) 
							 
						 
					
						
							
								
									
										
										
										
											2020-11-13 16:52:38 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-07-18 21:14:58 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										cmd  :=  dtos . UpdateDashboardACLCommand { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											Items :  [ ] dtos . DashboardACLUpdateItem { 
							 
						 
					
						
							
								
									
										
										
										
											2020-11-18 00:09:14 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
												{ UserID :  1000 ,  Permission :  models . PERMISSION_ADMIN } , 
							 
						 
					
						
							
								
									
										
										
										
											2020-11-13 16:52:38 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											} , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-11-24 19:10:32 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										updateFolderPermissionScenario ( t ,  updatePermissionContext { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											desc :          "When calling POST on" , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											url :           "/api/folders/uid/permissions" , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											routePattern :  "/api/folders/:uid/permissions" , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											cmd :           cmd , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											fn :  func ( sc  * scenarioContext )  { 
							 
						 
					
						
							
								
									
										
										
										
											2021-03-17 23:06:10 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
												callUpdateFolderPermissions ( t ,  sc ) 
							 
						 
					
						
							
								
									
										
										
										
											2020-11-24 19:10:32 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
												assert . Equal ( t ,  400 ,  sc . resp . Code ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											} , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										} ,  hs ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									} ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									t . Run ( "Getting and updating folder permissions with hidden users" ,  func ( t  * testing . T )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										origNewGuardian  :=  guardian . New 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										settings . HiddenUsers  =  map [ string ] struct { } { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											"hiddenUser" :   { } , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											testUserLogin :  { } , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										t . Cleanup ( func ( )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											guardian . New  =  origNewGuardian 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											settings . HiddenUsers  =  make ( map [ string ] struct { } ) 
							 
						 
					
						
							
								
									
										
										
										
											2018-02-27 03:14:21 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										} ) 
							 
						 
					
						
							
								
									
										
										
										
											2020-11-24 19:10:32 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										guardian . MockDashboardGuardian ( & guardian . FakeDashboardGuardian { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											CanAdminValue :                     true , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											CheckPermissionBeforeUpdateValue :  true , 
							 
						 
					
						
							
								
									
										
										
										
											2022-07-18 21:14:58 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											GetACLValue :  [ ] * models . DashboardACLInfoDTO { 
							 
						 
					
						
							
								
									
										
										
										
											2020-11-24 19:10:32 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
												{ OrgId :  1 ,  DashboardId :  1 ,  UserId :  2 ,  UserLogin :  "hiddenUser" ,  Permission :  models . PERMISSION_VIEW } , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												{ OrgId :  1 ,  DashboardId :  1 ,  UserId :  3 ,  UserLogin :  testUserLogin ,  Permission :  models . PERMISSION_EDIT } , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												{ OrgId :  1 ,  DashboardId :  1 ,  UserId :  4 ,  UserLogin :  "user_1" ,  Permission :  models . PERMISSION_ADMIN } , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											} , 
							 
						 
					
						
							
								
									
										
										
										
											2022-07-18 21:14:58 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											GetHiddenACLValue :  [ ] * models . DashboardACL { 
							 
						 
					
						
							
								
									
										
										
										
											2020-11-24 19:10:32 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
												{ OrgID :  1 ,  DashboardID :  1 ,  UserID :  2 ,  Permission :  models . PERMISSION_VIEW } , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											} , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										} ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-07-18 21:14:58 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										var  gotItems  [ ] * models . DashboardACL 
							 
						 
					
						
							
								
									
										
										
										
											2020-11-24 19:10:32 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-02-16 21:15:44 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										folderResponse  :=  & models . Folder { Id :  1 ,  Uid :  "uid" ,  Title :  "Folder" } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										folderService . On ( "GetFolderByUID" ,  mock . Anything ,  mock . Anything ,  mock . Anything ,  mock . Anything ) . Return ( folderResponse ,  nil ) . Twice ( ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										dashboardStore . On ( "UpdateDashboardACL" ,  mock . Anything ,  mock . Anything ,  mock . Anything ) . Run ( func ( args  mock . Arguments )  { 
							 
						 
					
						
							
								
									
										
										
										
											2022-07-18 21:14:58 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											gotItems  =  args . Get ( 2 ) . ( [ ] * models . DashboardACL ) 
							 
						 
					
						
							
								
									
										
										
										
											2022-02-16 21:15:44 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										} ) . Return ( nil ) . Once ( ) 
							 
						 
					
						
							
								
									
										
										
										
											2020-11-24 19:10:32 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-07-18 21:14:58 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										var  resp  [ ] * models . DashboardACLInfoDTO 
							 
						 
					
						
							
								
									
										
										
										
											2022-02-03 16:20:20 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										mockSQLStore  :=  mockstore . NewSQLStoreMock ( ) 
							 
						 
					
						
							
								
									
										
										
										
											2022-08-10 17:56:48 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										loggedInUserScenarioWithRole ( t ,  "When calling GET on" ,  "GET" ,  "/api/folders/uid/permissions" ,  "/api/folders/:uid/permissions" ,  org . RoleAdmin ,  func ( sc  * scenarioContext )  { 
							 
						 
					
						
							
								
									
										
										
										
											2020-11-24 19:10:32 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											callGetFolderPermissions ( sc ,  hs ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											assert . Equal ( t ,  200 ,  sc . resp . Code ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											err  :=  json . Unmarshal ( sc . resp . Body . Bytes ( ) ,  & resp ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											require . NoError ( t ,  err ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											assert . Len ( t ,  resp ,  2 ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											assert . Equal ( t ,  int64 ( 3 ) ,  resp [ 0 ] . UserId ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											assert . Equal ( t ,  models . PERMISSION_EDIT ,  resp [ 0 ] . Permission ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											assert . Equal ( t ,  int64 ( 4 ) ,  resp [ 1 ] . UserId ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											assert . Equal ( t ,  models . PERMISSION_ADMIN ,  resp [ 1 ] . Permission ) 
							 
						 
					
						
							
								
									
										
										
										
											2022-02-03 16:20:20 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										} ,  mockSQLStore ) 
							 
						 
					
						
							
								
									
										
										
										
											2020-11-24 19:10:32 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-07-18 21:14:58 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										cmd  :=  dtos . UpdateDashboardACLCommand { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											Items :  [ ] dtos . DashboardACLUpdateItem { 
							 
						 
					
						
							
								
									
										
										
										
											2020-11-24 19:10:32 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
												{ UserID :  1000 ,  Permission :  models . PERMISSION_ADMIN } , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											} , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										for  _ ,  acl  :=  range  resp  { 
							 
						 
					
						
							
								
									
										
										
										
											2022-07-18 21:14:58 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											cmd . Items  =  append ( cmd . Items ,  dtos . DashboardACLUpdateItem { 
							 
						 
					
						
							
								
									
										
										
										
											2020-11-24 19:10:32 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
												UserID :      acl . UserId , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												Permission :  acl . Permission , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											} ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										assert . Len ( t ,  cmd . Items ,  3 ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										updateFolderPermissionScenario ( t ,  updatePermissionContext { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											desc :          "When calling POST on" , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											url :           "/api/folders/uid/permissions" , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											routePattern :  "/api/folders/:uid/permissions" , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											cmd :           cmd , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											fn :  func ( sc  * scenarioContext )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												sc . fakeReqWithParams ( "POST" ,  sc . url ,  map [ string ] string { } ) . exec ( ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												assert . Equal ( t ,  200 ,  sc . resp . Code ) 
							 
						 
					
						
							
								
									
										
										
										
											2021-03-17 23:06:10 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
												assert . Len ( t ,  gotItems ,  4 ) 
							 
						 
					
						
							
								
									
										
										
										
											2020-11-24 19:10:32 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											} , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										} ,  hs ) 
							 
						 
					
						
							
								
									
										
										
										
											2018-02-21 01:11:50 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
									} ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-11-24 19:10:32 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								func  callGetFolderPermissions ( sc  * scenarioContext ,  hs  * HTTPServer )  {  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									sc . handlerFunc  =  hs . GetFolderPermissionList 
							 
						 
					
						
							
								
									
										
										
										
											2018-02-21 01:11:50 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
									sc . fakeReqWithParams ( "GET" ,  sc . url ,  map [ string ] string { } ) . exec ( ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-03-17 23:06:10 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								func  callUpdateFolderPermissions ( t  * testing . T ,  sc  * scenarioContext )  {  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									t . Helper ( ) 
							 
						 
					
						
							
								
									
										
										
										
											2018-02-21 01:11:50 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
									sc . fakeReqWithParams ( "POST" ,  sc . url ,  map [ string ] string { } ) . exec ( ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-11-24 19:10:32 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								func  updateFolderPermissionScenario ( t  * testing . T ,  ctx  updatePermissionContext ,  hs  * HTTPServer )  {  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									t . Run ( fmt . Sprintf ( "%s %s" ,  ctx . desc ,  ctx . url ) ,  func ( t  * testing . T )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										sc  :=  setupScenarioContext ( t ,  ctx . url ) 
							 
						 
					
						
							
								
									
										
										
										
											2018-02-21 01:11:50 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-01-15 21:43:20 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										sc . defaultHandler  =  routing . Wrap ( func ( c  * models . ReqContext )  response . Response  { 
							 
						 
					
						
							
								
									
										
										
										
											2021-11-29 17:18:01 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											c . Req . Body  =  mockRequestBody ( ctx . cmd ) 
							 
						 
					
						
							
								
									
										
										
										
											2022-02-09 20:44:38 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											c . Req . Header . Add ( "Content-Type" ,  "application/json" ) 
							 
						 
					
						
							
								
									
										
										
										
											2018-02-21 01:11:50 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
											sc . context  =  c 
							 
						 
					
						
							
								
									
										
										
										
											2022-08-11 19:28:55 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											sc . context . OrgID  =  testOrgID 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											sc . context . UserID  =  testUserID 
							 
						 
					
						
							
								
									
										
										
										
											2018-02-21 01:11:50 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-11-29 17:18:01 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											return  hs . UpdateFolderPermissions ( c ) 
							 
						 
					
						
							
								
									
										
										
										
											2018-02-21 01:11:50 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
										} ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-11-24 19:10:32 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										sc . m . Post ( ctx . routePattern ,  sc . defaultHandler ) 
							 
						 
					
						
							
								
									
										
										
										
											2018-02-21 01:11:50 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-11-24 19:10:32 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										ctx . fn ( sc ) 
							 
						 
					
						
							
								
									
										
										
										
											2018-02-21 01:11:50 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
									} ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}