| 
									
										
										
										
											2018-12-02 01:28:10 +08:00
										 |  |  | package api | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | import ( | 
					
						
							| 
									
										
										
										
											2020-11-13 16:52:38 +08:00
										 |  |  | 	"fmt" | 
					
						
							| 
									
										
										
										
											2018-12-02 01:28:10 +08:00
										 |  |  | 	"testing" | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-08-02 22:58:05 +08:00
										 |  |  | 	"github.com/stretchr/testify/assert" | 
					
						
							|  |  |  | 	"github.com/stretchr/testify/require" | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-12-02 01:28:10 +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" | 
					
						
							| 
									
										
										
										
											2019-05-21 19:52:49 +08:00
										 |  |  | 	"github.com/grafana/grafana/pkg/components/simplejson" | 
					
						
							| 
									
										
										
										
											2022-12-13 18:03:36 +08:00
										 |  |  | 	"github.com/grafana/grafana/pkg/infra/db" | 
					
						
							| 
									
										
										
										
											2023-01-18 23:01:25 +08:00
										 |  |  | 	"github.com/grafana/grafana/pkg/infra/db/dbtest" | 
					
						
							| 
									
										
										
										
											2019-03-08 22:15:38 +08:00
										 |  |  | 	"github.com/grafana/grafana/pkg/services/auth" | 
					
						
							| 
									
										
										
										
											2022-11-18 16:56:06 +08:00
										 |  |  | 	"github.com/grafana/grafana/pkg/services/auth/authtest" | 
					
						
							| 
									
										
										
										
											2023-01-27 15:50:36 +08:00
										 |  |  | 	contextmodel "github.com/grafana/grafana/pkg/services/contexthandler/model" | 
					
						
							| 
									
										
										
										
											2022-04-05 02:36:15 +08:00
										 |  |  | 	"github.com/grafana/grafana/pkg/services/login/logintest" | 
					
						
							| 
									
										
										
										
											2022-08-10 17:56:48 +08:00
										 |  |  | 	"github.com/grafana/grafana/pkg/services/org" | 
					
						
							| 
									
										
										
										
											2022-07-20 20:50:06 +08:00
										 |  |  | 	"github.com/grafana/grafana/pkg/services/user" | 
					
						
							| 
									
										
										
										
											2022-08-02 22:58:05 +08:00
										 |  |  | 	"github.com/grafana/grafana/pkg/services/user/usertest" | 
					
						
							| 
									
										
										
										
											2021-03-19 16:14:14 +08:00
										 |  |  | 	"github.com/grafana/grafana/pkg/setting" | 
					
						
							| 
									
										
										
										
											2018-12-02 01:28:10 +08:00
										 |  |  | ) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-04-15 17:11:45 +08:00
										 |  |  | const ( | 
					
						
							| 
									
										
										
										
											2021-03-19 00:16:56 +08:00
										 |  |  | 	testLogin         = "test@example.com" | 
					
						
							|  |  |  | 	testPassword      = "password" | 
					
						
							|  |  |  | 	nonExistingOrgID  = 1000 | 
					
						
							|  |  |  | 	existingTestLogin = "existing@example.com" | 
					
						
							| 
									
										
										
										
											2020-04-15 17:11:45 +08:00
										 |  |  | ) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-11-13 16:52:38 +08:00
										 |  |  | func TestAdminAPIEndpoint(t *testing.T) { | 
					
						
							| 
									
										
										
										
											2022-08-10 17:56:48 +08:00
										 |  |  | 	const role = org.RoleAdmin | 
					
						
							| 
									
										
										
										
											2022-08-02 22:58:05 +08:00
										 |  |  | 	userService := usertest.NewUserServiceFake() | 
					
						
							| 
									
										
										
										
											2020-12-11 18:44:44 +08:00
										 |  |  | 	t.Run("Given a server admin attempts to remove themselves as an admin", func(t *testing.T) { | 
					
						
							| 
									
										
										
										
											2018-12-02 01:28:10 +08:00
										 |  |  | 		updateCmd := dtos.AdminUpdateUserPermissionsForm{ | 
					
						
							|  |  |  | 			IsGrafanaAdmin: false, | 
					
						
							|  |  |  | 		} | 
					
						
							| 
									
										
										
										
											2022-09-27 19:58:49 +08:00
										 |  |  | 		userService := usertest.FakeUserService{ExpectedError: user.ErrLastGrafanaAdmin} | 
					
						
							| 
									
										
										
										
											2020-11-13 16:52:38 +08:00
										 |  |  | 		putAdminScenario(t, "When calling PUT on", "/api/admin/users/1/permissions", | 
					
						
							|  |  |  | 			"/api/admin/users/:id/permissions", role, updateCmd, func(sc *scenarioContext) { | 
					
						
							|  |  |  | 				sc.fakeReqWithParams("PUT", sc.url, map[string]string{}).exec() | 
					
						
							|  |  |  | 				assert.Equal(t, 400, sc.resp.Code) | 
					
						
							| 
									
										
										
										
											2022-09-27 19:58:49 +08:00
										 |  |  | 			}, nil, &userService) | 
					
						
							| 
									
										
										
										
											2018-12-02 01:28:10 +08:00
										 |  |  | 	}) | 
					
						
							| 
									
										
										
										
											2019-03-08 22:15:38 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-11-13 16:52:38 +08:00
										 |  |  | 	t.Run("When a server admin attempts to logout himself from all devices", func(t *testing.T) { | 
					
						
							|  |  |  | 		adminLogoutUserScenario(t, "Should not be allowed when calling POST on", | 
					
						
							|  |  |  | 			"/api/admin/users/1/logout", "/api/admin/users/:id/logout", func(sc *scenarioContext) { | 
					
						
							|  |  |  | 				sc.fakeReqWithParams("POST", sc.url, map[string]string{}).exec() | 
					
						
							|  |  |  | 				assert.Equal(t, 400, sc.resp.Code) | 
					
						
							| 
									
										
										
										
											2022-08-02 22:58:05 +08:00
										 |  |  | 			}, userService) | 
					
						
							| 
									
										
										
										
											2019-03-08 22:15:38 +08:00
										 |  |  | 	}) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-11-13 16:52:38 +08:00
										 |  |  | 	t.Run("When a server admin attempts to logout a non-existing user from all devices", func(t *testing.T) { | 
					
						
							| 
									
										
										
										
											2022-08-02 22:58:05 +08:00
										 |  |  | 		mockUserService := usertest.NewUserServiceFake() | 
					
						
							|  |  |  | 		mockUserService.ExpectedError = user.ErrUserNotFound | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-11-13 16:52:38 +08:00
										 |  |  | 		adminLogoutUserScenario(t, "Should return not found when calling POST on", "/api/admin/users/200/logout", | 
					
						
							|  |  |  | 			"/api/admin/users/:id/logout", func(sc *scenarioContext) { | 
					
						
							|  |  |  | 				sc.fakeReqWithParams("POST", sc.url, map[string]string{}).exec() | 
					
						
							|  |  |  | 				assert.Equal(t, 404, sc.resp.Code) | 
					
						
							| 
									
										
										
										
											2022-08-02 22:58:05 +08:00
										 |  |  | 			}, mockUserService) | 
					
						
							| 
									
										
										
										
											2019-03-08 22:15:38 +08:00
										 |  |  | 	}) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-11-13 16:52:38 +08:00
										 |  |  | 	t.Run("When a server admin attempts to revoke an auth token for a non-existing user", func(t *testing.T) { | 
					
						
							| 
									
										
										
										
											2022-11-18 16:56:06 +08:00
										 |  |  | 		cmd := auth.RevokeAuthTokenCmd{AuthTokenId: 2} | 
					
						
							| 
									
										
										
										
											2022-08-02 22:58:05 +08:00
										 |  |  | 		mockUser := usertest.NewUserServiceFake() | 
					
						
							|  |  |  | 		mockUser.ExpectedError = user.ErrUserNotFound | 
					
						
							| 
									
										
										
										
											2020-11-13 16:52:38 +08:00
										 |  |  | 		adminRevokeUserAuthTokenScenario(t, "Should return not found when calling POST on", | 
					
						
							|  |  |  | 			"/api/admin/users/200/revoke-auth-token", "/api/admin/users/:id/revoke-auth-token", cmd, func(sc *scenarioContext) { | 
					
						
							|  |  |  | 				sc.fakeReqWithParams("POST", sc.url, map[string]string{}).exec() | 
					
						
							|  |  |  | 				assert.Equal(t, 404, sc.resp.Code) | 
					
						
							| 
									
										
										
										
											2022-08-02 22:58:05 +08:00
										 |  |  | 			}, mockUser) | 
					
						
							| 
									
										
										
										
											2020-11-13 16:52:38 +08:00
										 |  |  | 	}) | 
					
						
							| 
									
										
										
										
											2019-03-08 22:15:38 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-11-13 16:52:38 +08:00
										 |  |  | 	t.Run("When a server admin gets auth tokens for a non-existing user", func(t *testing.T) { | 
					
						
							| 
									
										
										
										
											2022-08-02 22:58:05 +08:00
										 |  |  | 		mockUserService := usertest.NewUserServiceFake() | 
					
						
							|  |  |  | 		mockUserService.ExpectedError = user.ErrUserNotFound | 
					
						
							| 
									
										
										
										
											2020-11-13 16:52:38 +08:00
										 |  |  | 		adminGetUserAuthTokensScenario(t, "Should return not found when calling GET on", | 
					
						
							|  |  |  | 			"/api/admin/users/200/auth-tokens", "/api/admin/users/:id/auth-tokens", func(sc *scenarioContext) { | 
					
						
							|  |  |  | 				sc.fakeReqWithParams("GET", sc.url, map[string]string{}).exec() | 
					
						
							|  |  |  | 				assert.Equal(t, 404, sc.resp.Code) | 
					
						
							| 
									
										
										
										
											2022-08-02 22:58:05 +08:00
										 |  |  | 			}, mockUserService) | 
					
						
							| 
									
										
										
										
											2019-03-08 22:15:38 +08:00
										 |  |  | 	}) | 
					
						
							| 
									
										
										
										
											2019-05-21 19:52:49 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-11-13 16:52:38 +08:00
										 |  |  | 	t.Run("When a server admin attempts to enable/disable a nonexistent user", func(t *testing.T) { | 
					
						
							|  |  |  | 		adminDisableUserScenario(t, "Should return user not found on a POST request", "enable", | 
					
						
							|  |  |  | 			"/api/admin/users/42/enable", "/api/admin/users/:id/enable", func(sc *scenarioContext) { | 
					
						
							| 
									
										
										
										
											2022-08-16 20:24:57 +08:00
										 |  |  | 				userService := sc.userService.(*usertest.FakeUserService) | 
					
						
							| 
									
										
										
										
											2022-07-20 20:50:06 +08:00
										 |  |  | 				sc.authInfoService.ExpectedError = user.ErrUserNotFound | 
					
						
							| 
									
										
										
										
											2022-08-16 20:24:57 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 				userService.ExpectedError = user.ErrUserNotFound | 
					
						
							| 
									
										
										
										
											2020-01-10 18:43:44 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-11-13 16:52:38 +08:00
										 |  |  | 				sc.fakeReqWithParams("POST", sc.url, map[string]string{}).exec() | 
					
						
							| 
									
										
										
										
											2020-01-10 18:43:44 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-11-13 16:52:38 +08:00
										 |  |  | 				assert.Equal(t, 404, sc.resp.Code) | 
					
						
							|  |  |  | 				respJSON, err := simplejson.NewJson(sc.resp.Body.Bytes()) | 
					
						
							|  |  |  | 				require.NoError(t, err) | 
					
						
							| 
									
										
										
										
											2020-01-10 18:43:44 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-11-13 16:52:38 +08:00
										 |  |  | 				assert.Equal(t, "user not found", respJSON.Get("message").MustString()) | 
					
						
							|  |  |  | 			}) | 
					
						
							| 
									
										
										
										
											2020-01-10 18:43:44 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-11-13 16:52:38 +08:00
										 |  |  | 		adminDisableUserScenario(t, "Should return user not found on a POST request", "disable", | 
					
						
							|  |  |  | 			"/api/admin/users/42/disable", "/api/admin/users/:id/disable", func(sc *scenarioContext) { | 
					
						
							| 
									
										
										
										
											2022-08-16 20:24:57 +08:00
										 |  |  | 				userService := sc.userService.(*usertest.FakeUserService) | 
					
						
							| 
									
										
										
										
											2022-07-20 20:50:06 +08:00
										 |  |  | 				sc.authInfoService.ExpectedError = user.ErrUserNotFound | 
					
						
							| 
									
										
										
										
											2022-08-16 20:24:57 +08:00
										 |  |  | 				userService.ExpectedError = user.ErrUserNotFound | 
					
						
							| 
									
										
										
										
											2020-01-10 18:43:44 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-11-13 16:52:38 +08:00
										 |  |  | 				sc.fakeReqWithParams("POST", sc.url, map[string]string{}).exec() | 
					
						
							| 
									
										
										
										
											2020-01-10 18:43:44 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-11-13 16:52:38 +08:00
										 |  |  | 				assert.Equal(t, 404, sc.resp.Code) | 
					
						
							|  |  |  | 				respJSON, err := simplejson.NewJson(sc.resp.Body.Bytes()) | 
					
						
							|  |  |  | 				require.NoError(t, err) | 
					
						
							| 
									
										
										
										
											2020-01-10 18:43:44 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-11-13 16:52:38 +08:00
										 |  |  | 				assert.Equal(t, "user not found", respJSON.Get("message").MustString()) | 
					
						
							|  |  |  | 			}) | 
					
						
							| 
									
										
										
										
											2020-01-10 18:43:44 +08:00
										 |  |  | 	}) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-11-13 16:52:38 +08:00
										 |  |  | 	t.Run("When a server admin attempts to disable/enable external user", func(t *testing.T) { | 
					
						
							|  |  |  | 		adminDisableUserScenario(t, "Should return Could not disable external user error", "disable", | 
					
						
							|  |  |  | 			"/api/admin/users/42/disable", "/api/admin/users/:id/disable", func(sc *scenarioContext) { | 
					
						
							|  |  |  | 				sc.fakeReqWithParams("POST", sc.url, map[string]string{}).exec() | 
					
						
							|  |  |  | 				assert.Equal(t, 500, sc.resp.Code) | 
					
						
							| 
									
										
										
										
											2019-05-21 19:52:49 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-11-13 16:52:38 +08:00
										 |  |  | 				respJSON, err := simplejson.NewJson(sc.resp.Body.Bytes()) | 
					
						
							|  |  |  | 				require.NoError(t, err) | 
					
						
							|  |  |  | 				assert.Equal(t, "Could not disable external user", respJSON.Get("message").MustString()) | 
					
						
							| 
									
										
										
										
											2019-05-21 19:52:49 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-02-05 02:45:42 +08:00
										 |  |  | 				assert.Equal(t, int64(42), sc.authInfoService.LatestUserID) | 
					
						
							| 
									
										
										
										
											2020-11-13 16:52:38 +08:00
										 |  |  | 			}) | 
					
						
							| 
									
										
										
										
											2019-05-21 19:52:49 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-11-13 16:52:38 +08:00
										 |  |  | 		adminDisableUserScenario(t, "Should return Could not enable external user error", "enable", | 
					
						
							|  |  |  | 			"/api/admin/users/42/enable", "/api/admin/users/:id/enable", func(sc *scenarioContext) { | 
					
						
							|  |  |  | 				sc.fakeReqWithParams("POST", sc.url, map[string]string{}).exec() | 
					
						
							|  |  |  | 				assert.Equal(t, 500, sc.resp.Code) | 
					
						
							| 
									
										
										
										
											2019-05-21 19:52:49 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-11-13 16:52:38 +08:00
										 |  |  | 				respJSON, err := simplejson.NewJson(sc.resp.Body.Bytes()) | 
					
						
							|  |  |  | 				require.NoError(t, err) | 
					
						
							|  |  |  | 				assert.Equal(t, "Could not enable external user", respJSON.Get("message").MustString()) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-02-05 02:45:42 +08:00
										 |  |  | 				userID := sc.authInfoService.LatestUserID | 
					
						
							| 
									
										
										
										
											2020-11-13 16:52:38 +08:00
										 |  |  | 				assert.Equal(t, int64(42), userID) | 
					
						
							|  |  |  | 			}) | 
					
						
							| 
									
										
										
										
											2019-05-21 19:52:49 +08:00
										 |  |  | 	}) | 
					
						
							| 
									
										
										
										
											2020-01-10 18:43:44 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-11-13 16:52:38 +08:00
										 |  |  | 	t.Run("When a server admin attempts to delete a nonexistent user", func(t *testing.T) { | 
					
						
							|  |  |  | 		adminDeleteUserScenario(t, "Should return user not found error", "/api/admin/users/42", | 
					
						
							|  |  |  | 			"/api/admin/users/:id", func(sc *scenarioContext) { | 
					
						
							| 
									
										
										
										
											2022-08-02 22:58:05 +08:00
										 |  |  | 				sc.userService.(*usertest.FakeUserService).ExpectedError = user.ErrUserNotFound | 
					
						
							| 
									
										
										
										
											2022-07-20 20:50:06 +08:00
										 |  |  | 				sc.authInfoService.ExpectedError = user.ErrUserNotFound | 
					
						
							| 
									
										
										
										
											2020-11-13 16:52:38 +08:00
										 |  |  | 				sc.fakeReqWithParams("DELETE", sc.url, map[string]string{}).exec() | 
					
						
							| 
									
										
										
										
											2020-01-10 18:43:44 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-11-13 16:52:38 +08:00
										 |  |  | 				assert.Equal(t, 404, sc.resp.Code) | 
					
						
							| 
									
										
										
										
											2020-01-10 18:43:44 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-11-13 16:52:38 +08:00
										 |  |  | 				respJSON, err := simplejson.NewJson(sc.resp.Body.Bytes()) | 
					
						
							|  |  |  | 				require.NoError(t, err) | 
					
						
							|  |  |  | 				assert.Equal(t, "user not found", respJSON.Get("message").MustString()) | 
					
						
							|  |  |  | 			}) | 
					
						
							| 
									
										
										
										
											2020-01-10 18:43:44 +08:00
										 |  |  | 	}) | 
					
						
							| 
									
										
										
										
											2020-04-15 17:11:45 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-11-13 16:52:38 +08:00
										 |  |  | 	t.Run("When a server admin attempts to create a user", func(t *testing.T) { | 
					
						
							|  |  |  | 		t.Run("Without an organization", func(t *testing.T) { | 
					
						
							|  |  |  | 			createCmd := dtos.AdminCreateUserForm{ | 
					
						
							|  |  |  | 				Login:    testLogin, | 
					
						
							|  |  |  | 				Password: testPassword, | 
					
						
							|  |  |  | 			} | 
					
						
							| 
									
										
										
										
											2022-11-29 17:20:44 +08:00
										 |  |  | 			usrSvc := &usertest.FakeUserService{ExpectedUser: &user.User{ID: testUserID}} | 
					
						
							|  |  |  | 			adminCreateUserScenario(t, "Should create the user", "/api/admin/users", "/api/admin/users", createCmd, usrSvc, func(sc *scenarioContext) { | 
					
						
							| 
									
										
										
										
											2020-04-15 17:11:45 +08:00
										 |  |  | 				sc.fakeReqWithParams("POST", sc.url, map[string]string{}).exec() | 
					
						
							| 
									
										
										
										
											2020-11-13 16:52:38 +08:00
										 |  |  | 				assert.Equal(t, 200, sc.resp.Code) | 
					
						
							| 
									
										
										
										
											2020-04-15 17:11:45 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 				respJSON, err := simplejson.NewJson(sc.resp.Body.Bytes()) | 
					
						
							| 
									
										
										
										
											2020-11-13 16:52:38 +08:00
										 |  |  | 				require.NoError(t, err) | 
					
						
							|  |  |  | 				assert.Equal(t, testUserID, respJSON.Get("id").MustInt64()) | 
					
						
							|  |  |  | 				assert.Equal(t, "User created", respJSON.Get("message").MustString()) | 
					
						
							| 
									
										
										
										
											2020-04-15 17:11:45 +08:00
										 |  |  | 			}) | 
					
						
							|  |  |  | 		}) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-11-13 16:52:38 +08:00
										 |  |  | 		t.Run("With an organization", func(t *testing.T) { | 
					
						
							| 
									
										
										
										
											2020-04-15 17:11:45 +08:00
										 |  |  | 			createCmd := dtos.AdminCreateUserForm{ | 
					
						
							| 
									
										
										
										
											2020-11-13 16:52:38 +08:00
										 |  |  | 				Login:    testLogin, | 
					
						
							|  |  |  | 				Password: testPassword, | 
					
						
							|  |  |  | 				OrgId:    testOrgID, | 
					
						
							| 
									
										
										
										
											2020-04-15 17:11:45 +08:00
										 |  |  | 			} | 
					
						
							| 
									
										
										
										
											2022-11-29 17:20:44 +08:00
										 |  |  | 			usrSvc := &usertest.FakeUserService{ExpectedUser: &user.User{ID: testUserID}} | 
					
						
							|  |  |  | 			adminCreateUserScenario(t, "Should create the user", "/api/admin/users", "/api/admin/users", createCmd, usrSvc, func(sc *scenarioContext) { | 
					
						
							| 
									
										
										
										
											2020-04-15 17:11:45 +08:00
										 |  |  | 				sc.fakeReqWithParams("POST", sc.url, map[string]string{}).exec() | 
					
						
							| 
									
										
										
										
											2020-11-13 16:52:38 +08:00
										 |  |  | 				assert.Equal(t, 200, sc.resp.Code) | 
					
						
							| 
									
										
										
										
											2020-04-15 17:11:45 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 				respJSON, err := simplejson.NewJson(sc.resp.Body.Bytes()) | 
					
						
							| 
									
										
										
										
											2020-11-13 16:52:38 +08:00
										 |  |  | 				require.NoError(t, err) | 
					
						
							|  |  |  | 				assert.Equal(t, testUserID, respJSON.Get("id").MustInt64()) | 
					
						
							|  |  |  | 				assert.Equal(t, "User created", respJSON.Get("message").MustString()) | 
					
						
							| 
									
										
										
										
											2020-04-15 17:11:45 +08:00
										 |  |  | 			}) | 
					
						
							|  |  |  | 		}) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-11-13 16:52:38 +08:00
										 |  |  | 		t.Run("With a nonexistent organization", func(t *testing.T) { | 
					
						
							| 
									
										
										
										
											2020-04-15 17:11:45 +08:00
										 |  |  | 			createCmd := dtos.AdminCreateUserForm{ | 
					
						
							| 
									
										
										
										
											2020-11-13 16:52:38 +08:00
										 |  |  | 				Login:    testLogin, | 
					
						
							|  |  |  | 				Password: testPassword, | 
					
						
							| 
									
										
										
										
											2020-04-15 17:11:45 +08:00
										 |  |  | 				OrgId:    nonExistingOrgID, | 
					
						
							|  |  |  | 			} | 
					
						
							| 
									
										
										
										
											2023-01-04 23:20:26 +08:00
										 |  |  | 			usrSvc := &usertest.FakeUserService{ExpectedError: org.ErrOrgNotFound} | 
					
						
							| 
									
										
										
										
											2022-11-29 17:20:44 +08:00
										 |  |  | 			adminCreateUserScenario(t, "Should create the user", "/api/admin/users", "/api/admin/users", createCmd, usrSvc, func(sc *scenarioContext) { | 
					
						
							| 
									
										
										
										
											2020-04-15 17:11:45 +08:00
										 |  |  | 				sc.fakeReqWithParams("POST", sc.url, map[string]string{}).exec() | 
					
						
							| 
									
										
										
										
											2020-11-13 16:52:38 +08:00
										 |  |  | 				assert.Equal(t, 400, sc.resp.Code) | 
					
						
							| 
									
										
										
										
											2020-04-15 17:11:45 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 				respJSON, err := simplejson.NewJson(sc.resp.Body.Bytes()) | 
					
						
							| 
									
										
										
										
											2020-11-13 16:52:38 +08:00
										 |  |  | 				require.NoError(t, err) | 
					
						
							|  |  |  | 				assert.Equal(t, "organization not found", respJSON.Get("message").MustString()) | 
					
						
							| 
									
										
										
										
											2020-04-15 17:11:45 +08:00
										 |  |  | 			}) | 
					
						
							|  |  |  | 		}) | 
					
						
							|  |  |  | 	}) | 
					
						
							| 
									
										
										
										
											2020-08-13 20:38:54 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-11-13 16:52:38 +08:00
										 |  |  | 	t.Run("When a server admin attempts to create a user with an already existing email/login", func(t *testing.T) { | 
					
						
							| 
									
										
										
										
											2020-08-13 20:38:54 +08:00
										 |  |  | 		createCmd := dtos.AdminCreateUserForm{ | 
					
						
							| 
									
										
										
										
											2021-03-19 00:16:56 +08:00
										 |  |  | 			Login:    existingTestLogin, | 
					
						
							| 
									
										
										
										
											2020-11-13 16:52:38 +08:00
										 |  |  | 			Password: testPassword, | 
					
						
							| 
									
										
										
										
											2020-08-13 20:38:54 +08:00
										 |  |  | 		} | 
					
						
							| 
									
										
										
										
											2022-11-29 17:20:44 +08:00
										 |  |  | 		usrSvc := &usertest.FakeUserService{ExpectedError: user.ErrUserAlreadyExists} | 
					
						
							|  |  |  | 		adminCreateUserScenario(t, "Should return an error", "/api/admin/users", "/api/admin/users", createCmd, usrSvc, func(sc *scenarioContext) { | 
					
						
							| 
									
										
										
										
											2020-08-13 20:38:54 +08:00
										 |  |  | 			sc.fakeReqWithParams("POST", sc.url, map[string]string{}).exec() | 
					
						
							| 
									
										
										
										
											2020-11-13 16:52:38 +08:00
										 |  |  | 			assert.Equal(t, 412, sc.resp.Code) | 
					
						
							| 
									
										
										
										
											2020-08-13 20:38:54 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 			respJSON, err := simplejson.NewJson(sc.resp.Body.Bytes()) | 
					
						
							| 
									
										
										
										
											2020-11-13 16:52:38 +08:00
										 |  |  | 			require.NoError(t, err) | 
					
						
							|  |  |  | 			assert.Equal(t, "user already exists", respJSON.Get("error").MustString()) | 
					
						
							| 
									
										
										
										
											2020-08-13 20:38:54 +08:00
										 |  |  | 		}) | 
					
						
							|  |  |  | 	}) | 
					
						
							| 
									
										
										
										
											2018-12-02 01:28:10 +08:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-08-10 17:56:48 +08:00
										 |  |  | func putAdminScenario(t *testing.T, desc string, url string, routePattern string, role org.RoleType, | 
					
						
							| 
									
										
										
										
											2022-12-13 18:03:36 +08:00
										 |  |  | 	cmd dtos.AdminUpdateUserPermissionsForm, fn scenarioFunc, sqlStore db.DB, userSvc user.Service) { | 
					
						
							| 
									
										
										
										
											2020-11-13 16:52:38 +08:00
										 |  |  | 	t.Run(fmt.Sprintf("%s %s", desc, url), func(t *testing.T) { | 
					
						
							| 
									
										
										
										
											2021-03-19 16:14:14 +08:00
										 |  |  | 		hs := &HTTPServer{ | 
					
						
							| 
									
										
										
										
											2022-02-05 02:45:42 +08:00
										 |  |  | 			Cfg:             setting.NewCfg(), | 
					
						
							|  |  |  | 			SQLStore:        sqlStore, | 
					
						
							| 
									
										
										
										
											2022-04-05 02:36:15 +08:00
										 |  |  | 			authInfoService: &logintest.AuthInfoServiceFake{}, | 
					
						
							| 
									
										
										
										
											2022-09-27 19:58:49 +08:00
										 |  |  | 			userService:     userSvc, | 
					
						
							| 
									
										
										
										
											2021-03-19 16:14:14 +08:00
										 |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-11-13 16:52:38 +08:00
										 |  |  | 		sc := setupScenarioContext(t, url) | 
					
						
							| 
									
										
										
										
											2023-01-27 15:50:36 +08:00
										 |  |  | 		sc.defaultHandler = routing.Wrap(func(c *contextmodel.ReqContext) response.Response { | 
					
						
							| 
									
										
										
										
											2021-11-29 17:18:01 +08:00
										 |  |  | 			c.Req.Body = mockRequestBody(cmd) | 
					
						
							| 
									
										
										
										
											2022-02-09 20:44:38 +08:00
										 |  |  | 			c.Req.Header.Add("Content-Type", "application/json") | 
					
						
							| 
									
										
										
										
											2018-12-02 01:28:10 +08:00
										 |  |  | 			sc.context = c | 
					
						
							| 
									
										
										
										
											2022-08-11 19:28:55 +08:00
										 |  |  | 			sc.context.UserID = testUserID | 
					
						
							|  |  |  | 			sc.context.OrgID = testOrgID | 
					
						
							| 
									
										
										
										
											2018-12-02 01:28:10 +08:00
										 |  |  | 			sc.context.OrgRole = role | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-11-29 17:18:01 +08:00
										 |  |  | 			return hs.AdminUpdateUserPermissions(c) | 
					
						
							| 
									
										
										
										
											2018-12-02 01:28:10 +08:00
										 |  |  | 		}) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		sc.m.Put(routePattern, sc.defaultHandler) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		fn(sc) | 
					
						
							|  |  |  | 	}) | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2019-03-08 22:15:38 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-08-02 22:58:05 +08:00
										 |  |  | func adminLogoutUserScenario(t *testing.T, desc string, url string, routePattern string, fn scenarioFunc, userService *usertest.FakeUserService) { | 
					
						
							| 
									
										
										
										
											2020-11-13 16:52:38 +08:00
										 |  |  | 	t.Run(fmt.Sprintf("%s %s", desc, url), func(t *testing.T) { | 
					
						
							| 
									
										
										
										
											2019-03-08 22:15:38 +08:00
										 |  |  | 		hs := HTTPServer{ | 
					
						
							| 
									
										
										
										
											2022-11-18 16:56:06 +08:00
										 |  |  | 			AuthTokenService: authtest.NewFakeUserAuthTokenService(), | 
					
						
							| 
									
										
										
										
											2022-08-02 22:58:05 +08:00
										 |  |  | 			userService:      userService, | 
					
						
							| 
									
										
										
										
											2019-03-08 22:15:38 +08:00
										 |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-11-13 16:52:38 +08:00
										 |  |  | 		sc := setupScenarioContext(t, url) | 
					
						
							| 
									
										
										
										
											2023-01-27 15:50:36 +08:00
										 |  |  | 		sc.defaultHandler = routing.Wrap(func(c *contextmodel.ReqContext) response.Response { | 
					
						
							| 
									
										
										
										
											2020-11-13 16:52:38 +08:00
										 |  |  | 			t.Log("Route handler invoked", "url", c.Req.URL) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-03-08 22:15:38 +08:00
										 |  |  | 			sc.context = c | 
					
						
							| 
									
										
										
										
											2022-08-11 19:28:55 +08:00
										 |  |  | 			sc.context.UserID = testUserID | 
					
						
							|  |  |  | 			sc.context.OrgID = testOrgID | 
					
						
							| 
									
										
										
										
											2022-08-10 17:56:48 +08:00
										 |  |  | 			sc.context.OrgRole = org.RoleAdmin | 
					
						
							| 
									
										
										
										
											2019-03-08 22:15:38 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 			return hs.AdminLogoutUser(c) | 
					
						
							|  |  |  | 		}) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		sc.m.Post(routePattern, sc.defaultHandler) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		fn(sc) | 
					
						
							|  |  |  | 	}) | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-11-18 16:56:06 +08:00
										 |  |  | func adminRevokeUserAuthTokenScenario(t *testing.T, desc string, url string, routePattern string, cmd auth.RevokeAuthTokenCmd, fn scenarioFunc, userService user.Service) { | 
					
						
							| 
									
										
										
										
											2020-11-13 16:52:38 +08:00
										 |  |  | 	t.Run(fmt.Sprintf("%s %s", desc, url), func(t *testing.T) { | 
					
						
							| 
									
										
										
										
											2022-11-18 16:56:06 +08:00
										 |  |  | 		fakeAuthTokenService := authtest.NewFakeUserAuthTokenService() | 
					
						
							| 
									
										
										
										
											2019-03-08 22:15:38 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 		hs := HTTPServer{ | 
					
						
							|  |  |  | 			AuthTokenService: fakeAuthTokenService, | 
					
						
							| 
									
										
										
										
											2022-08-02 22:58:05 +08:00
										 |  |  | 			userService:      userService, | 
					
						
							| 
									
										
										
										
											2019-03-08 22:15:38 +08:00
										 |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-11-13 16:52:38 +08:00
										 |  |  | 		sc := setupScenarioContext(t, url) | 
					
						
							| 
									
										
										
										
											2019-03-08 22:15:38 +08:00
										 |  |  | 		sc.userAuthTokenService = fakeAuthTokenService | 
					
						
							| 
									
										
										
										
											2023-01-27 15:50:36 +08:00
										 |  |  | 		sc.defaultHandler = routing.Wrap(func(c *contextmodel.ReqContext) response.Response { | 
					
						
							| 
									
										
										
										
											2021-11-29 17:18:01 +08:00
										 |  |  | 			c.Req.Body = mockRequestBody(cmd) | 
					
						
							| 
									
										
										
										
											2022-02-09 20:44:38 +08:00
										 |  |  | 			c.Req.Header.Add("Content-Type", "application/json") | 
					
						
							| 
									
										
										
										
											2019-03-08 22:15:38 +08:00
										 |  |  | 			sc.context = c | 
					
						
							| 
									
										
										
										
											2022-08-11 19:28:55 +08:00
										 |  |  | 			sc.context.UserID = testUserID | 
					
						
							|  |  |  | 			sc.context.OrgID = testOrgID | 
					
						
							| 
									
										
										
										
											2022-08-10 17:56:48 +08:00
										 |  |  | 			sc.context.OrgRole = org.RoleAdmin | 
					
						
							| 
									
										
										
										
											2019-03-08 22:15:38 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-11-29 17:18:01 +08:00
										 |  |  | 			return hs.AdminRevokeUserAuthToken(c) | 
					
						
							| 
									
										
										
										
											2019-03-08 22:15:38 +08:00
										 |  |  | 		}) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		sc.m.Post(routePattern, sc.defaultHandler) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		fn(sc) | 
					
						
							|  |  |  | 	}) | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-08-02 22:58:05 +08:00
										 |  |  | func adminGetUserAuthTokensScenario(t *testing.T, desc string, url string, routePattern string, fn scenarioFunc, userService *usertest.FakeUserService) { | 
					
						
							| 
									
										
										
										
											2020-11-13 16:52:38 +08:00
										 |  |  | 	t.Run(fmt.Sprintf("%s %s", desc, url), func(t *testing.T) { | 
					
						
							| 
									
										
										
										
											2022-11-18 16:56:06 +08:00
										 |  |  | 		fakeAuthTokenService := authtest.NewFakeUserAuthTokenService() | 
					
						
							| 
									
										
										
										
											2019-03-08 22:15:38 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 		hs := HTTPServer{ | 
					
						
							|  |  |  | 			AuthTokenService: fakeAuthTokenService, | 
					
						
							| 
									
										
										
										
											2022-08-02 22:58:05 +08:00
										 |  |  | 			userService:      userService, | 
					
						
							| 
									
										
										
										
											2019-03-08 22:15:38 +08:00
										 |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-11-13 16:52:38 +08:00
										 |  |  | 		sc := setupScenarioContext(t, url) | 
					
						
							| 
									
										
										
										
											2019-03-08 22:15:38 +08:00
										 |  |  | 		sc.userAuthTokenService = fakeAuthTokenService | 
					
						
							| 
									
										
										
										
											2023-01-27 15:50:36 +08:00
										 |  |  | 		sc.defaultHandler = routing.Wrap(func(c *contextmodel.ReqContext) response.Response { | 
					
						
							| 
									
										
										
										
											2019-03-08 22:15:38 +08:00
										 |  |  | 			sc.context = c | 
					
						
							| 
									
										
										
										
											2022-08-11 19:28:55 +08:00
										 |  |  | 			sc.context.UserID = testUserID | 
					
						
							|  |  |  | 			sc.context.OrgID = testOrgID | 
					
						
							| 
									
										
										
										
											2022-08-10 17:56:48 +08:00
										 |  |  | 			sc.context.OrgRole = org.RoleAdmin | 
					
						
							| 
									
										
										
										
											2019-03-08 22:15:38 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 			return hs.AdminGetUserAuthTokens(c) | 
					
						
							|  |  |  | 		}) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		sc.m.Get(routePattern, sc.defaultHandler) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		fn(sc) | 
					
						
							|  |  |  | 	}) | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2019-05-21 19:52:49 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-11-13 16:52:38 +08:00
										 |  |  | func adminDisableUserScenario(t *testing.T, desc string, action string, url string, routePattern string, fn scenarioFunc) { | 
					
						
							|  |  |  | 	t.Run(fmt.Sprintf("%s %s", desc, url), func(t *testing.T) { | 
					
						
							| 
									
										
										
										
											2022-11-18 16:56:06 +08:00
										 |  |  | 		fakeAuthTokenService := authtest.NewFakeUserAuthTokenService() | 
					
						
							| 
									
										
										
										
											2019-05-23 20:54:47 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-04-05 02:36:15 +08:00
										 |  |  | 		authInfoService := &logintest.AuthInfoServiceFake{} | 
					
						
							| 
									
										
										
										
											2022-02-05 02:45:42 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-05-23 20:54:47 +08:00
										 |  |  | 		hs := HTTPServer{ | 
					
						
							| 
									
										
										
										
											2023-01-18 23:01:25 +08:00
										 |  |  | 			SQLStore:         dbtest.NewFakeDB(), | 
					
						
							| 
									
										
										
										
											2019-05-23 20:54:47 +08:00
										 |  |  | 			AuthTokenService: fakeAuthTokenService, | 
					
						
							| 
									
										
										
										
											2022-02-05 02:45:42 +08:00
										 |  |  | 			authInfoService:  authInfoService, | 
					
						
							| 
									
										
										
										
											2022-08-16 20:24:57 +08:00
										 |  |  | 			userService:      usertest.NewUserServiceFake(), | 
					
						
							| 
									
										
										
										
											2019-05-23 20:54:47 +08:00
										 |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-11-13 16:52:38 +08:00
										 |  |  | 		sc := setupScenarioContext(t, url) | 
					
						
							| 
									
										
										
										
											2022-02-05 02:45:42 +08:00
										 |  |  | 		sc.sqlStore = hs.SQLStore | 
					
						
							|  |  |  | 		sc.authInfoService = authInfoService | 
					
						
							| 
									
										
										
										
											2022-08-16 20:24:57 +08:00
										 |  |  | 		sc.userService = hs.userService | 
					
						
							| 
									
										
										
										
											2023-01-27 15:50:36 +08:00
										 |  |  | 		sc.defaultHandler = routing.Wrap(func(c *contextmodel.ReqContext) response.Response { | 
					
						
							| 
									
										
										
										
											2019-05-21 19:52:49 +08:00
										 |  |  | 			sc.context = c | 
					
						
							| 
									
										
										
										
											2022-08-11 19:28:55 +08:00
										 |  |  | 			sc.context.UserID = testUserID | 
					
						
							| 
									
										
										
										
											2019-05-21 19:52:49 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 			if action == "enable" { | 
					
						
							| 
									
										
										
										
											2022-02-05 02:45:42 +08:00
										 |  |  | 				return hs.AdminEnableUser(c) | 
					
						
							| 
									
										
										
										
											2019-05-21 19:52:49 +08:00
										 |  |  | 			} | 
					
						
							| 
									
										
										
										
											2019-05-23 20:54:47 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 			return hs.AdminDisableUser(c) | 
					
						
							| 
									
										
										
										
											2019-05-21 19:52:49 +08:00
										 |  |  | 		}) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		sc.m.Post(routePattern, sc.defaultHandler) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		fn(sc) | 
					
						
							|  |  |  | 	}) | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2020-01-10 18:43:44 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-11-13 16:52:38 +08:00
										 |  |  | func adminDeleteUserScenario(t *testing.T, desc string, url string, routePattern string, fn scenarioFunc) { | 
					
						
							| 
									
										
										
										
											2022-02-05 02:45:42 +08:00
										 |  |  | 	hs := HTTPServer{ | 
					
						
							| 
									
										
										
										
											2023-01-18 23:01:25 +08:00
										 |  |  | 		SQLStore:    dbtest.NewFakeDB(), | 
					
						
							| 
									
										
										
										
											2022-08-02 22:58:05 +08:00
										 |  |  | 		userService: usertest.NewUserServiceFake(), | 
					
						
							| 
									
										
										
										
											2022-02-05 02:45:42 +08:00
										 |  |  | 	} | 
					
						
							| 
									
										
										
										
											2020-11-13 16:52:38 +08:00
										 |  |  | 	t.Run(fmt.Sprintf("%s %s", desc, url), func(t *testing.T) { | 
					
						
							|  |  |  | 		sc := setupScenarioContext(t, url) | 
					
						
							| 
									
										
										
										
											2022-02-05 02:45:42 +08:00
										 |  |  | 		sc.sqlStore = hs.SQLStore | 
					
						
							| 
									
										
										
										
											2022-04-05 02:36:15 +08:00
										 |  |  | 		sc.authInfoService = &logintest.AuthInfoServiceFake{} | 
					
						
							| 
									
										
										
										
											2023-01-27 15:50:36 +08:00
										 |  |  | 		sc.defaultHandler = routing.Wrap(func(c *contextmodel.ReqContext) response.Response { | 
					
						
							| 
									
										
										
										
											2020-01-10 18:43:44 +08:00
										 |  |  | 			sc.context = c | 
					
						
							| 
									
										
										
										
											2022-08-11 19:28:55 +08:00
										 |  |  | 			sc.context.UserID = testUserID | 
					
						
							| 
									
										
										
										
											2020-01-10 18:43:44 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-02-05 02:45:42 +08:00
										 |  |  | 			return hs.AdminDeleteUser(c) | 
					
						
							| 
									
										
										
										
											2020-01-10 18:43:44 +08:00
										 |  |  | 		}) | 
					
						
							| 
									
										
										
										
											2022-08-02 22:58:05 +08:00
										 |  |  | 		sc.userService = hs.userService | 
					
						
							| 
									
										
										
										
											2020-01-10 18:43:44 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 		sc.m.Delete(routePattern, sc.defaultHandler) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		fn(sc) | 
					
						
							|  |  |  | 	}) | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2020-04-15 17:11:45 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-11-29 17:20:44 +08:00
										 |  |  | func adminCreateUserScenario(t *testing.T, desc string, url string, routePattern string, cmd dtos.AdminCreateUserForm, svc *usertest.FakeUserService, fn scenarioFunc) { | 
					
						
							| 
									
										
										
										
											2020-11-13 16:52:38 +08:00
										 |  |  | 	t.Run(fmt.Sprintf("%s %s", desc, url), func(t *testing.T) { | 
					
						
							| 
									
										
										
										
											2021-03-19 00:16:56 +08:00
										 |  |  | 		hs := HTTPServer{ | 
					
						
							| 
									
										
										
										
											2022-11-29 17:20:44 +08:00
										 |  |  | 			userService: svc, | 
					
						
							| 
									
										
										
										
											2021-03-19 00:16:56 +08:00
										 |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-11-13 16:52:38 +08:00
										 |  |  | 		sc := setupScenarioContext(t, url) | 
					
						
							| 
									
										
										
										
											2023-01-27 15:50:36 +08:00
										 |  |  | 		sc.defaultHandler = routing.Wrap(func(c *contextmodel.ReqContext) response.Response { | 
					
						
							| 
									
										
										
										
											2021-11-29 17:18:01 +08:00
										 |  |  | 			c.Req.Body = mockRequestBody(cmd) | 
					
						
							| 
									
										
										
										
											2022-02-09 20:44:38 +08:00
										 |  |  | 			c.Req.Header.Add("Content-Type", "application/json") | 
					
						
							| 
									
										
										
										
											2020-04-15 17:11:45 +08:00
										 |  |  | 			sc.context = c | 
					
						
							| 
									
										
										
										
											2022-08-11 19:28:55 +08:00
										 |  |  | 			sc.context.UserID = testUserID | 
					
						
							| 
									
										
										
										
											2020-04-15 17:11:45 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-11-29 17:18:01 +08:00
										 |  |  | 			return hs.AdminCreateUser(c) | 
					
						
							| 
									
										
										
										
											2020-04-15 17:11:45 +08:00
										 |  |  | 		}) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		sc.m.Post(routePattern, sc.defaultHandler) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		fn(sc) | 
					
						
							|  |  |  | 	}) | 
					
						
							|  |  |  | } |