2022-01-14 09:45:50 +00:00
package query
import (
"database/sql"
"database/sql/driver"
"errors"
"fmt"
"regexp"
"testing"
2022-08-31 07:52:43 +00:00
"github.com/zitadel/zitadel/internal/database"
2022-04-26 23:01:45 +00:00
"github.com/zitadel/zitadel/internal/domain"
errs "github.com/zitadel/zitadel/internal/errors"
2022-01-14 09:45:50 +00:00
)
var (
userGrantStmt = regexp . QuoteMeta (
2022-11-30 16:01:17 +00:00
"SELECT projections.user_grants3.id" +
", projections.user_grants3.creation_date" +
", projections.user_grants3.change_date" +
", projections.user_grants3.sequence" +
", projections.user_grants3.grant_id" +
", projections.user_grants3.roles" +
", projections.user_grants3.state" +
", projections.user_grants3.user_id" +
2023-02-08 08:06:34 +00:00
", projections.users8.username" +
", projections.users8.type" +
", projections.users8.resource_owner" +
", projections.users8_humans.first_name" +
", projections.users8_humans.last_name" +
", projections.users8_humans.email" +
", projections.users8_humans.display_name" +
", projections.users8_humans.avatar_key" +
2022-11-30 16:01:17 +00:00
", projections.login_names2.login_name" +
", projections.user_grants3.resource_owner" +
2023-09-07 04:54:51 +00:00
", projections.orgs1.name" +
", projections.orgs1.primary_domain" +
2022-11-30 16:01:17 +00:00
", projections.user_grants3.project_id" +
", projections.projects3.name" +
" FROM projections.user_grants3" +
2023-02-08 08:06:34 +00:00
" LEFT JOIN projections.users8 ON projections.user_grants3.user_id = projections.users8.id AND projections.user_grants3.instance_id = projections.users8.instance_id" +
" LEFT JOIN projections.users8_humans ON projections.user_grants3.user_id = projections.users8_humans.user_id AND projections.user_grants3.instance_id = projections.users8_humans.instance_id" +
2023-09-07 04:54:51 +00:00
" LEFT JOIN projections.orgs1 ON projections.user_grants3.resource_owner = projections.orgs1.id AND projections.user_grants3.instance_id = projections.orgs1.instance_id" +
2022-11-30 16:01:17 +00:00
" LEFT JOIN projections.projects3 ON projections.user_grants3.project_id = projections.projects3.id AND projections.user_grants3.instance_id = projections.projects3.instance_id" +
" LEFT JOIN projections.login_names2 ON projections.user_grants3.user_id = projections.login_names2.user_id AND projections.user_grants3.instance_id = projections.login_names2.instance_id" +
2023-02-27 21:36:43 +00:00
` AS OF SYSTEM TIME '-1 ms' ` +
2022-11-30 16:01:17 +00:00
" WHERE projections.login_names2.is_primary = $1" )
2022-01-14 09:45:50 +00:00
userGrantCols = [ ] string {
"id" ,
"creation_date" ,
"change_date" ,
"sequence" ,
"grant_id" ,
"roles" ,
"state" ,
"user_id" ,
"username" ,
"type" ,
"resource_owner" , //user resource owner
"first_name" ,
"last_name" ,
"email" ,
"display_name" ,
"avatar_key" ,
2022-03-24 13:00:24 +00:00
"login_name" ,
2022-01-14 09:45:50 +00:00
"resource_owner" , //user_grant resource owner
"name" , //org name
"primary_domain" ,
"project_id" ,
"name" , //project name
}
userGrantsStmt = regexp . QuoteMeta (
2022-11-30 16:01:17 +00:00
"SELECT projections.user_grants3.id" +
", projections.user_grants3.creation_date" +
", projections.user_grants3.change_date" +
", projections.user_grants3.sequence" +
", projections.user_grants3.grant_id" +
", projections.user_grants3.roles" +
", projections.user_grants3.state" +
", projections.user_grants3.user_id" +
2023-02-08 08:06:34 +00:00
", projections.users8.username" +
", projections.users8.type" +
", projections.users8.resource_owner" +
", projections.users8_humans.first_name" +
", projections.users8_humans.last_name" +
", projections.users8_humans.email" +
", projections.users8_humans.display_name" +
", projections.users8_humans.avatar_key" +
2022-11-30 16:01:17 +00:00
", projections.login_names2.login_name" +
", projections.user_grants3.resource_owner" +
2023-09-07 04:54:51 +00:00
", projections.orgs1.name" +
", projections.orgs1.primary_domain" +
2022-11-30 16:01:17 +00:00
", projections.user_grants3.project_id" +
", projections.projects3.name" +
2022-01-14 09:45:50 +00:00
", COUNT(*) OVER ()" +
2022-11-30 16:01:17 +00:00
" FROM projections.user_grants3" +
2023-02-08 08:06:34 +00:00
" LEFT JOIN projections.users8 ON projections.user_grants3.user_id = projections.users8.id AND projections.user_grants3.instance_id = projections.users8.instance_id" +
" LEFT JOIN projections.users8_humans ON projections.user_grants3.user_id = projections.users8_humans.user_id AND projections.user_grants3.instance_id = projections.users8_humans.instance_id" +
2023-09-07 04:54:51 +00:00
" LEFT JOIN projections.orgs1 ON projections.user_grants3.resource_owner = projections.orgs1.id AND projections.user_grants3.instance_id = projections.orgs1.instance_id" +
2022-11-30 16:01:17 +00:00
" LEFT JOIN projections.projects3 ON projections.user_grants3.project_id = projections.projects3.id AND projections.user_grants3.instance_id = projections.projects3.instance_id" +
" LEFT JOIN projections.login_names2 ON projections.user_grants3.user_id = projections.login_names2.user_id AND projections.user_grants3.instance_id = projections.login_names2.instance_id" +
2023-02-27 21:36:43 +00:00
` AS OF SYSTEM TIME '-1 ms' ` +
2022-11-30 16:01:17 +00:00
" WHERE projections.login_names2.is_primary = $1" )
2022-01-14 09:45:50 +00:00
userGrantsCols = append (
userGrantCols ,
"count" ,
)
)
func Test_UserGrantPrepares ( t * testing . T ) {
type want struct {
sqlExpectations sqlExpectation
err checkErr
}
tests := [ ] struct {
name string
prepare interface { }
want want
object interface { }
} {
{
name : "prepareUserGrantQuery no result" ,
prepare : prepareUserGrantQuery ,
want : want {
2023-08-22 10:49:22 +00:00
sqlExpectations : mockQueriesScanErr (
2022-01-14 09:45:50 +00:00
userGrantStmt ,
nil ,
nil ,
) ,
err : func ( err error ) ( error , bool ) {
if ! errs . IsNotFound ( err ) {
return fmt . Errorf ( "err should be zitadel.NotFoundError got: %w" , err ) , false
}
return nil , true
} ,
} ,
object : ( * UserGrant ) ( nil ) ,
} ,
{
name : "prepareUserGrantQuery found" ,
prepare : prepareUserGrantQuery ,
want : want {
sqlExpectations : mockQuery (
userGrantStmt ,
userGrantCols ,
[ ] driver . Value {
"id" ,
testNow ,
testNow ,
20211111 ,
"grant-id" ,
2022-08-31 07:52:43 +00:00
database . StringArray { "role-key" } ,
2022-01-14 09:45:50 +00:00
domain . UserGrantStateActive ,
"user-id" ,
"username" ,
domain . UserTypeHuman ,
"resource-owner" ,
"first-name" ,
"last-name" ,
"email" ,
"display-name" ,
"avatar-key" ,
2022-03-24 13:00:24 +00:00
"login-name" ,
2022-01-14 09:45:50 +00:00
"ro" ,
"org-name" ,
"primary-domain" ,
"project-id" ,
"project-name" ,
} ,
) ,
} ,
object : & UserGrant {
2022-03-24 13:00:24 +00:00
ID : "id" ,
CreationDate : testNow ,
ChangeDate : testNow ,
Sequence : 20211111 ,
2022-08-31 07:52:43 +00:00
Roles : database . StringArray { "role-key" } ,
2022-03-24 13:00:24 +00:00
GrantID : "grant-id" ,
State : domain . UserGrantStateActive ,
UserID : "user-id" ,
Username : "username" ,
UserType : domain . UserTypeHuman ,
UserResourceOwner : "resource-owner" ,
FirstName : "first-name" ,
LastName : "last-name" ,
Email : "email" ,
DisplayName : "display-name" ,
AvatarURL : "avatar-key" ,
PreferredLoginName : "login-name" ,
ResourceOwner : "ro" ,
OrgName : "org-name" ,
OrgPrimaryDomain : "primary-domain" ,
ProjectID : "project-id" ,
ProjectName : "project-name" ,
2022-01-14 09:45:50 +00:00
} ,
} ,
{
name : "prepareUserGrantQuery machine user found" ,
prepare : prepareUserGrantQuery ,
want : want {
sqlExpectations : mockQuery (
userGrantStmt ,
userGrantCols ,
[ ] driver . Value {
"id" ,
testNow ,
testNow ,
20211111 ,
"grant-id" ,
2022-08-31 07:52:43 +00:00
database . StringArray { "role-key" } ,
2022-01-14 09:45:50 +00:00
domain . UserGrantStateActive ,
"user-id" ,
"username" ,
domain . UserTypeMachine ,
"resource-owner" ,
nil ,
nil ,
nil ,
nil ,
nil ,
2022-03-24 13:00:24 +00:00
"login-name" ,
2022-01-14 09:45:50 +00:00
"ro" ,
"org-name" ,
"primary-domain" ,
"project-id" ,
"project-name" ,
} ,
) ,
} ,
object : & UserGrant {
2022-03-24 13:00:24 +00:00
ID : "id" ,
CreationDate : testNow ,
ChangeDate : testNow ,
Sequence : 20211111 ,
2022-08-31 07:52:43 +00:00
Roles : database . StringArray { "role-key" } ,
2022-03-24 13:00:24 +00:00
GrantID : "grant-id" ,
State : domain . UserGrantStateActive ,
UserID : "user-id" ,
Username : "username" ,
UserType : domain . UserTypeMachine ,
UserResourceOwner : "resource-owner" ,
FirstName : "" ,
LastName : "" ,
Email : "" ,
DisplayName : "" ,
AvatarURL : "" ,
PreferredLoginName : "login-name" ,
ResourceOwner : "ro" ,
OrgName : "org-name" ,
OrgPrimaryDomain : "primary-domain" ,
ProjectID : "project-id" ,
ProjectName : "project-name" ,
2022-01-14 09:45:50 +00:00
} ,
} ,
{
name : "prepareUserGrantQuery (no org) found" ,
prepare : prepareUserGrantQuery ,
want : want {
sqlExpectations : mockQuery (
userGrantStmt ,
userGrantCols ,
[ ] driver . Value {
"id" ,
testNow ,
testNow ,
20211111 ,
"grant-id" ,
2022-08-31 07:52:43 +00:00
database . StringArray { "role-key" } ,
2022-01-14 09:45:50 +00:00
domain . UserGrantStateActive ,
"user-id" ,
"username" ,
domain . UserTypeHuman ,
"resource-owner" ,
"first-name" ,
"last-name" ,
"email" ,
"display-name" ,
"avatar-key" ,
2022-03-24 13:00:24 +00:00
"login-name" ,
2022-01-14 09:45:50 +00:00
"ro" ,
nil ,
nil ,
"project-id" ,
"project-name" ,
} ,
) ,
} ,
object : & UserGrant {
2022-03-24 13:00:24 +00:00
ID : "id" ,
CreationDate : testNow ,
ChangeDate : testNow ,
Sequence : 20211111 ,
2022-08-31 07:52:43 +00:00
Roles : database . StringArray { "role-key" } ,
2022-03-24 13:00:24 +00:00
GrantID : "grant-id" ,
State : domain . UserGrantStateActive ,
UserID : "user-id" ,
Username : "username" ,
UserType : domain . UserTypeHuman ,
UserResourceOwner : "resource-owner" ,
FirstName : "first-name" ,
LastName : "last-name" ,
Email : "email" ,
DisplayName : "display-name" ,
AvatarURL : "avatar-key" ,
PreferredLoginName : "login-name" ,
ResourceOwner : "ro" ,
OrgName : "" ,
OrgPrimaryDomain : "" ,
ProjectID : "project-id" ,
ProjectName : "project-name" ,
2022-01-14 09:45:50 +00:00
} ,
} ,
{
name : "prepareUserGrantQuery (no project) found" ,
prepare : prepareUserGrantQuery ,
want : want {
sqlExpectations : mockQuery (
userGrantStmt ,
userGrantCols ,
[ ] driver . Value {
"id" ,
testNow ,
testNow ,
20211111 ,
"grant-id" ,
2022-08-31 07:52:43 +00:00
database . StringArray { "role-key" } ,
2022-01-14 09:45:50 +00:00
domain . UserGrantStateActive ,
"user-id" ,
"username" ,
domain . UserTypeHuman ,
"resource-owner" ,
"first-name" ,
"last-name" ,
"email" ,
"display-name" ,
"avatar-key" ,
2022-03-24 13:00:24 +00:00
"login-name" ,
2022-01-14 09:45:50 +00:00
"ro" ,
"org-name" ,
"primary-domain" ,
"project-id" ,
nil ,
} ,
) ,
} ,
object : & UserGrant {
2022-03-24 13:00:24 +00:00
ID : "id" ,
CreationDate : testNow ,
ChangeDate : testNow ,
Sequence : 20211111 ,
2022-08-31 07:52:43 +00:00
Roles : database . StringArray { "role-key" } ,
2022-03-24 13:00:24 +00:00
GrantID : "grant-id" ,
State : domain . UserGrantStateActive ,
UserID : "user-id" ,
Username : "username" ,
UserType : domain . UserTypeHuman ,
UserResourceOwner : "resource-owner" ,
FirstName : "first-name" ,
LastName : "last-name" ,
Email : "email" ,
DisplayName : "display-name" ,
AvatarURL : "avatar-key" ,
PreferredLoginName : "login-name" ,
ResourceOwner : "ro" ,
OrgName : "org-name" ,
OrgPrimaryDomain : "primary-domain" ,
ProjectID : "project-id" ,
ProjectName : "" ,
} ,
} ,
{
name : "prepareUserGrantQuery (no loginname) found" ,
prepare : prepareUserGrantQuery ,
want : want {
sqlExpectations : mockQuery (
userGrantStmt ,
userGrantCols ,
[ ] driver . Value {
"id" ,
testNow ,
testNow ,
20211111 ,
"grant-id" ,
2022-08-31 07:52:43 +00:00
database . StringArray { "role-key" } ,
2022-03-24 13:00:24 +00:00
domain . UserGrantStateActive ,
"user-id" ,
"username" ,
domain . UserTypeHuman ,
"resource-owner" ,
"first-name" ,
"last-name" ,
"email" ,
"display-name" ,
"avatar-key" ,
nil ,
"ro" ,
"org-name" ,
"primary-domain" ,
"project-id" ,
"project-name" ,
} ,
) ,
} ,
object : & UserGrant {
ID : "id" ,
CreationDate : testNow ,
ChangeDate : testNow ,
Sequence : 20211111 ,
2022-08-31 07:52:43 +00:00
Roles : database . StringArray { "role-key" } ,
2022-03-24 13:00:24 +00:00
GrantID : "grant-id" ,
State : domain . UserGrantStateActive ,
UserID : "user-id" ,
Username : "username" ,
UserType : domain . UserTypeHuman ,
UserResourceOwner : "resource-owner" ,
FirstName : "first-name" ,
LastName : "last-name" ,
Email : "email" ,
DisplayName : "display-name" ,
AvatarURL : "avatar-key" ,
PreferredLoginName : "" ,
ResourceOwner : "ro" ,
OrgName : "org-name" ,
OrgPrimaryDomain : "primary-domain" ,
ProjectID : "project-id" ,
ProjectName : "project-name" ,
2022-01-14 09:45:50 +00:00
} ,
} ,
{
name : "prepareUserGrantQuery sql err" ,
prepare : prepareUserGrantQuery ,
want : want {
sqlExpectations : mockQueryErr (
userGrantStmt ,
sql . ErrConnDone ,
) ,
err : func ( err error ) ( error , bool ) {
if ! errors . Is ( err , sql . ErrConnDone ) {
return fmt . Errorf ( "err should be sql.ErrConnDone got: %w" , err ) , false
}
return nil , true
} ,
} ,
2023-08-22 10:49:22 +00:00
object : ( * UserGrant ) ( nil ) ,
2022-01-14 09:45:50 +00:00
} ,
{
name : "prepareUserGrantsQuery no result" ,
prepare : prepareUserGrantsQuery ,
want : want {
sqlExpectations : mockQueries (
userGrantsStmt ,
nil ,
nil ,
) ,
} ,
object : & UserGrants { UserGrants : [ ] * UserGrant { } } ,
} ,
{
name : "prepareUserGrantsQuery one grant" ,
prepare : prepareUserGrantsQuery ,
want : want {
sqlExpectations : mockQueries (
userGrantsStmt ,
userGrantsCols ,
[ ] [ ] driver . Value {
{
"id" ,
testNow ,
testNow ,
20211111 ,
"grant-id" ,
2022-08-31 07:52:43 +00:00
database . StringArray { "role-key" } ,
2022-01-14 09:45:50 +00:00
domain . UserGrantStateActive ,
"user-id" ,
"username" ,
domain . UserTypeHuman ,
"resource-owner" ,
"first-name" ,
"last-name" ,
"email" ,
"display-name" ,
"avatar-key" ,
2022-03-24 13:00:24 +00:00
"login-name" ,
2022-01-14 09:45:50 +00:00
"ro" ,
"org-name" ,
"primary-domain" ,
"project-id" ,
"project-name" ,
} ,
} ,
) ,
} ,
object : & UserGrants {
SearchResponse : SearchResponse {
Count : 1 ,
} ,
UserGrants : [ ] * UserGrant {
{
2022-03-24 13:00:24 +00:00
ID : "id" ,
CreationDate : testNow ,
ChangeDate : testNow ,
Sequence : 20211111 ,
2022-08-31 07:52:43 +00:00
Roles : database . StringArray { "role-key" } ,
2022-03-24 13:00:24 +00:00
GrantID : "grant-id" ,
State : domain . UserGrantStateActive ,
UserID : "user-id" ,
Username : "username" ,
UserType : domain . UserTypeHuman ,
UserResourceOwner : "resource-owner" ,
FirstName : "first-name" ,
LastName : "last-name" ,
Email : "email" ,
DisplayName : "display-name" ,
AvatarURL : "avatar-key" ,
PreferredLoginName : "login-name" ,
ResourceOwner : "ro" ,
OrgName : "org-name" ,
OrgPrimaryDomain : "primary-domain" ,
ProjectID : "project-id" ,
ProjectName : "project-name" ,
2022-01-14 09:45:50 +00:00
} ,
} ,
} ,
} ,
{
name : "prepareUserGrantsQuery one grant (machine user)" ,
prepare : prepareUserGrantsQuery ,
want : want {
sqlExpectations : mockQueries (
userGrantsStmt ,
userGrantsCols ,
[ ] [ ] driver . Value {
{
"id" ,
testNow ,
testNow ,
20211111 ,
"grant-id" ,
2022-08-31 07:52:43 +00:00
database . StringArray { "role-key" } ,
2022-01-14 09:45:50 +00:00
domain . UserGrantStateActive ,
"user-id" ,
"username" ,
domain . UserTypeMachine ,
"resource-owner" ,
nil ,
nil ,
nil ,
nil ,
nil ,
2022-03-24 13:00:24 +00:00
"login-name" ,
2022-01-14 09:45:50 +00:00
"ro" ,
"org-name" ,
"primary-domain" ,
"project-id" ,
"project-name" ,
} ,
} ,
) ,
} ,
object : & UserGrants {
SearchResponse : SearchResponse {
Count : 1 ,
} ,
UserGrants : [ ] * UserGrant {
{
2022-03-24 13:00:24 +00:00
ID : "id" ,
CreationDate : testNow ,
ChangeDate : testNow ,
Sequence : 20211111 ,
2022-08-31 07:52:43 +00:00
Roles : database . StringArray { "role-key" } ,
2022-03-24 13:00:24 +00:00
GrantID : "grant-id" ,
State : domain . UserGrantStateActive ,
UserID : "user-id" ,
Username : "username" ,
UserType : domain . UserTypeMachine ,
UserResourceOwner : "resource-owner" ,
FirstName : "" ,
LastName : "" ,
Email : "" ,
DisplayName : "" ,
AvatarURL : "" ,
PreferredLoginName : "login-name" ,
ResourceOwner : "ro" ,
OrgName : "org-name" ,
OrgPrimaryDomain : "primary-domain" ,
ProjectID : "project-id" ,
ProjectName : "project-name" ,
2022-01-14 09:45:50 +00:00
} ,
} ,
} ,
} ,
{
name : "prepareUserGrantsQuery one grant (no org)" ,
prepare : prepareUserGrantsQuery ,
want : want {
sqlExpectations : mockQueries (
userGrantsStmt ,
userGrantsCols ,
[ ] [ ] driver . Value {
{
"id" ,
testNow ,
testNow ,
20211111 ,
"grant-id" ,
2022-08-31 07:52:43 +00:00
database . StringArray { "role-key" } ,
2022-01-14 09:45:50 +00:00
domain . UserGrantStateActive ,
"user-id" ,
"username" ,
domain . UserTypeMachine ,
"resource-owner" ,
"first-name" ,
"last-name" ,
"email" ,
"display-name" ,
"avatar-key" ,
2022-03-24 13:00:24 +00:00
"login-name" ,
2022-01-14 09:45:50 +00:00
"ro" ,
nil ,
nil ,
"project-id" ,
"project-name" ,
} ,
} ,
) ,
} ,
object : & UserGrants {
SearchResponse : SearchResponse {
Count : 1 ,
} ,
UserGrants : [ ] * UserGrant {
{
2022-03-24 13:00:24 +00:00
ID : "id" ,
CreationDate : testNow ,
ChangeDate : testNow ,
Sequence : 20211111 ,
2022-08-31 07:52:43 +00:00
Roles : database . StringArray { "role-key" } ,
2022-03-24 13:00:24 +00:00
GrantID : "grant-id" ,
State : domain . UserGrantStateActive ,
UserID : "user-id" ,
Username : "username" ,
UserType : domain . UserTypeMachine ,
UserResourceOwner : "resource-owner" ,
FirstName : "first-name" ,
LastName : "last-name" ,
Email : "email" ,
DisplayName : "display-name" ,
AvatarURL : "avatar-key" ,
PreferredLoginName : "login-name" ,
ResourceOwner : "ro" ,
OrgName : "" ,
OrgPrimaryDomain : "" ,
ProjectID : "project-id" ,
ProjectName : "project-name" ,
2022-01-14 09:45:50 +00:00
} ,
} ,
} ,
} ,
{
name : "prepareUserGrantsQuery one grant (no project)" ,
prepare : prepareUserGrantsQuery ,
want : want {
sqlExpectations : mockQueries (
userGrantsStmt ,
userGrantsCols ,
[ ] [ ] driver . Value {
{
"id" ,
testNow ,
testNow ,
20211111 ,
"grant-id" ,
2022-08-31 07:52:43 +00:00
database . StringArray { "role-key" } ,
2022-01-14 09:45:50 +00:00
domain . UserGrantStateActive ,
"user-id" ,
"username" ,
domain . UserTypeHuman ,
"resource-owner" ,
"first-name" ,
"last-name" ,
"email" ,
"display-name" ,
"avatar-key" ,
2022-03-24 13:00:24 +00:00
"login-name" ,
2022-01-14 09:45:50 +00:00
"ro" ,
"org-name" ,
"primary-domain" ,
"project-id" ,
nil ,
} ,
} ,
) ,
} ,
object : & UserGrants {
SearchResponse : SearchResponse {
Count : 1 ,
} ,
UserGrants : [ ] * UserGrant {
{
2022-03-24 13:00:24 +00:00
ID : "id" ,
CreationDate : testNow ,
ChangeDate : testNow ,
Sequence : 20211111 ,
2022-08-31 07:52:43 +00:00
Roles : database . StringArray { "role-key" } ,
2022-03-24 13:00:24 +00:00
GrantID : "grant-id" ,
State : domain . UserGrantStateActive ,
UserID : "user-id" ,
Username : "username" ,
UserType : domain . UserTypeHuman ,
UserResourceOwner : "resource-owner" ,
FirstName : "first-name" ,
LastName : "last-name" ,
Email : "email" ,
DisplayName : "display-name" ,
AvatarURL : "avatar-key" ,
PreferredLoginName : "login-name" ,
ResourceOwner : "ro" ,
OrgName : "org-name" ,
OrgPrimaryDomain : "primary-domain" ,
ProjectID : "project-id" ,
ProjectName : "" ,
} ,
} ,
} ,
} ,
{
name : "prepareUserGrantsQuery one grant (no loginname)" ,
prepare : prepareUserGrantsQuery ,
want : want {
sqlExpectations : mockQueries (
userGrantsStmt ,
userGrantsCols ,
[ ] [ ] driver . Value {
{
"id" ,
testNow ,
testNow ,
20211111 ,
"grant-id" ,
2022-08-31 07:52:43 +00:00
database . StringArray { "role-key" } ,
2022-03-24 13:00:24 +00:00
domain . UserGrantStateActive ,
"user-id" ,
"username" ,
domain . UserTypeHuman ,
"resource-owner" ,
"first-name" ,
"last-name" ,
"email" ,
"display-name" ,
"avatar-key" ,
nil ,
"ro" ,
"org-name" ,
"primary-domain" ,
"project-id" ,
"project-name" ,
} ,
} ,
) ,
} ,
object : & UserGrants {
SearchResponse : SearchResponse {
Count : 1 ,
} ,
UserGrants : [ ] * UserGrant {
{
ID : "id" ,
CreationDate : testNow ,
ChangeDate : testNow ,
Sequence : 20211111 ,
2022-08-31 07:52:43 +00:00
Roles : database . StringArray { "role-key" } ,
2022-03-24 13:00:24 +00:00
GrantID : "grant-id" ,
State : domain . UserGrantStateActive ,
UserID : "user-id" ,
Username : "username" ,
UserType : domain . UserTypeHuman ,
UserResourceOwner : "resource-owner" ,
FirstName : "first-name" ,
LastName : "last-name" ,
Email : "email" ,
DisplayName : "display-name" ,
AvatarURL : "avatar-key" ,
PreferredLoginName : "" ,
ResourceOwner : "ro" ,
OrgName : "org-name" ,
OrgPrimaryDomain : "primary-domain" ,
ProjectID : "project-id" ,
ProjectName : "project-name" ,
2022-01-14 09:45:50 +00:00
} ,
} ,
} ,
} ,
{
name : "prepareUserGrantsQuery multiple grants" ,
prepare : prepareUserGrantsQuery ,
want : want {
sqlExpectations : mockQueries (
userGrantsStmt ,
userGrantsCols ,
[ ] [ ] driver . Value {
{
"id" ,
testNow ,
testNow ,
20211111 ,
"grant-id" ,
2022-08-31 07:52:43 +00:00
database . StringArray { "role-key" } ,
2022-01-14 09:45:50 +00:00
domain . UserGrantStateActive ,
"user-id" ,
"username" ,
domain . UserTypeHuman ,
"resource-owner" ,
"first-name" ,
"last-name" ,
"email" ,
"display-name" ,
"avatar-key" ,
2022-03-24 13:00:24 +00:00
"login-name" ,
2022-01-14 09:45:50 +00:00
"ro" ,
"org-name" ,
"primary-domain" ,
"project-id" ,
"project-name" ,
} ,
{
"id" ,
testNow ,
testNow ,
20211111 ,
"grant-id" ,
2022-08-31 07:52:43 +00:00
database . StringArray { "role-key" } ,
2022-01-14 09:45:50 +00:00
domain . UserGrantStateActive ,
"user-id" ,
"username" ,
domain . UserTypeHuman ,
"resource-owner" ,
"first-name" ,
"last-name" ,
"email" ,
"display-name" ,
"avatar-key" ,
2022-03-24 13:00:24 +00:00
"login-name" ,
2022-01-14 09:45:50 +00:00
"ro" ,
"org-name" ,
"primary-domain" ,
"project-id" ,
"project-name" ,
} ,
} ,
) ,
} ,
object : & UserGrants {
SearchResponse : SearchResponse {
Count : 2 ,
} ,
UserGrants : [ ] * UserGrant {
{
2022-03-24 13:00:24 +00:00
ID : "id" ,
CreationDate : testNow ,
ChangeDate : testNow ,
Sequence : 20211111 ,
2022-08-31 07:52:43 +00:00
Roles : database . StringArray { "role-key" } ,
2022-03-24 13:00:24 +00:00
GrantID : "grant-id" ,
State : domain . UserGrantStateActive ,
UserID : "user-id" ,
Username : "username" ,
UserType : domain . UserTypeHuman ,
UserResourceOwner : "resource-owner" ,
FirstName : "first-name" ,
LastName : "last-name" ,
Email : "email" ,
DisplayName : "display-name" ,
AvatarURL : "avatar-key" ,
PreferredLoginName : "login-name" ,
ResourceOwner : "ro" ,
OrgName : "org-name" ,
OrgPrimaryDomain : "primary-domain" ,
ProjectID : "project-id" ,
ProjectName : "project-name" ,
2022-01-14 09:45:50 +00:00
} ,
{
2022-03-24 13:00:24 +00:00
ID : "id" ,
CreationDate : testNow ,
ChangeDate : testNow ,
Sequence : 20211111 ,
2022-08-31 07:52:43 +00:00
Roles : database . StringArray { "role-key" } ,
2022-03-24 13:00:24 +00:00
GrantID : "grant-id" ,
State : domain . UserGrantStateActive ,
UserID : "user-id" ,
Username : "username" ,
UserType : domain . UserTypeHuman ,
UserResourceOwner : "resource-owner" ,
FirstName : "first-name" ,
LastName : "last-name" ,
Email : "email" ,
DisplayName : "display-name" ,
AvatarURL : "avatar-key" ,
PreferredLoginName : "login-name" ,
ResourceOwner : "ro" ,
OrgName : "org-name" ,
OrgPrimaryDomain : "primary-domain" ,
ProjectID : "project-id" ,
ProjectName : "project-name" ,
2022-01-14 09:45:50 +00:00
} ,
} ,
} ,
} ,
{
name : "prepareUserGrantsQuery sql err" ,
prepare : prepareUserGrantsQuery ,
want : want {
sqlExpectations : mockQueryErr (
userGrantsStmt ,
sql . ErrConnDone ,
) ,
err : func ( err error ) ( error , bool ) {
if ! errors . Is ( err , sql . ErrConnDone ) {
return fmt . Errorf ( "err should be sql.ErrConnDone got: %w" , err ) , false
}
return nil , true
} ,
} ,
2023-08-22 10:49:22 +00:00
object : ( * UserGrants ) ( nil ) ,
2022-01-14 09:45:50 +00:00
} ,
}
for _ , tt := range tests {
t . Run ( tt . name , func ( t * testing . T ) {
2023-02-27 21:36:43 +00:00
assertPrepare ( t , tt . prepare , tt . object , tt . want . sqlExpectations , tt . want . err , defaultPrepareArgs ... )
2022-01-14 09:45:50 +00:00
} )
}
}