| 
									
										
										
										
											2014-12-19 16:43:16 +08:00
										 |  |  | package sqlstore | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | import ( | 
					
						
							| 
									
										
										
										
											2018-06-16 03:23:57 +08:00
										 |  |  | 	"context" | 
					
						
							| 
									
										
										
										
											2019-09-04 01:34:44 +08:00
										 |  |  | 	"fmt" | 
					
						
							| 
									
										
										
										
											2014-12-19 16:43:16 +08:00
										 |  |  | 	"testing" | 
					
						
							| 
									
										
										
										
											2018-03-16 07:08:25 +08:00
										 |  |  | 	"time" | 
					
						
							| 
									
										
										
										
											2014-12-19 16:43:16 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-02-29 20:35:15 +08:00
										 |  |  | 	"github.com/grafana/grafana/pkg/models" | 
					
						
							| 
									
										
										
										
											2015-02-05 17:37:13 +08:00
										 |  |  | 	"github.com/grafana/grafana/pkg/setting" | 
					
						
							| 
									
										
										
										
											2019-09-04 01:34:44 +08:00
										 |  |  | 	. "github.com/smartystreets/goconvey/convey" | 
					
						
							| 
									
										
										
										
											2014-12-19 16:43:16 +08:00
										 |  |  | ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func TestAccountDataAccess(t *testing.T) { | 
					
						
							|  |  |  | 	Convey("Testing Account DB Access", t, func() { | 
					
						
							|  |  |  | 		InitTestDB(t) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-09-04 01:34:44 +08:00
										 |  |  | 		Convey("Given we have organizations, we can query them by IDs", func() { | 
					
						
							|  |  |  | 			var err error | 
					
						
							| 
									
										
										
										
											2020-02-29 20:35:15 +08:00
										 |  |  | 			var cmd *models.CreateOrgCommand | 
					
						
							| 
									
										
										
										
											2019-09-04 01:34:44 +08:00
										 |  |  | 			ids := []int64{} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 			for i := 1; i < 4; i++ { | 
					
						
							| 
									
										
										
										
											2020-02-29 20:35:15 +08:00
										 |  |  | 				cmd = &models.CreateOrgCommand{Name: fmt.Sprint("Org #", i)} | 
					
						
							| 
									
										
										
										
											2019-09-04 01:34:44 +08:00
										 |  |  | 				err = CreateOrg(cmd) | 
					
						
							|  |  |  | 				So(err, ShouldBeNil) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 				ids = append(ids, cmd.Result.Id) | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-02-29 20:35:15 +08:00
										 |  |  | 			query := &models.SearchOrgsQuery{Ids: ids} | 
					
						
							| 
									
										
										
										
											2019-09-04 01:34:44 +08:00
										 |  |  | 			err = SearchOrgs(query) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 			So(err, ShouldBeNil) | 
					
						
							|  |  |  | 			So(len(query.Result), ShouldEqual, 3) | 
					
						
							|  |  |  | 		}) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-08-12 15:59:07 +08:00
										 |  |  | 		Convey("Given we have organizations, we can limit and paginate search", func() { | 
					
						
							|  |  |  | 			for i := 1; i < 4; i++ { | 
					
						
							|  |  |  | 				cmd := &models.CreateOrgCommand{Name: fmt.Sprint("Org #", i)} | 
					
						
							|  |  |  | 				err := CreateOrg(cmd) | 
					
						
							|  |  |  | 				So(err, ShouldBeNil) | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 			Convey("Should be able to search with defaults", func() { | 
					
						
							|  |  |  | 				query := &models.SearchOrgsQuery{} | 
					
						
							|  |  |  | 				err := SearchOrgs(query) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 				So(err, ShouldBeNil) | 
					
						
							|  |  |  | 				So(len(query.Result), ShouldEqual, 3) | 
					
						
							|  |  |  | 			}) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 			Convey("Should be able to limit search", func() { | 
					
						
							|  |  |  | 				query := &models.SearchOrgsQuery{Limit: 1} | 
					
						
							|  |  |  | 				err := SearchOrgs(query) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 				So(err, ShouldBeNil) | 
					
						
							|  |  |  | 				So(len(query.Result), ShouldEqual, 1) | 
					
						
							|  |  |  | 			}) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 			Convey("Should be able to limit and paginate search", func() { | 
					
						
							|  |  |  | 				query := &models.SearchOrgsQuery{Limit: 2, Page: 1} | 
					
						
							|  |  |  | 				err := SearchOrgs(query) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 				So(err, ShouldBeNil) | 
					
						
							|  |  |  | 				So(len(query.Result), ShouldEqual, 1) | 
					
						
							|  |  |  | 			}) | 
					
						
							|  |  |  | 		}) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-02-24 03:48:43 +08:00
										 |  |  | 		Convey("Given single org mode", func() { | 
					
						
							| 
									
										
										
										
											2015-03-11 23:19:29 +08:00
										 |  |  | 			setting.AutoAssignOrg = true | 
					
						
							| 
									
										
										
										
											2018-07-14 03:14:40 +08:00
										 |  |  | 			setting.AutoAssignOrgId = 1 | 
					
						
							| 
									
										
										
										
											2015-03-11 23:19:29 +08:00
										 |  |  | 			setting.AutoAssignOrgRole = "Viewer" | 
					
						
							| 
									
										
										
										
											2015-01-27 22:14:53 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-02-24 03:07:49 +08:00
										 |  |  | 			Convey("Users should be added to default organization", func() { | 
					
						
							| 
									
										
										
										
											2020-02-29 20:35:15 +08:00
										 |  |  | 				ac1cmd := models.CreateUserCommand{Login: "ac1", Email: "ac1@test.com", Name: "ac1 name"} | 
					
						
							|  |  |  | 				ac2cmd := models.CreateUserCommand{Login: "ac2", Email: "ac2@test.com", Name: "ac2 name"} | 
					
						
							| 
									
										
										
										
											2015-01-27 22:14:53 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-06-16 03:23:57 +08:00
										 |  |  | 				err := CreateUser(context.Background(), &ac1cmd) | 
					
						
							| 
									
										
										
										
											2015-01-27 22:14:53 +08:00
										 |  |  | 				So(err, ShouldBeNil) | 
					
						
							| 
									
										
										
										
											2018-06-16 03:23:57 +08:00
										 |  |  | 				err = CreateUser(context.Background(), &ac2cmd) | 
					
						
							| 
									
										
										
										
											2015-01-27 22:14:53 +08:00
										 |  |  | 				So(err, ShouldBeNil) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-02-29 20:35:15 +08:00
										 |  |  | 				q1 := models.GetUserOrgListQuery{UserId: ac1cmd.Result.Id} | 
					
						
							|  |  |  | 				q2 := models.GetUserOrgListQuery{UserId: ac2cmd.Result.Id} | 
					
						
							| 
									
										
										
										
											2019-10-22 20:08:18 +08:00
										 |  |  | 				err = GetUserOrgList(&q1) | 
					
						
							|  |  |  | 				So(err, ShouldBeNil) | 
					
						
							|  |  |  | 				err = GetUserOrgList(&q2) | 
					
						
							|  |  |  | 				So(err, ShouldBeNil) | 
					
						
							| 
									
										
										
										
											2015-01-27 22:14:53 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-02-24 03:07:49 +08:00
										 |  |  | 				So(q1.Result[0].OrgId, ShouldEqual, q2.Result[0].OrgId) | 
					
						
							| 
									
										
										
										
											2015-01-27 22:14:53 +08:00
										 |  |  | 				So(q1.Result[0].Role, ShouldEqual, "Viewer") | 
					
						
							|  |  |  | 			}) | 
					
						
							|  |  |  | 		}) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-01-20 01:01:04 +08:00
										 |  |  | 		Convey("Given two saved users", func() { | 
					
						
							| 
									
										
										
										
											2015-03-11 23:19:29 +08:00
										 |  |  | 			setting.AutoAssignOrg = false | 
					
						
							| 
									
										
										
										
											2015-01-27 22:14:53 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-02-29 20:35:15 +08:00
										 |  |  | 			ac1cmd := models.CreateUserCommand{Login: "ac1", Email: "ac1@test.com", Name: "ac1 name"} | 
					
						
							|  |  |  | 			ac2cmd := models.CreateUserCommand{Login: "ac2", Email: "ac2@test.com", Name: "ac2 name", IsAdmin: true} | 
					
						
							| 
									
										
										
										
											2014-12-19 18:53:27 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-06-16 03:23:57 +08:00
										 |  |  | 			err := CreateUser(context.Background(), &ac1cmd) | 
					
						
							|  |  |  | 			err = CreateUser(context.Background(), &ac2cmd) | 
					
						
							| 
									
										
										
										
											2014-12-19 17:45:22 +08:00
										 |  |  | 			So(err, ShouldBeNil) | 
					
						
							| 
									
										
										
										
											2014-12-19 16:43:16 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-12-19 18:53:27 +08:00
										 |  |  | 			ac1 := ac1cmd.Result | 
					
						
							|  |  |  | 			ac2 := ac2cmd.Result | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-01-20 01:01:04 +08:00
										 |  |  | 			Convey("Should be able to read user info projection", func() { | 
					
						
							| 
									
										
										
										
											2020-02-29 20:35:15 +08:00
										 |  |  | 				query := models.GetUserProfileQuery{UserId: ac1.Id} | 
					
						
							| 
									
										
										
										
											2015-02-28 21:30:08 +08:00
										 |  |  | 				err = GetUserProfile(&query) | 
					
						
							| 
									
										
										
										
											2014-12-19 16:43:16 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-12-19 17:45:22 +08:00
										 |  |  | 				So(err, ShouldBeNil) | 
					
						
							| 
									
										
										
										
											2014-12-19 18:53:27 +08:00
										 |  |  | 				So(query.Result.Email, ShouldEqual, "ac1@test.com") | 
					
						
							| 
									
										
										
										
											2015-01-16 14:45:37 +08:00
										 |  |  | 				So(query.Result.Login, ShouldEqual, "ac1") | 
					
						
							|  |  |  | 			}) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-01-20 01:01:04 +08:00
										 |  |  | 			Convey("Can search users", func() { | 
					
						
							| 
									
										
										
										
											2020-02-29 20:35:15 +08:00
										 |  |  | 				query := models.SearchUsersQuery{Query: ""} | 
					
						
							| 
									
										
										
										
											2015-01-20 01:01:04 +08:00
										 |  |  | 				err := SearchUsers(&query) | 
					
						
							| 
									
										
										
										
											2015-01-16 14:45:37 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 				So(err, ShouldBeNil) | 
					
						
							| 
									
										
										
										
											2017-02-08 21:20:07 +08:00
										 |  |  | 				So(query.Result.Users[0].Email, ShouldEqual, "ac1@test.com") | 
					
						
							|  |  |  | 				So(query.Result.Users[1].Email, ShouldEqual, "ac2@test.com") | 
					
						
							| 
									
										
										
										
											2014-12-19 17:45:22 +08:00
										 |  |  | 			}) | 
					
						
							| 
									
										
										
										
											2014-12-19 16:43:16 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-02-24 03:48:43 +08:00
										 |  |  | 			Convey("Given an added org user", func() { | 
					
						
							| 
									
										
										
										
											2020-02-29 20:35:15 +08:00
										 |  |  | 				cmd := models.AddOrgUserCommand{ | 
					
						
							| 
									
										
										
										
											2015-02-24 03:48:43 +08:00
										 |  |  | 					OrgId:  ac1.OrgId, | 
					
						
							|  |  |  | 					UserId: ac2.Id, | 
					
						
							| 
									
										
										
										
											2020-02-29 20:35:15 +08:00
										 |  |  | 					Role:   models.ROLE_VIEWER, | 
					
						
							| 
									
										
										
										
											2014-12-19 17:45:22 +08:00
										 |  |  | 				} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-02-24 03:48:43 +08:00
										 |  |  | 				err := AddOrgUser(&cmd) | 
					
						
							| 
									
										
										
										
											2015-01-16 21:32:18 +08:00
										 |  |  | 				Convey("Should have been saved without error", func() { | 
					
						
							| 
									
										
										
										
											2014-12-19 17:45:22 +08:00
										 |  |  | 					So(err, ShouldBeNil) | 
					
						
							|  |  |  | 				}) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-05-01 15:48:07 +08:00
										 |  |  | 				Convey("Can update org user role", func() { | 
					
						
							| 
									
										
										
										
											2020-02-29 20:35:15 +08:00
										 |  |  | 					updateCmd := models.UpdateOrgUserCommand{OrgId: ac1.OrgId, UserId: ac2.Id, Role: models.ROLE_ADMIN} | 
					
						
							| 
									
										
										
										
											2015-05-01 15:48:07 +08:00
										 |  |  | 					err = UpdateOrgUser(&updateCmd) | 
					
						
							|  |  |  | 					So(err, ShouldBeNil) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-02-29 20:35:15 +08:00
										 |  |  | 					orgUsersQuery := models.GetOrgUsersQuery{OrgId: ac1.OrgId} | 
					
						
							| 
									
										
										
										
											2015-05-01 15:48:07 +08:00
										 |  |  | 					err = GetOrgUsers(&orgUsersQuery) | 
					
						
							|  |  |  | 					So(err, ShouldBeNil) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-02-29 20:35:15 +08:00
										 |  |  | 					So(orgUsersQuery.Result[1].Role, ShouldEqual, models.ROLE_ADMIN) | 
					
						
							| 
									
										
										
										
											2015-05-01 15:48:07 +08:00
										 |  |  | 				}) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-01-16 21:32:18 +08:00
										 |  |  | 				Convey("Can get logged in user projection", func() { | 
					
						
							| 
									
										
										
										
											2020-02-29 20:35:15 +08:00
										 |  |  | 					query := models.GetSignedInUserQuery{UserId: ac2.Id} | 
					
						
							| 
									
										
										
										
											2015-01-16 21:32:18 +08:00
										 |  |  | 					err := GetSignedInUser(&query) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 					So(err, ShouldBeNil) | 
					
						
							| 
									
										
										
										
											2015-01-20 01:01:04 +08:00
										 |  |  | 					So(query.Result.Email, ShouldEqual, "ac2@test.com") | 
					
						
							| 
									
										
										
										
											2015-02-24 03:48:43 +08:00
										 |  |  | 					So(query.Result.OrgId, ShouldEqual, ac2.OrgId) | 
					
						
							| 
									
										
										
										
											2015-01-20 01:01:04 +08:00
										 |  |  | 					So(query.Result.Name, ShouldEqual, "ac2 name") | 
					
						
							|  |  |  | 					So(query.Result.Login, ShouldEqual, "ac2") | 
					
						
							| 
									
										
										
										
											2015-02-24 03:48:43 +08:00
										 |  |  | 					So(query.Result.OrgRole, ShouldEqual, "Admin") | 
					
						
							|  |  |  | 					So(query.Result.OrgName, ShouldEqual, "ac2@test.com") | 
					
						
							| 
									
										
										
										
											2015-01-16 21:32:18 +08:00
										 |  |  | 					So(query.Result.IsGrafanaAdmin, ShouldBeTrue) | 
					
						
							|  |  |  | 				}) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-02-24 03:48:43 +08:00
										 |  |  | 				Convey("Can get user organizations", func() { | 
					
						
							| 
									
										
										
										
											2020-02-29 20:35:15 +08:00
										 |  |  | 					query := models.GetUserOrgListQuery{UserId: ac2.Id} | 
					
						
							| 
									
										
										
										
											2015-02-24 03:48:43 +08:00
										 |  |  | 					err := GetUserOrgList(&query) | 
					
						
							| 
									
										
										
										
											2014-12-19 18:08:49 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 					So(err, ShouldBeNil) | 
					
						
							| 
									
										
										
										
											2015-01-20 01:01:04 +08:00
										 |  |  | 					So(len(query.Result), ShouldEqual, 2) | 
					
						
							| 
									
										
										
										
											2014-12-19 18:08:49 +08:00
										 |  |  | 				}) | 
					
						
							| 
									
										
										
										
											2014-12-19 20:12:47 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-02-24 03:48:43 +08:00
										 |  |  | 				Convey("Can get organization users", func() { | 
					
						
							| 
									
										
										
										
											2020-02-29 20:35:15 +08:00
										 |  |  | 					query := models.GetOrgUsersQuery{OrgId: ac1.OrgId} | 
					
						
							| 
									
										
										
										
											2015-02-24 03:48:43 +08:00
										 |  |  | 					err := GetOrgUsers(&query) | 
					
						
							| 
									
										
										
										
											2015-01-20 22:23:14 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 					So(err, ShouldBeNil) | 
					
						
							|  |  |  | 					So(len(query.Result), ShouldEqual, 2) | 
					
						
							|  |  |  | 					So(query.Result[0].Role, ShouldEqual, "Admin") | 
					
						
							|  |  |  | 				}) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-09 17:42:37 +08:00
										 |  |  | 				Convey("Can get organization users with query", func() { | 
					
						
							| 
									
										
										
										
											2020-02-29 20:35:15 +08:00
										 |  |  | 					query := models.GetOrgUsersQuery{ | 
					
						
							| 
									
										
										
										
											2018-02-09 17:42:37 +08:00
										 |  |  | 						OrgId: ac1.OrgId, | 
					
						
							|  |  |  | 						Query: "ac1", | 
					
						
							|  |  |  | 					} | 
					
						
							|  |  |  | 					err := GetOrgUsers(&query) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 					So(err, ShouldBeNil) | 
					
						
							|  |  |  | 					So(len(query.Result), ShouldEqual, 1) | 
					
						
							|  |  |  | 					So(query.Result[0].Email, ShouldEqual, ac1.Email) | 
					
						
							|  |  |  | 				}) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 				Convey("Can get organization users with query and limit", func() { | 
					
						
							| 
									
										
										
										
											2020-02-29 20:35:15 +08:00
										 |  |  | 					query := models.GetOrgUsersQuery{ | 
					
						
							| 
									
										
										
										
											2018-02-09 17:42:37 +08:00
										 |  |  | 						OrgId: ac1.OrgId, | 
					
						
							|  |  |  | 						Query: "ac", | 
					
						
							|  |  |  | 						Limit: 1, | 
					
						
							|  |  |  | 					} | 
					
						
							|  |  |  | 					err := GetOrgUsers(&query) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 					So(err, ShouldBeNil) | 
					
						
							|  |  |  | 					So(len(query.Result), ShouldEqual, 1) | 
					
						
							|  |  |  | 					So(query.Result[0].Email, ShouldEqual, ac1.Email) | 
					
						
							|  |  |  | 				}) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-02-24 03:48:43 +08:00
										 |  |  | 				Convey("Can set using org", func() { | 
					
						
							| 
									
										
										
										
											2020-02-29 20:35:15 +08:00
										 |  |  | 					cmd := models.SetUsingOrgCommand{UserId: ac2.Id, OrgId: ac1.OrgId} | 
					
						
							| 
									
										
										
										
											2015-02-24 03:48:43 +08:00
										 |  |  | 					err := SetUsingOrg(&cmd) | 
					
						
							| 
									
										
										
										
											2014-12-19 20:12:47 +08:00
										 |  |  | 					So(err, ShouldBeNil) | 
					
						
							| 
									
										
										
										
											2015-01-16 21:32:18 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-02-24 03:48:43 +08:00
										 |  |  | 					Convey("SignedInUserQuery with a different org", func() { | 
					
						
							| 
									
										
										
										
											2020-02-29 20:35:15 +08:00
										 |  |  | 						query := models.GetSignedInUserQuery{UserId: ac2.Id} | 
					
						
							| 
									
										
										
										
											2015-01-16 21:32:18 +08:00
										 |  |  | 						err := GetSignedInUser(&query) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 						So(err, ShouldBeNil) | 
					
						
							| 
									
										
										
										
											2018-06-14 00:01:50 +08:00
										 |  |  | 						So(query.Result.OrgId, ShouldEqual, ac1.OrgId) | 
					
						
							| 
									
										
										
										
											2015-01-20 01:01:04 +08:00
										 |  |  | 						So(query.Result.Email, ShouldEqual, "ac2@test.com") | 
					
						
							|  |  |  | 						So(query.Result.Name, ShouldEqual, "ac2 name") | 
					
						
							|  |  |  | 						So(query.Result.Login, ShouldEqual, "ac2") | 
					
						
							| 
									
										
										
										
											2015-02-24 03:48:43 +08:00
										 |  |  | 						So(query.Result.OrgName, ShouldEqual, "ac1@test.com") | 
					
						
							|  |  |  | 						So(query.Result.OrgRole, ShouldEqual, "Viewer") | 
					
						
							| 
									
										
										
										
											2015-01-16 21:32:18 +08:00
										 |  |  | 					}) | 
					
						
							| 
									
										
										
										
											2018-06-14 00:01:50 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 					Convey("Should set last org as current when removing user from current", func() { | 
					
						
							| 
									
										
										
										
											2020-02-29 20:35:15 +08:00
										 |  |  | 						remCmd := models.RemoveOrgUserCommand{OrgId: ac1.OrgId, UserId: ac2.Id} | 
					
						
							| 
									
										
										
										
											2018-06-14 00:01:50 +08:00
										 |  |  | 						err := RemoveOrgUser(&remCmd) | 
					
						
							|  |  |  | 						So(err, ShouldBeNil) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-02-29 20:35:15 +08:00
										 |  |  | 						query := models.GetSignedInUserQuery{UserId: ac2.Id} | 
					
						
							| 
									
										
										
										
											2018-06-14 00:01:50 +08:00
										 |  |  | 						err = GetSignedInUser(&query) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 						So(err, ShouldBeNil) | 
					
						
							|  |  |  | 						So(query.Result.OrgId, ShouldEqual, ac2.OrgId) | 
					
						
							|  |  |  | 					}) | 
					
						
							| 
									
										
										
										
											2014-12-19 20:12:47 +08:00
										 |  |  | 				}) | 
					
						
							| 
									
										
										
										
											2015-01-20 22:48:19 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-10-11 13:48:35 +08:00
										 |  |  | 				Convey("Removing user from org should delete user completely if in no other org", func() { | 
					
						
							|  |  |  | 					// make sure ac2 has no org
 | 
					
						
							| 
									
										
										
										
											2020-02-29 20:35:15 +08:00
										 |  |  | 					err := DeleteOrg(&models.DeleteOrgCommand{Id: ac2.OrgId}) | 
					
						
							| 
									
										
										
										
											2018-10-11 13:48:35 +08:00
										 |  |  | 					So(err, ShouldBeNil) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-12-05 06:29:34 +08:00
										 |  |  | 					// remove ac2 user from ac1 org
 | 
					
						
							| 
									
										
										
										
											2020-02-29 20:35:15 +08:00
										 |  |  | 					remCmd := models.RemoveOrgUserCommand{OrgId: ac1.OrgId, UserId: ac2.Id, ShouldDeleteOrphanedUser: true} | 
					
						
							| 
									
										
										
										
											2018-10-11 13:48:35 +08:00
										 |  |  | 					err = RemoveOrgUser(&remCmd) | 
					
						
							|  |  |  | 					So(err, ShouldBeNil) | 
					
						
							| 
									
										
										
										
											2018-10-12 03:20:53 +08:00
										 |  |  | 					So(remCmd.UserWasDeleted, ShouldBeTrue) | 
					
						
							| 
									
										
										
										
											2018-10-11 13:48:35 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-02-29 20:35:15 +08:00
										 |  |  | 					err = GetSignedInUser(&models.GetSignedInUserQuery{UserId: ac2.Id}) | 
					
						
							|  |  |  | 					So(err, ShouldEqual, models.ErrUserNotFound) | 
					
						
							| 
									
										
										
										
											2018-10-11 13:48:35 +08:00
										 |  |  | 				}) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-05-19 17:47:14 +08:00
										 |  |  | 				Convey("Cannot delete last admin org user", func() { | 
					
						
							| 
									
										
										
										
											2020-02-29 20:35:15 +08:00
										 |  |  | 					cmd := models.RemoveOrgUserCommand{OrgId: ac1.OrgId, UserId: ac1.Id} | 
					
						
							| 
									
										
										
										
											2015-02-24 03:48:43 +08:00
										 |  |  | 					err := RemoveOrgUser(&cmd) | 
					
						
							| 
									
										
										
										
											2020-02-29 20:35:15 +08:00
										 |  |  | 					So(err, ShouldEqual, models.ErrLastOrgAdmin) | 
					
						
							| 
									
										
										
										
											2015-01-20 22:48:19 +08:00
										 |  |  | 				}) | 
					
						
							| 
									
										
										
										
											2015-05-19 17:47:14 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 				Convey("Cannot update role so no one is admin user", func() { | 
					
						
							| 
									
										
										
										
											2020-02-29 20:35:15 +08:00
										 |  |  | 					cmd := models.UpdateOrgUserCommand{OrgId: ac1.OrgId, UserId: ac1.Id, Role: models.ROLE_VIEWER} | 
					
						
							| 
									
										
										
										
											2015-05-19 17:47:14 +08:00
										 |  |  | 					err := UpdateOrgUser(&cmd) | 
					
						
							| 
									
										
										
										
											2020-02-29 20:35:15 +08:00
										 |  |  | 					So(err, ShouldEqual, models.ErrLastOrgAdmin) | 
					
						
							| 
									
										
										
										
											2015-05-19 17:47:14 +08:00
										 |  |  | 				}) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-06-16 02:19:54 +08:00
										 |  |  | 				Convey("Given an org user with dashboard permissions", func() { | 
					
						
							| 
									
										
										
										
											2020-02-29 20:35:15 +08:00
										 |  |  | 					ac3cmd := models.CreateUserCommand{Login: "ac3", Email: "ac3@test.com", Name: "ac3 name", IsAdmin: false} | 
					
						
							| 
									
										
										
										
											2018-06-16 03:23:57 +08:00
										 |  |  | 					err := CreateUser(context.Background(), &ac3cmd) | 
					
						
							| 
									
										
										
										
											2017-06-16 02:19:54 +08:00
										 |  |  | 					So(err, ShouldBeNil) | 
					
						
							|  |  |  | 					ac3 := ac3cmd.Result | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-02-29 20:35:15 +08:00
										 |  |  | 					orgUserCmd := models.AddOrgUserCommand{ | 
					
						
							| 
									
										
										
										
											2017-06-16 02:19:54 +08:00
										 |  |  | 						OrgId:  ac1.OrgId, | 
					
						
							|  |  |  | 						UserId: ac3.Id, | 
					
						
							| 
									
										
										
										
											2020-02-29 20:35:15 +08:00
										 |  |  | 						Role:   models.ROLE_VIEWER, | 
					
						
							| 
									
										
										
										
											2017-06-16 02:19:54 +08:00
										 |  |  | 					} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 					err = AddOrgUser(&orgUserCmd) | 
					
						
							|  |  |  | 					So(err, ShouldBeNil) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-02-29 20:35:15 +08:00
										 |  |  | 					query := models.GetOrgUsersQuery{OrgId: ac1.OrgId} | 
					
						
							| 
									
										
										
										
											2017-06-16 02:19:54 +08:00
										 |  |  | 					err = GetOrgUsers(&query) | 
					
						
							|  |  |  | 					So(err, ShouldBeNil) | 
					
						
							|  |  |  | 					So(len(query.Result), ShouldEqual, 3) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-14 22:04:26 +08:00
										 |  |  | 					dash1 := insertTestDashboard("1 test dash", ac1.OrgId, 0, false, "prod", "webapp") | 
					
						
							|  |  |  | 					dash2 := insertTestDashboard("2 test dash", ac3.OrgId, 0, false, "prod", "webapp") | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-02-29 20:35:15 +08:00
										 |  |  | 					err = testHelperUpdateDashboardAcl(dash1.Id, models.DashboardAcl{DashboardId: dash1.Id, OrgId: ac1.OrgId, UserId: ac3.Id, Permission: models.PERMISSION_EDIT}) | 
					
						
							| 
									
										
										
										
											2017-06-16 02:19:54 +08:00
										 |  |  | 					So(err, ShouldBeNil) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-02-29 20:35:15 +08:00
										 |  |  | 					err = testHelperUpdateDashboardAcl(dash2.Id, models.DashboardAcl{DashboardId: dash2.Id, OrgId: ac3.OrgId, UserId: ac3.Id, Permission: models.PERMISSION_EDIT}) | 
					
						
							| 
									
										
										
										
											2017-06-16 02:19:54 +08:00
										 |  |  | 					So(err, ShouldBeNil) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 					Convey("When org user is deleted", func() { | 
					
						
							| 
									
										
										
										
											2020-02-29 20:35:15 +08:00
										 |  |  | 						cmdRemove := models.RemoveOrgUserCommand{OrgId: ac1.OrgId, UserId: ac3.Id} | 
					
						
							| 
									
										
										
										
											2017-06-16 02:19:54 +08:00
										 |  |  | 						err := RemoveOrgUser(&cmdRemove) | 
					
						
							|  |  |  | 						So(err, ShouldBeNil) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 						Convey("Should remove dependent permissions for deleted org user", func() { | 
					
						
							| 
									
										
										
										
											2020-02-29 20:35:15 +08:00
										 |  |  | 							permQuery := &models.GetDashboardAclInfoListQuery{DashboardId: 1, OrgId: ac1.OrgId} | 
					
						
							| 
									
										
										
										
											2017-06-20 05:30:54 +08:00
										 |  |  | 							err = GetDashboardAclInfoList(permQuery) | 
					
						
							| 
									
										
										
										
											2017-06-16 02:19:54 +08:00
										 |  |  | 							So(err, ShouldBeNil) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 							So(len(permQuery.Result), ShouldEqual, 0) | 
					
						
							|  |  |  | 						}) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 						Convey("Should not remove dashboard permissions for same user in another org", func() { | 
					
						
							| 
									
										
										
										
											2020-02-29 20:35:15 +08:00
										 |  |  | 							permQuery := &models.GetDashboardAclInfoListQuery{DashboardId: 2, OrgId: ac3.OrgId} | 
					
						
							| 
									
										
										
										
											2017-06-20 05:30:54 +08:00
										 |  |  | 							err = GetDashboardAclInfoList(permQuery) | 
					
						
							| 
									
										
										
										
											2017-06-16 02:19:54 +08:00
										 |  |  | 							So(err, ShouldBeNil) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-06-23 05:10:43 +08:00
										 |  |  | 							So(len(permQuery.Result), ShouldEqual, 1) | 
					
						
							| 
									
										
										
										
											2017-06-16 02:19:54 +08:00
										 |  |  | 							So(permQuery.Result[0].OrgId, ShouldEqual, ac3.OrgId) | 
					
						
							|  |  |  | 							So(permQuery.Result[0].UserId, ShouldEqual, ac3.Id) | 
					
						
							|  |  |  | 						}) | 
					
						
							|  |  |  | 					}) | 
					
						
							|  |  |  | 				}) | 
					
						
							| 
									
										
										
										
											2014-12-19 17:45:22 +08:00
										 |  |  | 			}) | 
					
						
							| 
									
										
										
										
											2014-12-19 16:43:16 +08:00
										 |  |  | 		}) | 
					
						
							|  |  |  | 	}) | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2018-02-14 22:04:26 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-02-29 20:35:15 +08:00
										 |  |  | func testHelperUpdateDashboardAcl(dashboardId int64, items ...models.DashboardAcl) error { | 
					
						
							|  |  |  | 	cmd := models.UpdateDashboardAclCommand{DashboardId: dashboardId} | 
					
						
							| 
									
										
										
										
											2020-06-26 14:46:08 +08:00
										 |  |  | 	for _, i := range items { | 
					
						
							|  |  |  | 		item := i | 
					
						
							| 
									
										
										
										
											2018-03-16 07:08:25 +08:00
										 |  |  | 		item.Created = time.Now() | 
					
						
							|  |  |  | 		item.Updated = time.Now() | 
					
						
							| 
									
										
										
										
											2018-02-14 22:04:26 +08:00
										 |  |  | 		cmd.Items = append(cmd.Items, &item) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	return UpdateDashboardAcl(&cmd) | 
					
						
							|  |  |  | } |