Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
N
nexpie-grafana-theme
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Registry
Registry
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Kornkitt Poolsup
nexpie-grafana-theme
Commits
eff687be
Unverified
Commit
eff687be
authored
Feb 01, 2018
by
Carl Bergquist
Committed by
GitHub
Feb 01, 2018
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #10694 from grafana/7883_backend
backend for new url structure.
parents
90933b06
58cfb236
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
10 changed files
with
307 additions
and
32 deletions
+307
-32
pkg/api/dashboard.go
+1
-1
pkg/middleware/dashboard_redirect_test.go
+2
-0
pkg/models/dashboards.go
+10
-12
pkg/services/sqlstore/dashboard.go
+67
-16
pkg/services/sqlstore/dashboard_folder_test.go
+219
-0
pkg/services/sqlstore/dashboard_test.go
+0
-0
pkg/services/sqlstore/dashboard_version_test.go
+2
-3
pkg/services/sqlstore/migrations/dashboard_mig.go
+4
-0
tests/test-app/dashboards/connections.json
+1
-0
tests/test-app/dashboards/connections_result.json
+1
-0
No files found.
pkg/api/dashboard.go
View file @
eff687be
...
...
@@ -209,7 +209,7 @@ func PostDashboard(c *middleware.Context, cmd m.SaveDashboardCommand) Response {
}
if
err
!=
nil
{
if
err
==
m
.
ErrDashboardWithSame
Name
Exists
{
if
err
==
m
.
ErrDashboardWithSame
UID
Exists
{
return
Json
(
412
,
util
.
DynMap
{
"status"
:
"name-exists"
,
"message"
:
err
.
Error
()})
}
if
err
==
m
.
ErrDashboardVersionMismatch
{
...
...
pkg/middleware/dashboard_redirect_test.go
View file @
eff687be
...
...
@@ -6,6 +6,7 @@ import (
"github.com/grafana/grafana/pkg/bus"
m
"github.com/grafana/grafana/pkg/models"
"github.com/grafana/grafana/pkg/util"
.
"github.com/smartystreets/goconvey/convey"
)
...
...
@@ -19,6 +20,7 @@ func TestMiddlewareDashboardRedirect(t *testing.T) {
fakeDash
.
Id
=
1
fakeDash
.
FolderId
=
1
fakeDash
.
HasAcl
=
false
fakeDash
.
Uid
=
util
.
GenerateShortUid
()
bus
.
AddHandler
(
"test"
,
func
(
query
*
m
.
GetDashboardQuery
)
error
{
query
.
Result
=
fakeDash
...
...
pkg/models/dashboards.go
View file @
eff687be
...
...
@@ -9,19 +9,20 @@ import (
"github.com/gosimple/slug"
"github.com/grafana/grafana/pkg/components/simplejson"
"github.com/grafana/grafana/pkg/setting"
"github.com/grafana/grafana/pkg/util"
)
// Typed errors
var
(
ErrDashboardNotFound
=
errors
.
New
(
"Dashboard not found"
)
ErrDashboardSnapshotNotFound
=
errors
.
New
(
"Dashboard snapshot not found"
)
ErrDashboardWithSameNameExists
=
errors
.
New
(
"A dashboard with the same name already exists"
)
ErrDashboardVersionMismatch
=
errors
.
New
(
"The dashboard has been changed by someone else"
)
ErrDashboardTitleEmpty
=
errors
.
New
(
"Dashboard title cannot be empty"
)
ErrDashboardFolderCannotHaveParent
=
errors
.
New
(
"A Dashboard Folder cannot be added to another folder"
)
ErrDashboardContainsInvalidAlertData
=
errors
.
New
(
"Invalid alert data. Cannot save dashboard"
)
ErrDashboardFailedToUpdateAlertData
=
errors
.
New
(
"Failed to save alert data"
)
ErrDashboardNotFound
=
errors
.
New
(
"Dashboard not found"
)
ErrDashboardSnapshotNotFound
=
errors
.
New
(
"Dashboard snapshot not found"
)
ErrDashboardWithSameUIDExists
=
errors
.
New
(
"A dashboard with the same uid already exists"
)
ErrDashboardWithSameNameInFolderExists
=
errors
.
New
(
"A dashboard with the same name in the folder already exists"
)
ErrDashboardVersionMismatch
=
errors
.
New
(
"The dashboard has been changed by someone else"
)
ErrDashboardTitleEmpty
=
errors
.
New
(
"Dashboard title cannot be empty"
)
ErrDashboardFolderCannotHaveParent
=
errors
.
New
(
"A Dashboard Folder cannot be added to another folder"
)
ErrDashboardContainsInvalidAlertData
=
errors
.
New
(
"Invalid alert data. Cannot save dashboard"
)
ErrDashboardFailedToUpdateAlertData
=
errors
.
New
(
"Failed to save alert data"
)
ErrDashboardFailedGenerateUniqueUid
=
errors
.
New
(
"Failed to generate unique dashboard uid."
)
)
type
UpdatePluginDashboardError
struct
{
...
...
@@ -65,7 +66,6 @@ type Dashboard struct {
// NewDashboard creates a new dashboard
func
NewDashboard
(
title
string
)
*
Dashboard
{
dash
:=
&
Dashboard
{}
dash
.
Uid
=
util
.
GenerateShortUid
()
dash
.
Data
=
simplejson
.
New
()
dash
.
Data
.
Set
(
"title"
,
title
)
dash
.
Title
=
title
...
...
@@ -114,8 +114,6 @@ func NewDashboardFromJson(data *simplejson.Json) *Dashboard {
if
uid
,
err
:=
dash
.
Data
.
Get
(
"uid"
)
.
String
();
err
==
nil
{
dash
.
Uid
=
uid
}
else
{
dash
.
Uid
=
util
.
GenerateShortUid
()
}
return
dash
...
...
pkg/services/sqlstore/dashboard.go
View file @
eff687be
...
...
@@ -7,6 +7,7 @@ import (
"github.com/grafana/grafana/pkg/metrics"
m
"github.com/grafana/grafana/pkg/models"
"github.com/grafana/grafana/pkg/services/search"
"github.com/grafana/grafana/pkg/util"
)
func
init
()
{
...
...
@@ -20,14 +21,16 @@ func init() {
bus
.
AddHandler
(
"sql"
,
GetDashboardsByPluginId
)
}
var
generateNewUid
func
()
string
=
util
.
GenerateShortUid
func
SaveDashboard
(
cmd
*
m
.
SaveDashboardCommand
)
error
{
return
inTransaction
(
func
(
sess
*
DBSession
)
error
{
dash
:=
cmd
.
GetDashboardModel
()
// try get existing dashboard
var
existing
,
sameTitle
m
.
Dashboard
var
existing
m
.
Dashboard
if
dash
.
Id
>
0
{
if
dash
.
Id
!=
0
{
dashWithIdExists
,
err
:=
sess
.
Where
(
"id=? AND org_id=?"
,
dash
.
Id
,
dash
.
OrgId
)
.
Get
(
&
existing
)
if
err
!=
nil
{
return
err
...
...
@@ -49,23 +52,38 @@ func SaveDashboard(cmd *m.SaveDashboardCommand) error {
if
existing
.
PluginId
!=
""
&&
cmd
.
Overwrite
==
false
{
return
m
.
UpdatePluginDashboardError
{
PluginId
:
existing
.
PluginId
}
}
}
}
else
if
dash
.
Uid
!=
""
{
var
sameUid
m
.
Dashboard
sameUidExists
,
err
:=
sess
.
Where
(
"org_id=? AND uid=?"
,
dash
.
OrgId
,
dash
.
Uid
)
.
Get
(
&
sameUid
)
if
err
!=
nil
{
return
err
}
sameTitleExists
,
err
:=
sess
.
Where
(
"org_id=? AND slug=?"
,
dash
.
OrgId
,
dash
.
Slug
)
.
Get
(
&
sameTitle
)
if
err
!=
nil
{
return
err
if
sameUidExists
{
// another dashboard with same uid
if
dash
.
Id
!=
sameUid
.
Id
{
if
cmd
.
Overwrite
{
dash
.
Id
=
sameUid
.
Id
dash
.
Version
=
sameUid
.
Version
}
else
{
return
m
.
ErrDashboardWithSameUIDExists
}
}
}
}
if
sameTitleExists
{
// another dashboard with same name
if
dash
.
Id
!=
sameTitle
.
Id
{
if
cmd
.
Overwrite
{
dash
.
Id
=
sameTitle
.
Id
dash
.
Version
=
sameTitle
.
Version
}
else
{
return
m
.
ErrDashboardWithSameNameExists
}
if
dash
.
Uid
==
""
{
uid
,
err
:=
generateNewDashboardUid
(
sess
,
dash
.
OrgId
)
if
err
!=
nil
{
return
err
}
dash
.
Uid
=
uid
dash
.
Data
.
Set
(
"uid"
,
uid
)
}
err
:=
guaranteeDashboardNameIsUniqueInFolder
(
sess
,
dash
)
if
err
!=
nil
{
return
err
}
err
=
setHasAcl
(
sess
,
dash
)
...
...
@@ -89,7 +107,7 @@ func SaveDashboard(cmd *m.SaveDashboardCommand) error {
dash
.
Updated
=
cmd
.
UpdatedAt
}
affectedRows
,
err
=
sess
.
MustCols
(
"folder_id"
,
"has_acl"
)
.
I
d
(
dash
.
Id
)
.
Update
(
dash
)
affectedRows
,
err
=
sess
.
MustCols
(
"folder_id"
,
"has_acl"
)
.
I
D
(
dash
.
Id
)
.
Update
(
dash
)
}
if
err
!=
nil
{
...
...
@@ -138,6 +156,39 @@ func SaveDashboard(cmd *m.SaveDashboardCommand) error {
return
err
})
}
func
generateNewDashboardUid
(
sess
*
DBSession
,
orgId
int64
)
(
string
,
error
)
{
for
i
:=
0
;
i
<
3
;
i
++
{
uid
:=
generateNewUid
()
exists
,
err
:=
sess
.
Where
(
"org_id=? AND uid=?"
,
orgId
,
uid
)
.
Get
(
&
m
.
Dashboard
{})
if
err
!=
nil
{
return
""
,
err
}
if
!
exists
{
return
uid
,
nil
}
}
return
""
,
m
.
ErrDashboardFailedGenerateUniqueUid
}
func
guaranteeDashboardNameIsUniqueInFolder
(
sess
*
DBSession
,
dash
*
m
.
Dashboard
)
error
{
var
sameNameInFolder
m
.
Dashboard
sameNameInFolderExist
,
err
:=
sess
.
Where
(
"org_id=? AND title=? AND folder_id = ? AND uid <> ?"
,
dash
.
OrgId
,
dash
.
Title
,
dash
.
FolderId
,
dash
.
Uid
)
.
Get
(
&
sameNameInFolder
)
if
err
!=
nil
{
return
err
}
if
sameNameInFolderExist
{
return
m
.
ErrDashboardWithSameNameInFolderExists
}
return
nil
}
func
setHasAcl
(
sess
*
DBSession
,
dash
*
m
.
Dashboard
)
error
{
// check if parent has acl
...
...
pkg/services/sqlstore/dashboard_folder_test.go
0 → 100644
View file @
eff687be
package
sqlstore
import
(
"testing"
"github.com/go-xorm/xorm"
.
"github.com/smartystreets/goconvey/convey"
m
"github.com/grafana/grafana/pkg/models"
"github.com/grafana/grafana/pkg/services/search"
)
func
TestDashboardFolderDataAccess
(
t
*
testing
.
T
)
{
var
x
*
xorm
.
Engine
Convey
(
"Testing DB"
,
t
,
func
()
{
x
=
InitTestDB
(
t
)
Convey
(
"Given one dashboard folder with two dashboards and one dashboard in the root folder"
,
func
()
{
folder
:=
insertTestDashboard
(
"1 test dash folder"
,
1
,
0
,
true
,
"prod"
,
"webapp"
)
dashInRoot
:=
insertTestDashboard
(
"test dash 67"
,
1
,
0
,
false
,
"prod"
,
"webapp"
)
childDash
:=
insertTestDashboard
(
"test dash 23"
,
1
,
folder
.
Id
,
false
,
"prod"
,
"webapp"
)
insertTestDashboard
(
"test dash 45"
,
1
,
folder
.
Id
,
false
,
"prod"
)
currentUser
:=
createUser
(
"viewer"
,
"Viewer"
,
false
)
Convey
(
"and no acls are set"
,
func
()
{
Convey
(
"should return all dashboards"
,
func
()
{
query
:=
&
search
.
FindPersistedDashboardsQuery
{
SignedInUser
:
&
m
.
SignedInUser
{
UserId
:
currentUser
.
Id
,
OrgId
:
1
},
OrgId
:
1
,
DashboardIds
:
[]
int64
{
folder
.
Id
,
dashInRoot
.
Id
}}
err
:=
SearchDashboards
(
query
)
So
(
err
,
ShouldBeNil
)
So
(
len
(
query
.
Result
),
ShouldEqual
,
2
)
So
(
query
.
Result
[
0
]
.
Id
,
ShouldEqual
,
folder
.
Id
)
So
(
query
.
Result
[
1
]
.
Id
,
ShouldEqual
,
dashInRoot
.
Id
)
})
})
Convey
(
"and acl is set for dashboard folder"
,
func
()
{
var
otherUser
int64
=
999
updateTestDashboardWithAcl
(
folder
.
Id
,
otherUser
,
m
.
PERMISSION_EDIT
)
Convey
(
"should not return folder"
,
func
()
{
query
:=
&
search
.
FindPersistedDashboardsQuery
{
SignedInUser
:
&
m
.
SignedInUser
{
UserId
:
currentUser
.
Id
,
OrgId
:
1
},
OrgId
:
1
,
DashboardIds
:
[]
int64
{
folder
.
Id
,
dashInRoot
.
Id
}}
err
:=
SearchDashboards
(
query
)
So
(
err
,
ShouldBeNil
)
So
(
len
(
query
.
Result
),
ShouldEqual
,
1
)
So
(
query
.
Result
[
0
]
.
Id
,
ShouldEqual
,
dashInRoot
.
Id
)
})
Convey
(
"when the user is given permission"
,
func
()
{
updateTestDashboardWithAcl
(
folder
.
Id
,
currentUser
.
Id
,
m
.
PERMISSION_EDIT
)
Convey
(
"should be able to access folder"
,
func
()
{
query
:=
&
search
.
FindPersistedDashboardsQuery
{
SignedInUser
:
&
m
.
SignedInUser
{
UserId
:
currentUser
.
Id
,
OrgId
:
1
},
OrgId
:
1
,
DashboardIds
:
[]
int64
{
folder
.
Id
,
dashInRoot
.
Id
}}
err
:=
SearchDashboards
(
query
)
So
(
err
,
ShouldBeNil
)
So
(
len
(
query
.
Result
),
ShouldEqual
,
2
)
So
(
query
.
Result
[
0
]
.
Id
,
ShouldEqual
,
folder
.
Id
)
So
(
query
.
Result
[
1
]
.
Id
,
ShouldEqual
,
dashInRoot
.
Id
)
})
})
Convey
(
"when the user is an admin"
,
func
()
{
Convey
(
"should be able to access folder"
,
func
()
{
query
:=
&
search
.
FindPersistedDashboardsQuery
{
SignedInUser
:
&
m
.
SignedInUser
{
UserId
:
currentUser
.
Id
,
OrgId
:
1
,
OrgRole
:
m
.
ROLE_ADMIN
,
},
OrgId
:
1
,
DashboardIds
:
[]
int64
{
folder
.
Id
,
dashInRoot
.
Id
},
}
err
:=
SearchDashboards
(
query
)
So
(
err
,
ShouldBeNil
)
So
(
len
(
query
.
Result
),
ShouldEqual
,
2
)
So
(
query
.
Result
[
0
]
.
Id
,
ShouldEqual
,
folder
.
Id
)
So
(
query
.
Result
[
1
]
.
Id
,
ShouldEqual
,
dashInRoot
.
Id
)
})
})
})
Convey
(
"and acl is set for dashboard child and folder has all permissions removed"
,
func
()
{
var
otherUser
int64
=
999
aclId
:=
updateTestDashboardWithAcl
(
folder
.
Id
,
otherUser
,
m
.
PERMISSION_EDIT
)
removeAcl
(
aclId
)
updateTestDashboardWithAcl
(
childDash
.
Id
,
otherUser
,
m
.
PERMISSION_EDIT
)
Convey
(
"should not return folder or child"
,
func
()
{
query
:=
&
search
.
FindPersistedDashboardsQuery
{
SignedInUser
:
&
m
.
SignedInUser
{
UserId
:
currentUser
.
Id
,
OrgId
:
1
},
OrgId
:
1
,
DashboardIds
:
[]
int64
{
folder
.
Id
,
childDash
.
Id
,
dashInRoot
.
Id
}}
err
:=
SearchDashboards
(
query
)
So
(
err
,
ShouldBeNil
)
So
(
len
(
query
.
Result
),
ShouldEqual
,
1
)
So
(
query
.
Result
[
0
]
.
Id
,
ShouldEqual
,
dashInRoot
.
Id
)
})
Convey
(
"when the user is given permission to child"
,
func
()
{
updateTestDashboardWithAcl
(
childDash
.
Id
,
currentUser
.
Id
,
m
.
PERMISSION_EDIT
)
Convey
(
"should be able to search for child dashboard but not folder"
,
func
()
{
query
:=
&
search
.
FindPersistedDashboardsQuery
{
SignedInUser
:
&
m
.
SignedInUser
{
UserId
:
currentUser
.
Id
,
OrgId
:
1
},
OrgId
:
1
,
DashboardIds
:
[]
int64
{
folder
.
Id
,
childDash
.
Id
,
dashInRoot
.
Id
}}
err
:=
SearchDashboards
(
query
)
So
(
err
,
ShouldBeNil
)
So
(
len
(
query
.
Result
),
ShouldEqual
,
2
)
So
(
query
.
Result
[
0
]
.
Id
,
ShouldEqual
,
childDash
.
Id
)
So
(
query
.
Result
[
1
]
.
Id
,
ShouldEqual
,
dashInRoot
.
Id
)
})
})
Convey
(
"when the user is an admin"
,
func
()
{
Convey
(
"should be able to search for child dash and folder"
,
func
()
{
query
:=
&
search
.
FindPersistedDashboardsQuery
{
SignedInUser
:
&
m
.
SignedInUser
{
UserId
:
currentUser
.
Id
,
OrgId
:
1
,
OrgRole
:
m
.
ROLE_ADMIN
,
},
OrgId
:
1
,
DashboardIds
:
[]
int64
{
folder
.
Id
,
dashInRoot
.
Id
,
childDash
.
Id
},
}
err
:=
SearchDashboards
(
query
)
So
(
err
,
ShouldBeNil
)
So
(
len
(
query
.
Result
),
ShouldEqual
,
3
)
So
(
query
.
Result
[
0
]
.
Id
,
ShouldEqual
,
folder
.
Id
)
So
(
query
.
Result
[
1
]
.
Id
,
ShouldEqual
,
childDash
.
Id
)
So
(
query
.
Result
[
2
]
.
Id
,
ShouldEqual
,
dashInRoot
.
Id
)
})
})
})
})
Convey
(
"Given two dashboard folders with one dashboard each and one dashboard in the root folder"
,
func
()
{
folder1
:=
insertTestDashboard
(
"1 test dash folder"
,
1
,
0
,
true
,
"prod"
)
folder2
:=
insertTestDashboard
(
"2 test dash folder"
,
1
,
0
,
true
,
"prod"
)
dashInRoot
:=
insertTestDashboard
(
"test dash 67"
,
1
,
0
,
false
,
"prod"
)
childDash1
:=
insertTestDashboard
(
"child dash 1"
,
1
,
folder1
.
Id
,
false
,
"prod"
)
childDash2
:=
insertTestDashboard
(
"child dash 2"
,
1
,
folder2
.
Id
,
false
,
"prod"
)
currentUser
:=
createUser
(
"viewer"
,
"Viewer"
,
false
)
var
rootFolderId
int64
=
0
Convey
(
"and one folder is expanded, the other collapsed"
,
func
()
{
Convey
(
"should return dashboards in root and expanded folder"
,
func
()
{
query
:=
&
search
.
FindPersistedDashboardsQuery
{
FolderIds
:
[]
int64
{
rootFolderId
,
folder1
.
Id
},
SignedInUser
:
&
m
.
SignedInUser
{
UserId
:
currentUser
.
Id
,
OrgId
:
1
},
OrgId
:
1
}
err
:=
SearchDashboards
(
query
)
So
(
err
,
ShouldBeNil
)
So
(
len
(
query
.
Result
),
ShouldEqual
,
4
)
So
(
query
.
Result
[
0
]
.
Id
,
ShouldEqual
,
folder1
.
Id
)
So
(
query
.
Result
[
1
]
.
Id
,
ShouldEqual
,
folder2
.
Id
)
So
(
query
.
Result
[
2
]
.
Id
,
ShouldEqual
,
childDash1
.
Id
)
So
(
query
.
Result
[
3
]
.
Id
,
ShouldEqual
,
dashInRoot
.
Id
)
})
})
Convey
(
"and acl is set for one dashboard folder"
,
func
()
{
var
otherUser
int64
=
999
updateTestDashboardWithAcl
(
folder1
.
Id
,
otherUser
,
m
.
PERMISSION_EDIT
)
Convey
(
"and a dashboard is moved from folder without acl to the folder with an acl"
,
func
()
{
movedDash
:=
moveDashboard
(
1
,
childDash2
.
Data
,
folder1
.
Id
)
So
(
movedDash
.
HasAcl
,
ShouldBeTrue
)
Convey
(
"should not return folder with acl or its children"
,
func
()
{
query
:=
&
search
.
FindPersistedDashboardsQuery
{
SignedInUser
:
&
m
.
SignedInUser
{
UserId
:
currentUser
.
Id
,
OrgId
:
1
},
OrgId
:
1
,
DashboardIds
:
[]
int64
{
folder1
.
Id
,
childDash1
.
Id
,
childDash2
.
Id
,
dashInRoot
.
Id
},
}
err
:=
SearchDashboards
(
query
)
So
(
err
,
ShouldBeNil
)
So
(
len
(
query
.
Result
),
ShouldEqual
,
1
)
So
(
query
.
Result
[
0
]
.
Id
,
ShouldEqual
,
dashInRoot
.
Id
)
})
})
Convey
(
"and a dashboard is moved from folder with acl to the folder without an acl"
,
func
()
{
movedDash
:=
moveDashboard
(
1
,
childDash1
.
Data
,
folder2
.
Id
)
So
(
movedDash
.
HasAcl
,
ShouldBeFalse
)
Convey
(
"should return folder without acl and its children"
,
func
()
{
query
:=
&
search
.
FindPersistedDashboardsQuery
{
SignedInUser
:
&
m
.
SignedInUser
{
UserId
:
currentUser
.
Id
,
OrgId
:
1
},
OrgId
:
1
,
DashboardIds
:
[]
int64
{
folder2
.
Id
,
childDash1
.
Id
,
childDash2
.
Id
,
dashInRoot
.
Id
},
}
err
:=
SearchDashboards
(
query
)
So
(
err
,
ShouldBeNil
)
So
(
len
(
query
.
Result
),
ShouldEqual
,
4
)
So
(
query
.
Result
[
0
]
.
Id
,
ShouldEqual
,
folder2
.
Id
)
So
(
query
.
Result
[
1
]
.
Id
,
ShouldEqual
,
childDash1
.
Id
)
So
(
query
.
Result
[
2
]
.
Id
,
ShouldEqual
,
childDash2
.
Id
)
So
(
query
.
Result
[
3
]
.
Id
,
ShouldEqual
,
dashInRoot
.
Id
)
})
})
Convey
(
"and a dashboard with an acl is moved to the folder without an acl"
,
func
()
{
updateTestDashboardWithAcl
(
childDash1
.
Id
,
otherUser
,
m
.
PERMISSION_EDIT
)
movedDash
:=
moveDashboard
(
1
,
childDash1
.
Data
,
folder2
.
Id
)
So
(
movedDash
.
HasAcl
,
ShouldBeTrue
)
Convey
(
"should return folder without acl but not the dashboard with acl"
,
func
()
{
query
:=
&
search
.
FindPersistedDashboardsQuery
{
SignedInUser
:
&
m
.
SignedInUser
{
UserId
:
currentUser
.
Id
,
OrgId
:
1
},
OrgId
:
1
,
DashboardIds
:
[]
int64
{
folder2
.
Id
,
childDash1
.
Id
,
childDash2
.
Id
,
dashInRoot
.
Id
},
}
err
:=
SearchDashboards
(
query
)
So
(
err
,
ShouldBeNil
)
So
(
len
(
query
.
Result
),
ShouldEqual
,
3
)
So
(
query
.
Result
[
0
]
.
Id
,
ShouldEqual
,
folder2
.
Id
)
So
(
query
.
Result
[
1
]
.
Id
,
ShouldEqual
,
childDash2
.
Id
)
So
(
query
.
Result
[
2
]
.
Id
,
ShouldEqual
,
dashInRoot
.
Id
)
})
})
})
})
})
}
pkg/services/sqlstore/dashboard_test.go
View file @
eff687be
This diff is collapsed.
Click to expand it.
pkg/services/sqlstore/dashboard_version_test.go
View file @
eff687be
...
...
@@ -12,7 +12,7 @@ import (
)
func
updateTestDashboard
(
dashboard
*
m
.
Dashboard
,
data
map
[
string
]
interface
{})
{
data
[
"
title"
]
=
dashboard
.
Title
data
[
"
uid"
]
=
dashboard
.
Uid
saveCmd
:=
m
.
SaveDashboardCommand
{
OrgId
:
dashboard
.
OrgId
,
...
...
@@ -44,12 +44,11 @@ func TestGetDashboardVersion(t *testing.T) {
dashCmd
:=
m
.
GetDashboardQuery
{
OrgId
:
savedDash
.
OrgId
,
Slug
:
savedDash
.
Slug
,
Uid
:
savedDash
.
Uid
,
}
err
=
GetDashboard
(
&
dashCmd
)
So
(
err
,
ShouldBeNil
)
dashCmd
.
Result
.
Data
.
Del
(
"uid"
)
eq
:=
reflect
.
DeepEqual
(
dashCmd
.
Result
.
Data
,
query
.
Result
.
Data
)
So
(
eq
,
ShouldEqual
,
true
)
})
...
...
pkg/services/sqlstore/migrations/dashboard_mig.go
View file @
eff687be
...
...
@@ -163,4 +163,8 @@ func addDashboardMigration(mg *Migrator) {
mg
.
AddMigration
(
"Add unique index dashboard_org_id_uid"
,
NewAddIndexMigration
(
dashboardV2
,
&
Index
{
Cols
:
[]
string
{
"org_id"
,
"uid"
},
Type
:
UniqueIndex
,
}))
mg
.
AddMigration
(
"Remove unique index org_id_slug"
,
NewDropIndexMigration
(
dashboardV2
,
&
Index
{
Cols
:
[]
string
{
"org_id"
,
"slug"
},
Type
:
UniqueIndex
,
}))
}
tests/test-app/dashboards/connections.json
View file @
eff687be
...
...
@@ -7,6 +7,7 @@
}
],
"uid"
:
"1MHHlVjzz"
,
"title"
:
"Nginx Connections"
,
"revision"
:
25
,
"schemaVersion"
:
11
,
...
...
tests/test-app/dashboards/connections_result.json
View file @
eff687be
...
...
@@ -16,5 +16,6 @@
],
"schemaVersion"
:
11
,
"title"
:
"Nginx Connections"
,
"uid"
:
"1MHHlVjzz"
,
"version"
:
0
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment