| 
									
										
										
										
											2014-12-19 16:43:16 +08:00
										 |  |  | package sqlstore | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | import ( | 
					
						
							|  |  |  | 	"testing" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	. "github.com/smartystreets/goconvey/convey" | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-02-05 17:37:13 +08:00
										 |  |  | 	m "github.com/grafana/grafana/pkg/models" | 
					
						
							|  |  |  | 	"github.com/grafana/grafana/pkg/setting" | 
					
						
							| 
									
										
										
										
											2014-12-19 16:43:16 +08:00
										 |  |  | ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func TestAccountDataAccess(t *testing.T) { | 
					
						
							|  |  |  | 	Convey("Testing Account DB Access", t, func() { | 
					
						
							|  |  |  | 		InitTestDB(t) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											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 | 
					
						
							|  |  |  | 			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() { | 
					
						
							| 
									
										
										
										
											2015-01-27 22:14:53 +08:00
										 |  |  | 				ac1cmd := m.CreateUserCommand{Login: "ac1", Email: "ac1@test.com", Name: "ac1 name"} | 
					
						
							|  |  |  | 				ac2cmd := m.CreateUserCommand{Login: "ac2", Email: "ac2@test.com", Name: "ac2 name"} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 				err := CreateUser(&ac1cmd) | 
					
						
							|  |  |  | 				So(err, ShouldBeNil) | 
					
						
							|  |  |  | 				err = CreateUser(&ac2cmd) | 
					
						
							|  |  |  | 				So(err, ShouldBeNil) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-02-24 03:48:43 +08:00
										 |  |  | 				q1 := m.GetUserOrgListQuery{UserId: ac1cmd.Result.Id} | 
					
						
							|  |  |  | 				q2 := m.GetUserOrgListQuery{UserId: ac2cmd.Result.Id} | 
					
						
							|  |  |  | 				GetUserOrgList(&q1) | 
					
						
							|  |  |  | 				GetUserOrgList(&q2) | 
					
						
							| 
									
										
										
										
											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
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-01-20 01:01:04 +08:00
										 |  |  | 			ac1cmd := m.CreateUserCommand{Login: "ac1", Email: "ac1@test.com", Name: "ac1 name"} | 
					
						
							|  |  |  | 			ac2cmd := m.CreateUserCommand{Login: "ac2", Email: "ac2@test.com", Name: "ac2 name", IsAdmin: true} | 
					
						
							| 
									
										
										
										
											2014-12-19 18:53:27 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-01-20 01:01:04 +08:00
										 |  |  | 			err := CreateUser(&ac1cmd) | 
					
						
							|  |  |  | 			err = CreateUser(&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() { | 
					
						
							| 
									
										
										
										
											2015-02-28 21:30:08 +08:00
										 |  |  | 				query := m.GetUserProfileQuery{UserId: ac1.Id} | 
					
						
							|  |  |  | 				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() { | 
					
						
							|  |  |  | 				query := m.SearchUsersQuery{Query: ""} | 
					
						
							|  |  |  | 				err := SearchUsers(&query) | 
					
						
							| 
									
										
										
										
											2015-01-16 14:45:37 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 				So(err, ShouldBeNil) | 
					
						
							|  |  |  | 				So(query.Result[0].Email, ShouldEqual, "ac1@test.com") | 
					
						
							|  |  |  | 				So(query.Result[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() { | 
					
						
							|  |  |  | 				cmd := m.AddOrgUserCommand{ | 
					
						
							|  |  |  | 					OrgId:  ac1.OrgId, | 
					
						
							|  |  |  | 					UserId: ac2.Id, | 
					
						
							|  |  |  | 					Role:   m.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() { | 
					
						
							|  |  |  | 					updateCmd := m.UpdateOrgUserCommand{OrgId: ac1.OrgId, UserId: ac2.Id, Role: m.ROLE_ADMIN} | 
					
						
							|  |  |  | 					err = UpdateOrgUser(&updateCmd) | 
					
						
							|  |  |  | 					So(err, ShouldBeNil) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 					orgUsersQuery := m.GetOrgUsersQuery{OrgId: ac1.OrgId} | 
					
						
							|  |  |  | 					err = GetOrgUsers(&orgUsersQuery) | 
					
						
							|  |  |  | 					So(err, ShouldBeNil) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 					So(orgUsersQuery.Result[1].Role, ShouldEqual, m.ROLE_ADMIN) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 				}) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-01-16 21:32:18 +08:00
										 |  |  | 				Convey("Can get logged in user projection", func() { | 
					
						
							| 
									
										
										
										
											2015-01-20 01:01:04 +08:00
										 |  |  | 					query := m.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() { | 
					
						
							|  |  |  | 					query := m.GetUserOrgListQuery{UserId: ac2.Id} | 
					
						
							|  |  |  | 					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() { | 
					
						
							|  |  |  | 					query := m.GetOrgUsersQuery{OrgId: ac1.OrgId} | 
					
						
							|  |  |  | 					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") | 
					
						
							|  |  |  | 				}) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-02-24 03:48:43 +08:00
										 |  |  | 				Convey("Can set using org", func() { | 
					
						
							|  |  |  | 					cmd := m.SetUsingOrgCommand{UserId: ac2.Id, OrgId: ac1.Id} | 
					
						
							|  |  |  | 					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() { | 
					
						
							| 
									
										
										
										
											2015-01-20 01:01:04 +08:00
										 |  |  | 						query := m.GetSignedInUserQuery{UserId: ac2.Id} | 
					
						
							| 
									
										
										
										
											2015-01-16 21:32:18 +08:00
										 |  |  | 						err := GetSignedInUser(&query) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 						So(err, ShouldBeNil) | 
					
						
							| 
									
										
										
										
											2015-02-24 03:48:43 +08:00
										 |  |  | 						So(query.Result.OrgId, ShouldEqual, ac1.Id) | 
					
						
							| 
									
										
										
										
											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
										 |  |  | 					}) | 
					
						
							| 
									
										
										
										
											2014-12-19 20:12:47 +08:00
										 |  |  | 				}) | 
					
						
							| 
									
										
										
										
											2015-01-20 22:48:19 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-05-19 17:47:14 +08:00
										 |  |  | 				Convey("Cannot delete last admin org user", func() { | 
					
						
							| 
									
										
										
										
											2015-02-24 03:48:43 +08:00
										 |  |  | 					cmd := m.RemoveOrgUserCommand{OrgId: ac1.OrgId, UserId: ac1.Id} | 
					
						
							|  |  |  | 					err := RemoveOrgUser(&cmd) | 
					
						
							|  |  |  | 					So(err, ShouldEqual, m.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() { | 
					
						
							|  |  |  | 					cmd := m.UpdateOrgUserCommand{OrgId: ac1.OrgId, UserId: ac1.Id, Role: m.ROLE_VIEWER} | 
					
						
							|  |  |  | 					err := UpdateOrgUser(&cmd) | 
					
						
							|  |  |  | 					So(err, ShouldEqual, m.ErrLastOrgAdmin) | 
					
						
							|  |  |  | 				}) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-12-19 17:45:22 +08:00
										 |  |  | 			}) | 
					
						
							| 
									
										
										
										
											2014-12-19 16:43:16 +08:00
										 |  |  | 		}) | 
					
						
							|  |  |  | 	}) | 
					
						
							|  |  |  | } |