2022-01-14 10:45:50 +01:00
package query
import (
"database/sql"
"database/sql/driver"
"errors"
"fmt"
"regexp"
"testing"
2022-08-31 09:52:43 +02:00
"github.com/zitadel/zitadel/internal/database"
2022-04-27 01:01:45 +02:00
"github.com/zitadel/zitadel/internal/domain"
2023-12-08 16:30:55 +02:00
"github.com/zitadel/zitadel/internal/zerrors"
2022-01-14 10:45:50 +01:00
)
var (
userGrantStmt = regexp . QuoteMeta (
2024-01-08 16:26:30 +01:00
"SELECT projections.user_grants4.id" +
", projections.user_grants4.creation_date" +
", projections.user_grants4.change_date" +
", projections.user_grants4.sequence" +
", projections.user_grants4.grant_id" +
", projections.user_grants4.roles" +
", projections.user_grants4.state" +
", projections.user_grants4.user_id" +
2023-12-05 19:01:03 +02:00
", projections.users10.username" +
", projections.users10.type" +
", projections.users10.resource_owner" +
", projections.users10_humans.first_name" +
", projections.users10_humans.last_name" +
", projections.users10_humans.email" +
", projections.users10_humans.display_name" +
", projections.users10_humans.avatar_key" +
2023-11-20 16:21:08 +01:00
", projections.login_names3.login_name" +
2024-01-08 16:26:30 +01:00
", projections.user_grants4.resource_owner" +
2023-09-07 06:54:51 +02:00
", projections.orgs1.name" +
", projections.orgs1.primary_domain" +
2024-01-08 16:26:30 +01:00
", projections.user_grants4.project_id" +
2023-11-20 16:21:08 +01:00
", projections.projects4.name" +
2024-01-24 11:36:04 +01:00
", granted_orgs.id" +
", granted_orgs.name" +
", granted_orgs.primary_domain" +
2024-01-08 16:26:30 +01:00
" FROM projections.user_grants4" +
" LEFT JOIN projections.users10 ON projections.user_grants4.user_id = projections.users10.id AND projections.user_grants4.instance_id = projections.users10.instance_id" +
" LEFT JOIN projections.users10_humans ON projections.user_grants4.user_id = projections.users10_humans.user_id AND projections.user_grants4.instance_id = projections.users10_humans.instance_id" +
" LEFT JOIN projections.orgs1 ON projections.user_grants4.resource_owner = projections.orgs1.id AND projections.user_grants4.instance_id = projections.orgs1.instance_id" +
" LEFT JOIN projections.projects4 ON projections.user_grants4.project_id = projections.projects4.id AND projections.user_grants4.instance_id = projections.projects4.instance_id" +
2024-01-24 11:36:04 +01:00
" LEFT JOIN projections.orgs1 AS granted_orgs ON projections.users10.resource_owner = granted_orgs.id AND projections.users10.instance_id = granted_orgs.instance_id" +
2024-01-08 16:26:30 +01:00
" LEFT JOIN projections.login_names3 ON projections.user_grants4.user_id = projections.login_names3.user_id AND projections.user_grants4.instance_id = projections.login_names3.instance_id" +
2023-02-27 22:36:43 +01:00
` AS OF SYSTEM TIME '-1 ms' ` +
2023-11-20 16:21:08 +01:00
" WHERE projections.login_names3.is_primary = $1" )
2022-01-14 10:45:50 +01: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 14:00:24 +01:00
"login_name" ,
2022-01-14 10:45:50 +01:00
"resource_owner" , //user_grant resource owner
"name" , //org name
"primary_domain" ,
"project_id" ,
2024-01-24 11:36:04 +01:00
"name" , // project name
"id" , // granted org id
"name" , // granted org name
"primary_domain" , // granted org domain
2022-01-14 10:45:50 +01:00
}
userGrantsStmt = regexp . QuoteMeta (
2024-01-08 16:26:30 +01:00
"SELECT projections.user_grants4.id" +
", projections.user_grants4.creation_date" +
", projections.user_grants4.change_date" +
", projections.user_grants4.sequence" +
", projections.user_grants4.grant_id" +
", projections.user_grants4.roles" +
", projections.user_grants4.state" +
", projections.user_grants4.user_id" +
2023-12-05 19:01:03 +02:00
", projections.users10.username" +
", projections.users10.type" +
", projections.users10.resource_owner" +
", projections.users10_humans.first_name" +
", projections.users10_humans.last_name" +
", projections.users10_humans.email" +
", projections.users10_humans.display_name" +
", projections.users10_humans.avatar_key" +
2023-11-20 16:21:08 +01:00
", projections.login_names3.login_name" +
2024-01-08 16:26:30 +01:00
", projections.user_grants4.resource_owner" +
2023-09-07 06:54:51 +02:00
", projections.orgs1.name" +
", projections.orgs1.primary_domain" +
2024-01-08 16:26:30 +01:00
", projections.user_grants4.project_id" +
2023-11-20 16:21:08 +01:00
", projections.projects4.name" +
2024-01-24 11:36:04 +01:00
", granted_orgs.id" +
", granted_orgs.name" +
", granted_orgs.primary_domain" +
2022-01-14 10:45:50 +01:00
", COUNT(*) OVER ()" +
2024-01-08 16:26:30 +01:00
" FROM projections.user_grants4" +
" LEFT JOIN projections.users10 ON projections.user_grants4.user_id = projections.users10.id AND projections.user_grants4.instance_id = projections.users10.instance_id" +
" LEFT JOIN projections.users10_humans ON projections.user_grants4.user_id = projections.users10_humans.user_id AND projections.user_grants4.instance_id = projections.users10_humans.instance_id" +
" LEFT JOIN projections.orgs1 ON projections.user_grants4.resource_owner = projections.orgs1.id AND projections.user_grants4.instance_id = projections.orgs1.instance_id" +
" LEFT JOIN projections.projects4 ON projections.user_grants4.project_id = projections.projects4.id AND projections.user_grants4.instance_id = projections.projects4.instance_id" +
2024-01-24 11:36:04 +01:00
" LEFT JOIN projections.orgs1 AS granted_orgs ON projections.users10.resource_owner = granted_orgs.id AND projections.users10.instance_id = granted_orgs.instance_id" +
2024-01-08 16:26:30 +01:00
" LEFT JOIN projections.login_names3 ON projections.user_grants4.user_id = projections.login_names3.user_id AND projections.user_grants4.instance_id = projections.login_names3.instance_id" +
2023-02-27 22:36:43 +01:00
` AS OF SYSTEM TIME '-1 ms' ` +
2023-11-20 16:21:08 +01:00
" WHERE projections.login_names3.is_primary = $1" )
2022-01-14 10:45:50 +01: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 12:49:22 +02:00
sqlExpectations : mockQueriesScanErr (
2022-01-14 10:45:50 +01:00
userGrantStmt ,
nil ,
nil ,
) ,
err : func ( err error ) ( error , bool ) {
2023-12-08 16:30:55 +02:00
if ! zerrors . IsNotFound ( err ) {
2022-01-14 10:45:50 +01:00
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" ,
2023-10-19 12:19:10 +02:00
database . TextArray [ string ] { "role-key" } ,
2022-01-14 10:45:50 +01:00
domain . UserGrantStateActive ,
"user-id" ,
"username" ,
domain . UserTypeHuman ,
"resource-owner" ,
"first-name" ,
"last-name" ,
"email" ,
"display-name" ,
"avatar-key" ,
2022-03-24 14:00:24 +01:00
"login-name" ,
2022-01-14 10:45:50 +01:00
"ro" ,
"org-name" ,
"primary-domain" ,
"project-id" ,
"project-name" ,
2024-01-24 11:36:04 +01:00
"granted-org-id" ,
"granted-org-name" ,
"granted-org-domain" ,
2022-01-14 10:45:50 +01:00
} ,
) ,
} ,
object : & UserGrant {
2022-03-24 14:00:24 +01:00
ID : "id" ,
CreationDate : testNow ,
ChangeDate : testNow ,
Sequence : 20211111 ,
2023-10-19 12:19:10 +02:00
Roles : database . TextArray [ string ] { "role-key" } ,
2022-03-24 14:00:24 +01: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" ,
2024-01-24 11:36:04 +01:00
GrantedOrgID : "granted-org-id" ,
GrantedOrgName : "granted-org-name" ,
GrantedOrgDomain : "granted-org-domain" ,
2022-01-14 10:45:50 +01:00
} ,
} ,
{
name : "prepareUserGrantQuery machine user found" ,
prepare : prepareUserGrantQuery ,
want : want {
sqlExpectations : mockQuery (
userGrantStmt ,
userGrantCols ,
[ ] driver . Value {
"id" ,
testNow ,
testNow ,
20211111 ,
"grant-id" ,
2023-10-19 12:19:10 +02:00
database . TextArray [ string ] { "role-key" } ,
2022-01-14 10:45:50 +01:00
domain . UserGrantStateActive ,
"user-id" ,
"username" ,
domain . UserTypeMachine ,
"resource-owner" ,
nil ,
nil ,
nil ,
nil ,
nil ,
2022-03-24 14:00:24 +01:00
"login-name" ,
2022-01-14 10:45:50 +01:00
"ro" ,
"org-name" ,
"primary-domain" ,
"project-id" ,
"project-name" ,
2024-01-24 11:36:04 +01:00
"granted-org-id" ,
"granted-org-name" ,
"granted-org-domain" ,
2022-01-14 10:45:50 +01:00
} ,
) ,
} ,
object : & UserGrant {
2022-03-24 14:00:24 +01:00
ID : "id" ,
CreationDate : testNow ,
ChangeDate : testNow ,
Sequence : 20211111 ,
2023-10-19 12:19:10 +02:00
Roles : database . TextArray [ string ] { "role-key" } ,
2022-03-24 14:00:24 +01: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" ,
2024-01-24 11:36:04 +01:00
GrantedOrgID : "granted-org-id" ,
GrantedOrgName : "granted-org-name" ,
GrantedOrgDomain : "granted-org-domain" ,
2022-01-14 10:45:50 +01:00
} ,
} ,
{
name : "prepareUserGrantQuery (no org) found" ,
prepare : prepareUserGrantQuery ,
want : want {
sqlExpectations : mockQuery (
userGrantStmt ,
userGrantCols ,
[ ] driver . Value {
"id" ,
testNow ,
testNow ,
20211111 ,
"grant-id" ,
2023-10-19 12:19:10 +02:00
database . TextArray [ string ] { "role-key" } ,
2022-01-14 10:45:50 +01:00
domain . UserGrantStateActive ,
"user-id" ,
"username" ,
domain . UserTypeHuman ,
"resource-owner" ,
"first-name" ,
"last-name" ,
"email" ,
"display-name" ,
"avatar-key" ,
2022-03-24 14:00:24 +01:00
"login-name" ,
2022-01-14 10:45:50 +01:00
"ro" ,
nil ,
nil ,
"project-id" ,
"project-name" ,
2024-01-24 11:36:04 +01:00
"granted-org-id" ,
"granted-org-name" ,
"granted-org-domain" ,
2022-01-14 10:45:50 +01:00
} ,
) ,
} ,
object : & UserGrant {
2022-03-24 14:00:24 +01:00
ID : "id" ,
CreationDate : testNow ,
ChangeDate : testNow ,
Sequence : 20211111 ,
2023-10-19 12:19:10 +02:00
Roles : database . TextArray [ string ] { "role-key" } ,
2022-03-24 14:00:24 +01: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" ,
2024-01-24 11:36:04 +01:00
GrantedOrgID : "granted-org-id" ,
GrantedOrgName : "granted-org-name" ,
GrantedOrgDomain : "granted-org-domain" ,
2022-01-14 10:45:50 +01:00
} ,
} ,
{
name : "prepareUserGrantQuery (no project) found" ,
prepare : prepareUserGrantQuery ,
want : want {
sqlExpectations : mockQuery (
userGrantStmt ,
userGrantCols ,
[ ] driver . Value {
"id" ,
testNow ,
testNow ,
20211111 ,
"grant-id" ,
2023-10-19 12:19:10 +02:00
database . TextArray [ string ] { "role-key" } ,
2022-01-14 10:45:50 +01:00
domain . UserGrantStateActive ,
"user-id" ,
"username" ,
domain . UserTypeHuman ,
"resource-owner" ,
"first-name" ,
"last-name" ,
"email" ,
"display-name" ,
"avatar-key" ,
2022-03-24 14:00:24 +01:00
"login-name" ,
2022-01-14 10:45:50 +01:00
"ro" ,
"org-name" ,
"primary-domain" ,
"project-id" ,
nil ,
2024-01-24 11:36:04 +01:00
"granted-org-id" ,
"granted-org-name" ,
"granted-org-domain" ,
2022-01-14 10:45:50 +01:00
} ,
) ,
} ,
object : & UserGrant {
2022-03-24 14:00:24 +01:00
ID : "id" ,
CreationDate : testNow ,
ChangeDate : testNow ,
Sequence : 20211111 ,
2023-10-19 12:19:10 +02:00
Roles : database . TextArray [ string ] { "role-key" } ,
2022-03-24 14:00:24 +01: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 : "" ,
2024-01-24 11:36:04 +01:00
GrantedOrgID : "granted-org-id" ,
GrantedOrgName : "granted-org-name" ,
GrantedOrgDomain : "granted-org-domain" ,
2022-03-24 14:00:24 +01:00
} ,
} ,
{
name : "prepareUserGrantQuery (no loginname) found" ,
prepare : prepareUserGrantQuery ,
want : want {
sqlExpectations : mockQuery (
userGrantStmt ,
userGrantCols ,
[ ] driver . Value {
"id" ,
testNow ,
testNow ,
20211111 ,
"grant-id" ,
2023-10-19 12:19:10 +02:00
database . TextArray [ string ] { "role-key" } ,
2022-03-24 14:00:24 +01: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" ,
2024-01-24 11:36:04 +01:00
"granted-org-id" ,
"granted-org-name" ,
"granted-org-domain" ,
2022-03-24 14:00:24 +01:00
} ,
) ,
} ,
object : & UserGrant {
ID : "id" ,
CreationDate : testNow ,
ChangeDate : testNow ,
Sequence : 20211111 ,
2023-10-19 12:19:10 +02:00
Roles : database . TextArray [ string ] { "role-key" } ,
2022-03-24 14:00:24 +01: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" ,
2024-01-24 11:36:04 +01:00
GrantedOrgID : "granted-org-id" ,
GrantedOrgName : "granted-org-name" ,
GrantedOrgDomain : "granted-org-domain" ,
2022-01-14 10:45:50 +01: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 12:49:22 +02:00
object : ( * UserGrant ) ( nil ) ,
2022-01-14 10:45:50 +01: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" ,
2023-10-19 12:19:10 +02:00
database . TextArray [ string ] { "role-key" } ,
2022-01-14 10:45:50 +01:00
domain . UserGrantStateActive ,
"user-id" ,
"username" ,
domain . UserTypeHuman ,
"resource-owner" ,
"first-name" ,
"last-name" ,
"email" ,
"display-name" ,
"avatar-key" ,
2022-03-24 14:00:24 +01:00
"login-name" ,
2022-01-14 10:45:50 +01:00
"ro" ,
"org-name" ,
"primary-domain" ,
"project-id" ,
"project-name" ,
2024-01-24 11:36:04 +01:00
"granted-org-id" ,
"granted-org-name" ,
"granted-org-domain" ,
2022-01-14 10:45:50 +01:00
} ,
} ,
) ,
} ,
object : & UserGrants {
SearchResponse : SearchResponse {
Count : 1 ,
} ,
UserGrants : [ ] * UserGrant {
{
2022-03-24 14:00:24 +01:00
ID : "id" ,
CreationDate : testNow ,
ChangeDate : testNow ,
Sequence : 20211111 ,
2023-10-19 12:19:10 +02:00
Roles : database . TextArray [ string ] { "role-key" } ,
2022-03-24 14:00:24 +01: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" ,
2024-01-24 11:36:04 +01:00
GrantedOrgID : "granted-org-id" ,
GrantedOrgName : "granted-org-name" ,
GrantedOrgDomain : "granted-org-domain" ,
2022-01-14 10:45:50 +01:00
} ,
} ,
} ,
} ,
{
name : "prepareUserGrantsQuery one grant (machine user)" ,
prepare : prepareUserGrantsQuery ,
want : want {
sqlExpectations : mockQueries (
userGrantsStmt ,
userGrantsCols ,
[ ] [ ] driver . Value {
{
"id" ,
testNow ,
testNow ,
20211111 ,
"grant-id" ,
2023-10-19 12:19:10 +02:00
database . TextArray [ string ] { "role-key" } ,
2022-01-14 10:45:50 +01:00
domain . UserGrantStateActive ,
"user-id" ,
"username" ,
domain . UserTypeMachine ,
"resource-owner" ,
nil ,
nil ,
nil ,
nil ,
nil ,
2022-03-24 14:00:24 +01:00
"login-name" ,
2022-01-14 10:45:50 +01:00
"ro" ,
"org-name" ,
"primary-domain" ,
"project-id" ,
"project-name" ,
2024-01-24 11:36:04 +01:00
"granted-org-id" ,
"granted-org-name" ,
"granted-org-domain" ,
2022-01-14 10:45:50 +01:00
} ,
} ,
) ,
} ,
object : & UserGrants {
SearchResponse : SearchResponse {
Count : 1 ,
} ,
UserGrants : [ ] * UserGrant {
{
2022-03-24 14:00:24 +01:00
ID : "id" ,
CreationDate : testNow ,
ChangeDate : testNow ,
Sequence : 20211111 ,
2023-10-19 12:19:10 +02:00
Roles : database . TextArray [ string ] { "role-key" } ,
2022-03-24 14:00:24 +01: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" ,
2024-01-24 11:36:04 +01:00
GrantedOrgID : "granted-org-id" ,
GrantedOrgName : "granted-org-name" ,
GrantedOrgDomain : "granted-org-domain" ,
2022-01-14 10:45:50 +01:00
} ,
} ,
} ,
} ,
{
name : "prepareUserGrantsQuery one grant (no org)" ,
prepare : prepareUserGrantsQuery ,
want : want {
sqlExpectations : mockQueries (
userGrantsStmt ,
userGrantsCols ,
[ ] [ ] driver . Value {
{
"id" ,
testNow ,
testNow ,
20211111 ,
"grant-id" ,
2023-10-19 12:19:10 +02:00
database . TextArray [ string ] { "role-key" } ,
2022-01-14 10:45:50 +01:00
domain . UserGrantStateActive ,
"user-id" ,
"username" ,
domain . UserTypeMachine ,
"resource-owner" ,
"first-name" ,
"last-name" ,
"email" ,
"display-name" ,
"avatar-key" ,
2022-03-24 14:00:24 +01:00
"login-name" ,
2022-01-14 10:45:50 +01:00
"ro" ,
nil ,
nil ,
"project-id" ,
"project-name" ,
2024-01-24 11:36:04 +01:00
"granted-org-id" ,
"granted-org-name" ,
"granted-org-domain" ,
2022-01-14 10:45:50 +01:00
} ,
} ,
) ,
} ,
object : & UserGrants {
SearchResponse : SearchResponse {
Count : 1 ,
} ,
UserGrants : [ ] * UserGrant {
{
2022-03-24 14:00:24 +01:00
ID : "id" ,
CreationDate : testNow ,
ChangeDate : testNow ,
Sequence : 20211111 ,
2023-10-19 12:19:10 +02:00
Roles : database . TextArray [ string ] { "role-key" } ,
2022-03-24 14:00:24 +01: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" ,
2024-01-24 11:36:04 +01:00
GrantedOrgID : "granted-org-id" ,
GrantedOrgName : "granted-org-name" ,
GrantedOrgDomain : "granted-org-domain" ,
2022-01-14 10:45:50 +01:00
} ,
} ,
} ,
} ,
{
name : "prepareUserGrantsQuery one grant (no project)" ,
prepare : prepareUserGrantsQuery ,
want : want {
sqlExpectations : mockQueries (
userGrantsStmt ,
userGrantsCols ,
[ ] [ ] driver . Value {
{
"id" ,
testNow ,
testNow ,
20211111 ,
"grant-id" ,
2023-10-19 12:19:10 +02:00
database . TextArray [ string ] { "role-key" } ,
2022-01-14 10:45:50 +01:00
domain . UserGrantStateActive ,
"user-id" ,
"username" ,
domain . UserTypeHuman ,
"resource-owner" ,
"first-name" ,
"last-name" ,
"email" ,
"display-name" ,
"avatar-key" ,
2022-03-24 14:00:24 +01:00
"login-name" ,
2022-01-14 10:45:50 +01:00
"ro" ,
"org-name" ,
"primary-domain" ,
"project-id" ,
nil ,
2024-01-24 11:36:04 +01:00
"granted-org-id" ,
"granted-org-name" ,
"granted-org-domain" ,
2022-01-14 10:45:50 +01:00
} ,
} ,
) ,
} ,
object : & UserGrants {
SearchResponse : SearchResponse {
Count : 1 ,
} ,
UserGrants : [ ] * UserGrant {
{
2022-03-24 14:00:24 +01:00
ID : "id" ,
CreationDate : testNow ,
ChangeDate : testNow ,
Sequence : 20211111 ,
2023-10-19 12:19:10 +02:00
Roles : database . TextArray [ string ] { "role-key" } ,
2022-03-24 14:00:24 +01: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 : "" ,
2024-01-24 11:36:04 +01:00
GrantedOrgID : "granted-org-id" ,
GrantedOrgName : "granted-org-name" ,
GrantedOrgDomain : "granted-org-domain" ,
2022-03-24 14:00:24 +01:00
} ,
} ,
} ,
} ,
{
name : "prepareUserGrantsQuery one grant (no loginname)" ,
prepare : prepareUserGrantsQuery ,
want : want {
sqlExpectations : mockQueries (
userGrantsStmt ,
userGrantsCols ,
[ ] [ ] driver . Value {
{
"id" ,
testNow ,
testNow ,
20211111 ,
"grant-id" ,
2023-10-19 12:19:10 +02:00
database . TextArray [ string ] { "role-key" } ,
2022-03-24 14:00:24 +01: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" ,
2024-01-24 11:36:04 +01:00
"granted-org-id" ,
"granted-org-name" ,
"granted-org-domain" ,
2022-03-24 14:00:24 +01:00
} ,
} ,
) ,
} ,
object : & UserGrants {
SearchResponse : SearchResponse {
Count : 1 ,
} ,
UserGrants : [ ] * UserGrant {
{
ID : "id" ,
CreationDate : testNow ,
ChangeDate : testNow ,
Sequence : 20211111 ,
2023-10-19 12:19:10 +02:00
Roles : database . TextArray [ string ] { "role-key" } ,
2022-03-24 14:00:24 +01: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" ,
2024-01-24 11:36:04 +01:00
GrantedOrgID : "granted-org-id" ,
GrantedOrgName : "granted-org-name" ,
GrantedOrgDomain : "granted-org-domain" ,
2022-01-14 10:45:50 +01:00
} ,
} ,
} ,
} ,
{
name : "prepareUserGrantsQuery multiple grants" ,
prepare : prepareUserGrantsQuery ,
want : want {
sqlExpectations : mockQueries (
userGrantsStmt ,
userGrantsCols ,
[ ] [ ] driver . Value {
{
"id" ,
testNow ,
testNow ,
20211111 ,
"grant-id" ,
2023-10-19 12:19:10 +02:00
database . TextArray [ string ] { "role-key" } ,
2022-01-14 10:45:50 +01:00
domain . UserGrantStateActive ,
"user-id" ,
"username" ,
domain . UserTypeHuman ,
"resource-owner" ,
"first-name" ,
"last-name" ,
"email" ,
"display-name" ,
"avatar-key" ,
2022-03-24 14:00:24 +01:00
"login-name" ,
2022-01-14 10:45:50 +01:00
"ro" ,
"org-name" ,
"primary-domain" ,
"project-id" ,
"project-name" ,
2024-01-24 11:36:04 +01:00
"granted-org-id" ,
"granted-org-name" ,
"granted-org-domain" ,
2022-01-14 10:45:50 +01:00
} ,
{
"id" ,
testNow ,
testNow ,
20211111 ,
"grant-id" ,
2023-10-19 12:19:10 +02:00
database . TextArray [ string ] { "role-key" } ,
2022-01-14 10:45:50 +01:00
domain . UserGrantStateActive ,
"user-id" ,
"username" ,
domain . UserTypeHuman ,
"resource-owner" ,
"first-name" ,
"last-name" ,
"email" ,
"display-name" ,
"avatar-key" ,
2022-03-24 14:00:24 +01:00
"login-name" ,
2022-01-14 10:45:50 +01:00
"ro" ,
"org-name" ,
"primary-domain" ,
"project-id" ,
"project-name" ,
2024-01-24 11:36:04 +01:00
"granted-org-id" ,
"granted-org-name" ,
"granted-org-domain" ,
2022-01-14 10:45:50 +01:00
} ,
} ,
) ,
} ,
object : & UserGrants {
SearchResponse : SearchResponse {
Count : 2 ,
} ,
UserGrants : [ ] * UserGrant {
{
2022-03-24 14:00:24 +01:00
ID : "id" ,
CreationDate : testNow ,
ChangeDate : testNow ,
Sequence : 20211111 ,
2023-10-19 12:19:10 +02:00
Roles : database . TextArray [ string ] { "role-key" } ,
2022-03-24 14:00:24 +01: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" ,
2024-01-24 11:36:04 +01:00
GrantedOrgID : "granted-org-id" ,
GrantedOrgName : "granted-org-name" ,
GrantedOrgDomain : "granted-org-domain" ,
2022-01-14 10:45:50 +01:00
} ,
{
2022-03-24 14:00:24 +01:00
ID : "id" ,
CreationDate : testNow ,
ChangeDate : testNow ,
Sequence : 20211111 ,
2023-10-19 12:19:10 +02:00
Roles : database . TextArray [ string ] { "role-key" } ,
2022-03-24 14:00:24 +01: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" ,
2024-01-24 11:36:04 +01:00
GrantedOrgID : "granted-org-id" ,
GrantedOrgName : "granted-org-name" ,
GrantedOrgDomain : "granted-org-domain" ,
2022-01-14 10:45:50 +01: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 12:49:22 +02:00
object : ( * UserGrants ) ( nil ) ,
2022-01-14 10:45:50 +01:00
} ,
}
for _ , tt := range tests {
t . Run ( tt . name , func ( t * testing . T ) {
2023-02-27 22:36:43 +01:00
assertPrepare ( t , tt . prepare , tt . object , tt . want . sqlExpectations , tt . want . err , defaultPrepareArgs ... )
2022-01-14 10:45:50 +01:00
} )
}
}