feat: projections auto create their tables (#3324)

* begin init checks for projections

* first projection checks

* debug notification providers with query fixes

* more projections and first index

* more projections

* more projections

* finish projections

* fix tests (remove db name)

* create tables in setup

* fix logging / error handling

* add tenant to views

* rename tenant to instance_id

* add instance_id to all projections

* add instance_id to all queries

* correct instance_id on projections

* add instance_id to failed_events

* use separate context for instance

* implement features projection

* implement features projection

* remove unique constraint from setup when migration failed

* add error to failed setup event

* add instance_id to primary keys

* fix IAM projection

* remove old migrations folder

* fix keysFromYAML test
This commit is contained in:
Livio Amstutz
2022-03-23 09:02:39 +01:00
committed by GitHub
parent 9e13b70a3d
commit 56b916a2b0
400 changed files with 6508 additions and 8890 deletions

View File

@@ -8,10 +8,11 @@ import (
"regexp"
"testing"
"github.com/lib/pq"
"github.com/caos/zitadel/internal/crypto"
"github.com/caos/zitadel/internal/domain"
errs "github.com/caos/zitadel/internal/errors"
"github.com/lib/pq"
)
func Test_IDPPrepares(t *testing.T) {
@@ -30,33 +31,33 @@ func Test_IDPPrepares(t *testing.T) {
prepare: prepareIDPByIDQuery,
want: want{
sqlExpectations: mockQuery(
regexp.QuoteMeta(`SELECT zitadel.projections.idps.id,`+
` zitadel.projections.idps.resource_owner,`+
` zitadel.projections.idps.creation_date,`+
` zitadel.projections.idps.change_date,`+
` zitadel.projections.idps.sequence,`+
` zitadel.projections.idps.state,`+
` zitadel.projections.idps.name,`+
` zitadel.projections.idps.styling_type,`+
` zitadel.projections.idps.owner_type,`+
` zitadel.projections.idps.auto_register,`+
` zitadel.projections.idps_oidc_config.idp_id,`+
` zitadel.projections.idps_oidc_config.client_id,`+
` zitadel.projections.idps_oidc_config.client_secret,`+
` zitadel.projections.idps_oidc_config.issuer,`+
` zitadel.projections.idps_oidc_config.scopes,`+
` zitadel.projections.idps_oidc_config.display_name_mapping,`+
` zitadel.projections.idps_oidc_config.username_mapping,`+
` zitadel.projections.idps_oidc_config.authorization_endpoint,`+
` zitadel.projections.idps_oidc_config.token_endpoint,`+
` zitadel.projections.idps_jwt_config.idp_id,`+
` zitadel.projections.idps_jwt_config.issuer,`+
` zitadel.projections.idps_jwt_config.keys_endpoint,`+
` zitadel.projections.idps_jwt_config.header_name,`+
` zitadel.projections.idps_jwt_config.endpoint`+
` FROM zitadel.projections.idps`+
` LEFT JOIN zitadel.projections.idps_oidc_config ON zitadel.projections.idps.id = zitadel.projections.idps_oidc_config.idp_id`+
` LEFT JOIN zitadel.projections.idps_jwt_config ON zitadel.projections.idps.id = zitadel.projections.idps_jwt_config.idp_id`),
regexp.QuoteMeta(`SELECT projections.idps.id,`+
` projections.idps.resource_owner,`+
` projections.idps.creation_date,`+
` projections.idps.change_date,`+
` projections.idps.sequence,`+
` projections.idps.state,`+
` projections.idps.name,`+
` projections.idps.styling_type,`+
` projections.idps.owner_type,`+
` projections.idps.auto_register,`+
` projections.idps_oidc_config.idp_id,`+
` projections.idps_oidc_config.client_id,`+
` projections.idps_oidc_config.client_secret,`+
` projections.idps_oidc_config.issuer,`+
` projections.idps_oidc_config.scopes,`+
` projections.idps_oidc_config.display_name_mapping,`+
` projections.idps_oidc_config.username_mapping,`+
` projections.idps_oidc_config.authorization_endpoint,`+
` projections.idps_oidc_config.token_endpoint,`+
` projections.idps_jwt_config.idp_id,`+
` projections.idps_jwt_config.issuer,`+
` projections.idps_jwt_config.keys_endpoint,`+
` projections.idps_jwt_config.header_name,`+
` projections.idps_jwt_config.endpoint`+
` FROM projections.idps`+
` LEFT JOIN projections.idps_oidc_config ON projections.idps.id = projections.idps_oidc_config.idp_id`+
` LEFT JOIN projections.idps_jwt_config ON projections.idps.id = projections.idps_jwt_config.idp_id`),
nil,
nil,
),
@@ -74,33 +75,33 @@ func Test_IDPPrepares(t *testing.T) {
prepare: prepareIDPByIDQuery,
want: want{
sqlExpectations: mockQuery(
regexp.QuoteMeta(`SELECT zitadel.projections.idps.id,`+
` zitadel.projections.idps.resource_owner,`+
` zitadel.projections.idps.creation_date,`+
` zitadel.projections.idps.change_date,`+
` zitadel.projections.idps.sequence,`+
` zitadel.projections.idps.state,`+
` zitadel.projections.idps.name,`+
` zitadel.projections.idps.styling_type,`+
` zitadel.projections.idps.owner_type,`+
` zitadel.projections.idps.auto_register,`+
` zitadel.projections.idps_oidc_config.idp_id,`+
` zitadel.projections.idps_oidc_config.client_id,`+
` zitadel.projections.idps_oidc_config.client_secret,`+
` zitadel.projections.idps_oidc_config.issuer,`+
` zitadel.projections.idps_oidc_config.scopes,`+
` zitadel.projections.idps_oidc_config.display_name_mapping,`+
` zitadel.projections.idps_oidc_config.username_mapping,`+
` zitadel.projections.idps_oidc_config.authorization_endpoint,`+
` zitadel.projections.idps_oidc_config.token_endpoint,`+
` zitadel.projections.idps_jwt_config.idp_id,`+
` zitadel.projections.idps_jwt_config.issuer,`+
` zitadel.projections.idps_jwt_config.keys_endpoint,`+
` zitadel.projections.idps_jwt_config.header_name,`+
` zitadel.projections.idps_jwt_config.endpoint`+
` FROM zitadel.projections.idps`+
` LEFT JOIN zitadel.projections.idps_oidc_config ON zitadel.projections.idps.id = zitadel.projections.idps_oidc_config.idp_id`+
` LEFT JOIN zitadel.projections.idps_jwt_config ON zitadel.projections.idps.id = zitadel.projections.idps_jwt_config.idp_id`),
regexp.QuoteMeta(`SELECT projections.idps.id,`+
` projections.idps.resource_owner,`+
` projections.idps.creation_date,`+
` projections.idps.change_date,`+
` projections.idps.sequence,`+
` projections.idps.state,`+
` projections.idps.name,`+
` projections.idps.styling_type,`+
` projections.idps.owner_type,`+
` projections.idps.auto_register,`+
` projections.idps_oidc_config.idp_id,`+
` projections.idps_oidc_config.client_id,`+
` projections.idps_oidc_config.client_secret,`+
` projections.idps_oidc_config.issuer,`+
` projections.idps_oidc_config.scopes,`+
` projections.idps_oidc_config.display_name_mapping,`+
` projections.idps_oidc_config.username_mapping,`+
` projections.idps_oidc_config.authorization_endpoint,`+
` projections.idps_oidc_config.token_endpoint,`+
` projections.idps_jwt_config.idp_id,`+
` projections.idps_jwt_config.issuer,`+
` projections.idps_jwt_config.keys_endpoint,`+
` projections.idps_jwt_config.header_name,`+
` projections.idps_jwt_config.endpoint`+
` FROM projections.idps`+
` LEFT JOIN projections.idps_oidc_config ON projections.idps.id = projections.idps_oidc_config.idp_id`+
` LEFT JOIN projections.idps_jwt_config ON projections.idps.id = projections.idps_jwt_config.idp_id`),
[]string{
"id",
"resource_owner",
@@ -188,33 +189,33 @@ func Test_IDPPrepares(t *testing.T) {
prepare: prepareIDPByIDQuery,
want: want{
sqlExpectations: mockQuery(
regexp.QuoteMeta(`SELECT zitadel.projections.idps.id,`+
` zitadel.projections.idps.resource_owner,`+
` zitadel.projections.idps.creation_date,`+
` zitadel.projections.idps.change_date,`+
` zitadel.projections.idps.sequence,`+
` zitadel.projections.idps.state,`+
` zitadel.projections.idps.name,`+
` zitadel.projections.idps.styling_type,`+
` zitadel.projections.idps.owner_type,`+
` zitadel.projections.idps.auto_register,`+
` zitadel.projections.idps_oidc_config.idp_id,`+
` zitadel.projections.idps_oidc_config.client_id,`+
` zitadel.projections.idps_oidc_config.client_secret,`+
` zitadel.projections.idps_oidc_config.issuer,`+
` zitadel.projections.idps_oidc_config.scopes,`+
` zitadel.projections.idps_oidc_config.display_name_mapping,`+
` zitadel.projections.idps_oidc_config.username_mapping,`+
` zitadel.projections.idps_oidc_config.authorization_endpoint,`+
` zitadel.projections.idps_oidc_config.token_endpoint,`+
` zitadel.projections.idps_jwt_config.idp_id,`+
` zitadel.projections.idps_jwt_config.issuer,`+
` zitadel.projections.idps_jwt_config.keys_endpoint,`+
` zitadel.projections.idps_jwt_config.header_name,`+
` zitadel.projections.idps_jwt_config.endpoint`+
` FROM zitadel.projections.idps`+
` LEFT JOIN zitadel.projections.idps_oidc_config ON zitadel.projections.idps.id = zitadel.projections.idps_oidc_config.idp_id`+
` LEFT JOIN zitadel.projections.idps_jwt_config ON zitadel.projections.idps.id = zitadel.projections.idps_jwt_config.idp_id`),
regexp.QuoteMeta(`SELECT projections.idps.id,`+
` projections.idps.resource_owner,`+
` projections.idps.creation_date,`+
` projections.idps.change_date,`+
` projections.idps.sequence,`+
` projections.idps.state,`+
` projections.idps.name,`+
` projections.idps.styling_type,`+
` projections.idps.owner_type,`+
` projections.idps.auto_register,`+
` projections.idps_oidc_config.idp_id,`+
` projections.idps_oidc_config.client_id,`+
` projections.idps_oidc_config.client_secret,`+
` projections.idps_oidc_config.issuer,`+
` projections.idps_oidc_config.scopes,`+
` projections.idps_oidc_config.display_name_mapping,`+
` projections.idps_oidc_config.username_mapping,`+
` projections.idps_oidc_config.authorization_endpoint,`+
` projections.idps_oidc_config.token_endpoint,`+
` projections.idps_jwt_config.idp_id,`+
` projections.idps_jwt_config.issuer,`+
` projections.idps_jwt_config.keys_endpoint,`+
` projections.idps_jwt_config.header_name,`+
` projections.idps_jwt_config.endpoint`+
` FROM projections.idps`+
` LEFT JOIN projections.idps_oidc_config ON projections.idps.id = projections.idps_oidc_config.idp_id`+
` LEFT JOIN projections.idps_jwt_config ON projections.idps.id = projections.idps_jwt_config.idp_id`),
[]string{
"id",
"resource_owner",
@@ -298,33 +299,33 @@ func Test_IDPPrepares(t *testing.T) {
prepare: prepareIDPByIDQuery,
want: want{
sqlExpectations: mockQuery(
regexp.QuoteMeta(`SELECT zitadel.projections.idps.id,`+
` zitadel.projections.idps.resource_owner,`+
` zitadel.projections.idps.creation_date,`+
` zitadel.projections.idps.change_date,`+
` zitadel.projections.idps.sequence,`+
` zitadel.projections.idps.state,`+
` zitadel.projections.idps.name,`+
` zitadel.projections.idps.styling_type,`+
` zitadel.projections.idps.owner_type,`+
` zitadel.projections.idps.auto_register,`+
` zitadel.projections.idps_oidc_config.idp_id,`+
` zitadel.projections.idps_oidc_config.client_id,`+
` zitadel.projections.idps_oidc_config.client_secret,`+
` zitadel.projections.idps_oidc_config.issuer,`+
` zitadel.projections.idps_oidc_config.scopes,`+
` zitadel.projections.idps_oidc_config.display_name_mapping,`+
` zitadel.projections.idps_oidc_config.username_mapping,`+
` zitadel.projections.idps_oidc_config.authorization_endpoint,`+
` zitadel.projections.idps_oidc_config.token_endpoint,`+
` zitadel.projections.idps_jwt_config.idp_id,`+
` zitadel.projections.idps_jwt_config.issuer,`+
` zitadel.projections.idps_jwt_config.keys_endpoint,`+
` zitadel.projections.idps_jwt_config.header_name,`+
` zitadel.projections.idps_jwt_config.endpoint`+
` FROM zitadel.projections.idps`+
` LEFT JOIN zitadel.projections.idps_oidc_config ON zitadel.projections.idps.id = zitadel.projections.idps_oidc_config.idp_id`+
` LEFT JOIN zitadel.projections.idps_jwt_config ON zitadel.projections.idps.id = zitadel.projections.idps_jwt_config.idp_id`),
regexp.QuoteMeta(`SELECT projections.idps.id,`+
` projections.idps.resource_owner,`+
` projections.idps.creation_date,`+
` projections.idps.change_date,`+
` projections.idps.sequence,`+
` projections.idps.state,`+
` projections.idps.name,`+
` projections.idps.styling_type,`+
` projections.idps.owner_type,`+
` projections.idps.auto_register,`+
` projections.idps_oidc_config.idp_id,`+
` projections.idps_oidc_config.client_id,`+
` projections.idps_oidc_config.client_secret,`+
` projections.idps_oidc_config.issuer,`+
` projections.idps_oidc_config.scopes,`+
` projections.idps_oidc_config.display_name_mapping,`+
` projections.idps_oidc_config.username_mapping,`+
` projections.idps_oidc_config.authorization_endpoint,`+
` projections.idps_oidc_config.token_endpoint,`+
` projections.idps_jwt_config.idp_id,`+
` projections.idps_jwt_config.issuer,`+
` projections.idps_jwt_config.keys_endpoint,`+
` projections.idps_jwt_config.header_name,`+
` projections.idps_jwt_config.endpoint`+
` FROM projections.idps`+
` LEFT JOIN projections.idps_oidc_config ON projections.idps.id = projections.idps_oidc_config.idp_id`+
` LEFT JOIN projections.idps_jwt_config ON projections.idps.id = projections.idps_jwt_config.idp_id`),
[]string{
"id",
"resource_owner",
@@ -401,33 +402,33 @@ func Test_IDPPrepares(t *testing.T) {
prepare: prepareIDPByIDQuery,
want: want{
sqlExpectations: mockQueryErr(
regexp.QuoteMeta(`SELECT zitadel.projections.idps.id,`+
` zitadel.projections.idps.resource_owner,`+
` zitadel.projections.idps.creation_date,`+
` zitadel.projections.idps.change_date,`+
` zitadel.projections.idps.sequence,`+
` zitadel.projections.idps.state,`+
` zitadel.projections.idps.name,`+
` zitadel.projections.idps.styling_type,`+
` zitadel.projections.idps.owner_type,`+
` zitadel.projections.idps.auto_register,`+
` zitadel.projections.idps_oidc_config.idp_id,`+
` zitadel.projections.idps_oidc_config.client_id,`+
` zitadel.projections.idps_oidc_config.client_secret,`+
` zitadel.projections.idps_oidc_config.issuer,`+
` zitadel.projections.idps_oidc_config.scopes,`+
` zitadel.projections.idps_oidc_config.display_name_mapping,`+
` zitadel.projections.idps_oidc_config.username_mapping,`+
` zitadel.projections.idps_oidc_config.authorization_endpoint,`+
` zitadel.projections.idps_oidc_config.token_endpoint,`+
` zitadel.projections.idps_jwt_config.idp_id,`+
` zitadel.projections.idps_jwt_config.issuer,`+
` zitadel.projections.idps_jwt_config.keys_endpoint,`+
` zitadel.projections.idps_jwt_config.header_name,`+
` zitadel.projections.idps_jwt_config.endpoint`+
` FROM zitadel.projections.idps`+
` LEFT JOIN zitadel.projections.idps_oidc_config ON zitadel.projections.idps.id = zitadel.projections.idps_oidc_config.idp_id`+
` LEFT JOIN zitadel.projections.idps_jwt_config ON zitadel.projections.idps.id = zitadel.projections.idps_jwt_config.idp_id`),
regexp.QuoteMeta(`SELECT projections.idps.id,`+
` projections.idps.resource_owner,`+
` projections.idps.creation_date,`+
` projections.idps.change_date,`+
` projections.idps.sequence,`+
` projections.idps.state,`+
` projections.idps.name,`+
` projections.idps.styling_type,`+
` projections.idps.owner_type,`+
` projections.idps.auto_register,`+
` projections.idps_oidc_config.idp_id,`+
` projections.idps_oidc_config.client_id,`+
` projections.idps_oidc_config.client_secret,`+
` projections.idps_oidc_config.issuer,`+
` projections.idps_oidc_config.scopes,`+
` projections.idps_oidc_config.display_name_mapping,`+
` projections.idps_oidc_config.username_mapping,`+
` projections.idps_oidc_config.authorization_endpoint,`+
` projections.idps_oidc_config.token_endpoint,`+
` projections.idps_jwt_config.idp_id,`+
` projections.idps_jwt_config.issuer,`+
` projections.idps_jwt_config.keys_endpoint,`+
` projections.idps_jwt_config.header_name,`+
` projections.idps_jwt_config.endpoint`+
` FROM projections.idps`+
` LEFT JOIN projections.idps_oidc_config ON projections.idps.id = projections.idps_oidc_config.idp_id`+
` LEFT JOIN projections.idps_jwt_config ON projections.idps.id = projections.idps_jwt_config.idp_id`),
sql.ErrConnDone,
),
err: func(err error) (error, bool) {
@@ -444,34 +445,34 @@ func Test_IDPPrepares(t *testing.T) {
prepare: prepareIDPsQuery,
want: want{
sqlExpectations: mockQueries(
regexp.QuoteMeta(`SELECT zitadel.projections.idps.id,`+
` zitadel.projections.idps.resource_owner,`+
` zitadel.projections.idps.creation_date,`+
` zitadel.projections.idps.change_date,`+
` zitadel.projections.idps.sequence,`+
` zitadel.projections.idps.state,`+
` zitadel.projections.idps.name,`+
` zitadel.projections.idps.styling_type,`+
` zitadel.projections.idps.owner_type,`+
` zitadel.projections.idps.auto_register,`+
` zitadel.projections.idps_oidc_config.idp_id,`+
` zitadel.projections.idps_oidc_config.client_id,`+
` zitadel.projections.idps_oidc_config.client_secret,`+
` zitadel.projections.idps_oidc_config.issuer,`+
` zitadel.projections.idps_oidc_config.scopes,`+
` zitadel.projections.idps_oidc_config.display_name_mapping,`+
` zitadel.projections.idps_oidc_config.username_mapping,`+
` zitadel.projections.idps_oidc_config.authorization_endpoint,`+
` zitadel.projections.idps_oidc_config.token_endpoint,`+
` zitadel.projections.idps_jwt_config.idp_id,`+
` zitadel.projections.idps_jwt_config.issuer,`+
` zitadel.projections.idps_jwt_config.keys_endpoint,`+
` zitadel.projections.idps_jwt_config.header_name,`+
` zitadel.projections.idps_jwt_config.endpoint,`+
regexp.QuoteMeta(`SELECT projections.idps.id,`+
` projections.idps.resource_owner,`+
` projections.idps.creation_date,`+
` projections.idps.change_date,`+
` projections.idps.sequence,`+
` projections.idps.state,`+
` projections.idps.name,`+
` projections.idps.styling_type,`+
` projections.idps.owner_type,`+
` projections.idps.auto_register,`+
` projections.idps_oidc_config.idp_id,`+
` projections.idps_oidc_config.client_id,`+
` projections.idps_oidc_config.client_secret,`+
` projections.idps_oidc_config.issuer,`+
` projections.idps_oidc_config.scopes,`+
` projections.idps_oidc_config.display_name_mapping,`+
` projections.idps_oidc_config.username_mapping,`+
` projections.idps_oidc_config.authorization_endpoint,`+
` projections.idps_oidc_config.token_endpoint,`+
` projections.idps_jwt_config.idp_id,`+
` projections.idps_jwt_config.issuer,`+
` projections.idps_jwt_config.keys_endpoint,`+
` projections.idps_jwt_config.header_name,`+
` projections.idps_jwt_config.endpoint,`+
` COUNT(*) OVER ()`+
` FROM zitadel.projections.idps`+
` LEFT JOIN zitadel.projections.idps_oidc_config ON zitadel.projections.idps.id = zitadel.projections.idps_oidc_config.idp_id`+
` LEFT JOIN zitadel.projections.idps_jwt_config ON zitadel.projections.idps.id = zitadel.projections.idps_jwt_config.idp_id`),
` FROM projections.idps`+
` LEFT JOIN projections.idps_oidc_config ON projections.idps.id = projections.idps_oidc_config.idp_id`+
` LEFT JOIN projections.idps_jwt_config ON projections.idps.id = projections.idps_jwt_config.idp_id`),
nil,
nil,
),
@@ -489,34 +490,34 @@ func Test_IDPPrepares(t *testing.T) {
prepare: prepareIDPsQuery,
want: want{
sqlExpectations: mockQueries(
regexp.QuoteMeta(`SELECT zitadel.projections.idps.id,`+
` zitadel.projections.idps.resource_owner,`+
` zitadel.projections.idps.creation_date,`+
` zitadel.projections.idps.change_date,`+
` zitadel.projections.idps.sequence,`+
` zitadel.projections.idps.state,`+
` zitadel.projections.idps.name,`+
` zitadel.projections.idps.styling_type,`+
` zitadel.projections.idps.owner_type,`+
` zitadel.projections.idps.auto_register,`+
` zitadel.projections.idps_oidc_config.idp_id,`+
` zitadel.projections.idps_oidc_config.client_id,`+
` zitadel.projections.idps_oidc_config.client_secret,`+
` zitadel.projections.idps_oidc_config.issuer,`+
` zitadel.projections.idps_oidc_config.scopes,`+
` zitadel.projections.idps_oidc_config.display_name_mapping,`+
` zitadel.projections.idps_oidc_config.username_mapping,`+
` zitadel.projections.idps_oidc_config.authorization_endpoint,`+
` zitadel.projections.idps_oidc_config.token_endpoint,`+
` zitadel.projections.idps_jwt_config.idp_id,`+
` zitadel.projections.idps_jwt_config.issuer,`+
` zitadel.projections.idps_jwt_config.keys_endpoint,`+
` zitadel.projections.idps_jwt_config.header_name,`+
` zitadel.projections.idps_jwt_config.endpoint,`+
regexp.QuoteMeta(`SELECT projections.idps.id,`+
` projections.idps.resource_owner,`+
` projections.idps.creation_date,`+
` projections.idps.change_date,`+
` projections.idps.sequence,`+
` projections.idps.state,`+
` projections.idps.name,`+
` projections.idps.styling_type,`+
` projections.idps.owner_type,`+
` projections.idps.auto_register,`+
` projections.idps_oidc_config.idp_id,`+
` projections.idps_oidc_config.client_id,`+
` projections.idps_oidc_config.client_secret,`+
` projections.idps_oidc_config.issuer,`+
` projections.idps_oidc_config.scopes,`+
` projections.idps_oidc_config.display_name_mapping,`+
` projections.idps_oidc_config.username_mapping,`+
` projections.idps_oidc_config.authorization_endpoint,`+
` projections.idps_oidc_config.token_endpoint,`+
` projections.idps_jwt_config.idp_id,`+
` projections.idps_jwt_config.issuer,`+
` projections.idps_jwt_config.keys_endpoint,`+
` projections.idps_jwt_config.header_name,`+
` projections.idps_jwt_config.endpoint,`+
` COUNT(*) OVER ()`+
` FROM zitadel.projections.idps`+
` LEFT JOIN zitadel.projections.idps_oidc_config ON zitadel.projections.idps.id = zitadel.projections.idps_oidc_config.idp_id`+
` LEFT JOIN zitadel.projections.idps_jwt_config ON zitadel.projections.idps.id = zitadel.projections.idps_jwt_config.idp_id`),
` FROM projections.idps`+
` LEFT JOIN projections.idps_oidc_config ON projections.idps.id = projections.idps_oidc_config.idp_id`+
` LEFT JOIN projections.idps_jwt_config ON projections.idps.id = projections.idps_jwt_config.idp_id`),
[]string{
"id",
"resource_owner",
@@ -614,34 +615,34 @@ func Test_IDPPrepares(t *testing.T) {
prepare: prepareIDPsQuery,
want: want{
sqlExpectations: mockQueries(
regexp.QuoteMeta(`SELECT zitadel.projections.idps.id,`+
` zitadel.projections.idps.resource_owner,`+
` zitadel.projections.idps.creation_date,`+
` zitadel.projections.idps.change_date,`+
` zitadel.projections.idps.sequence,`+
` zitadel.projections.idps.state,`+
` zitadel.projections.idps.name,`+
` zitadel.projections.idps.styling_type,`+
` zitadel.projections.idps.owner_type,`+
` zitadel.projections.idps.auto_register,`+
` zitadel.projections.idps_oidc_config.idp_id,`+
` zitadel.projections.idps_oidc_config.client_id,`+
` zitadel.projections.idps_oidc_config.client_secret,`+
` zitadel.projections.idps_oidc_config.issuer,`+
` zitadel.projections.idps_oidc_config.scopes,`+
` zitadel.projections.idps_oidc_config.display_name_mapping,`+
` zitadel.projections.idps_oidc_config.username_mapping,`+
` zitadel.projections.idps_oidc_config.authorization_endpoint,`+
` zitadel.projections.idps_oidc_config.token_endpoint,`+
` zitadel.projections.idps_jwt_config.idp_id,`+
` zitadel.projections.idps_jwt_config.issuer,`+
` zitadel.projections.idps_jwt_config.keys_endpoint,`+
` zitadel.projections.idps_jwt_config.header_name,`+
` zitadel.projections.idps_jwt_config.endpoint,`+
regexp.QuoteMeta(`SELECT projections.idps.id,`+
` projections.idps.resource_owner,`+
` projections.idps.creation_date,`+
` projections.idps.change_date,`+
` projections.idps.sequence,`+
` projections.idps.state,`+
` projections.idps.name,`+
` projections.idps.styling_type,`+
` projections.idps.owner_type,`+
` projections.idps.auto_register,`+
` projections.idps_oidc_config.idp_id,`+
` projections.idps_oidc_config.client_id,`+
` projections.idps_oidc_config.client_secret,`+
` projections.idps_oidc_config.issuer,`+
` projections.idps_oidc_config.scopes,`+
` projections.idps_oidc_config.display_name_mapping,`+
` projections.idps_oidc_config.username_mapping,`+
` projections.idps_oidc_config.authorization_endpoint,`+
` projections.idps_oidc_config.token_endpoint,`+
` projections.idps_jwt_config.idp_id,`+
` projections.idps_jwt_config.issuer,`+
` projections.idps_jwt_config.keys_endpoint,`+
` projections.idps_jwt_config.header_name,`+
` projections.idps_jwt_config.endpoint,`+
` COUNT(*) OVER ()`+
` FROM zitadel.projections.idps`+
` LEFT JOIN zitadel.projections.idps_oidc_config ON zitadel.projections.idps.id = zitadel.projections.idps_oidc_config.idp_id`+
` LEFT JOIN zitadel.projections.idps_jwt_config ON zitadel.projections.idps.id = zitadel.projections.idps_jwt_config.idp_id`),
` FROM projections.idps`+
` LEFT JOIN projections.idps_oidc_config ON projections.idps.id = projections.idps_oidc_config.idp_id`+
` LEFT JOIN projections.idps_jwt_config ON projections.idps.id = projections.idps_jwt_config.idp_id`),
[]string{
"id",
"resource_owner",
@@ -734,34 +735,34 @@ func Test_IDPPrepares(t *testing.T) {
prepare: prepareIDPsQuery,
want: want{
sqlExpectations: mockQueries(
regexp.QuoteMeta(`SELECT zitadel.projections.idps.id,`+
` zitadel.projections.idps.resource_owner,`+
` zitadel.projections.idps.creation_date,`+
` zitadel.projections.idps.change_date,`+
` zitadel.projections.idps.sequence,`+
` zitadel.projections.idps.state,`+
` zitadel.projections.idps.name,`+
` zitadel.projections.idps.styling_type,`+
` zitadel.projections.idps.owner_type,`+
` zitadel.projections.idps.auto_register,`+
` zitadel.projections.idps_oidc_config.idp_id,`+
` zitadel.projections.idps_oidc_config.client_id,`+
` zitadel.projections.idps_oidc_config.client_secret,`+
` zitadel.projections.idps_oidc_config.issuer,`+
` zitadel.projections.idps_oidc_config.scopes,`+
` zitadel.projections.idps_oidc_config.display_name_mapping,`+
` zitadel.projections.idps_oidc_config.username_mapping,`+
` zitadel.projections.idps_oidc_config.authorization_endpoint,`+
` zitadel.projections.idps_oidc_config.token_endpoint,`+
` zitadel.projections.idps_jwt_config.idp_id,`+
` zitadel.projections.idps_jwt_config.issuer,`+
` zitadel.projections.idps_jwt_config.keys_endpoint,`+
` zitadel.projections.idps_jwt_config.header_name,`+
` zitadel.projections.idps_jwt_config.endpoint,`+
regexp.QuoteMeta(`SELECT projections.idps.id,`+
` projections.idps.resource_owner,`+
` projections.idps.creation_date,`+
` projections.idps.change_date,`+
` projections.idps.sequence,`+
` projections.idps.state,`+
` projections.idps.name,`+
` projections.idps.styling_type,`+
` projections.idps.owner_type,`+
` projections.idps.auto_register,`+
` projections.idps_oidc_config.idp_id,`+
` projections.idps_oidc_config.client_id,`+
` projections.idps_oidc_config.client_secret,`+
` projections.idps_oidc_config.issuer,`+
` projections.idps_oidc_config.scopes,`+
` projections.idps_oidc_config.display_name_mapping,`+
` projections.idps_oidc_config.username_mapping,`+
` projections.idps_oidc_config.authorization_endpoint,`+
` projections.idps_oidc_config.token_endpoint,`+
` projections.idps_jwt_config.idp_id,`+
` projections.idps_jwt_config.issuer,`+
` projections.idps_jwt_config.keys_endpoint,`+
` projections.idps_jwt_config.header_name,`+
` projections.idps_jwt_config.endpoint,`+
` COUNT(*) OVER ()`+
` FROM zitadel.projections.idps`+
` LEFT JOIN zitadel.projections.idps_oidc_config ON zitadel.projections.idps.id = zitadel.projections.idps_oidc_config.idp_id`+
` LEFT JOIN zitadel.projections.idps_jwt_config ON zitadel.projections.idps.id = zitadel.projections.idps_jwt_config.idp_id`),
` FROM projections.idps`+
` LEFT JOIN projections.idps_oidc_config ON projections.idps.id = projections.idps_oidc_config.idp_id`+
` LEFT JOIN projections.idps_jwt_config ON projections.idps.id = projections.idps_jwt_config.idp_id`),
[]string{
"id",
"resource_owner",
@@ -847,34 +848,34 @@ func Test_IDPPrepares(t *testing.T) {
prepare: prepareIDPsQuery,
want: want{
sqlExpectations: mockQueries(
regexp.QuoteMeta(`SELECT zitadel.projections.idps.id,`+
` zitadel.projections.idps.resource_owner,`+
` zitadel.projections.idps.creation_date,`+
` zitadel.projections.idps.change_date,`+
` zitadel.projections.idps.sequence,`+
` zitadel.projections.idps.state,`+
` zitadel.projections.idps.name,`+
` zitadel.projections.idps.styling_type,`+
` zitadel.projections.idps.owner_type,`+
` zitadel.projections.idps.auto_register,`+
` zitadel.projections.idps_oidc_config.idp_id,`+
` zitadel.projections.idps_oidc_config.client_id,`+
` zitadel.projections.idps_oidc_config.client_secret,`+
` zitadel.projections.idps_oidc_config.issuer,`+
` zitadel.projections.idps_oidc_config.scopes,`+
` zitadel.projections.idps_oidc_config.display_name_mapping,`+
` zitadel.projections.idps_oidc_config.username_mapping,`+
` zitadel.projections.idps_oidc_config.authorization_endpoint,`+
` zitadel.projections.idps_oidc_config.token_endpoint,`+
` zitadel.projections.idps_jwt_config.idp_id,`+
` zitadel.projections.idps_jwt_config.issuer,`+
` zitadel.projections.idps_jwt_config.keys_endpoint,`+
` zitadel.projections.idps_jwt_config.header_name,`+
` zitadel.projections.idps_jwt_config.endpoint,`+
regexp.QuoteMeta(`SELECT projections.idps.id,`+
` projections.idps.resource_owner,`+
` projections.idps.creation_date,`+
` projections.idps.change_date,`+
` projections.idps.sequence,`+
` projections.idps.state,`+
` projections.idps.name,`+
` projections.idps.styling_type,`+
` projections.idps.owner_type,`+
` projections.idps.auto_register,`+
` projections.idps_oidc_config.idp_id,`+
` projections.idps_oidc_config.client_id,`+
` projections.idps_oidc_config.client_secret,`+
` projections.idps_oidc_config.issuer,`+
` projections.idps_oidc_config.scopes,`+
` projections.idps_oidc_config.display_name_mapping,`+
` projections.idps_oidc_config.username_mapping,`+
` projections.idps_oidc_config.authorization_endpoint,`+
` projections.idps_oidc_config.token_endpoint,`+
` projections.idps_jwt_config.idp_id,`+
` projections.idps_jwt_config.issuer,`+
` projections.idps_jwt_config.keys_endpoint,`+
` projections.idps_jwt_config.header_name,`+
` projections.idps_jwt_config.endpoint,`+
` COUNT(*) OVER ()`+
` FROM zitadel.projections.idps`+
` LEFT JOIN zitadel.projections.idps_oidc_config ON zitadel.projections.idps.id = zitadel.projections.idps_oidc_config.idp_id`+
` LEFT JOIN zitadel.projections.idps_jwt_config ON zitadel.projections.idps.id = zitadel.projections.idps_jwt_config.idp_id`),
` FROM projections.idps`+
` LEFT JOIN projections.idps_oidc_config ON projections.idps.id = projections.idps_oidc_config.idp_id`+
` LEFT JOIN projections.idps_jwt_config ON projections.idps.id = projections.idps_jwt_config.idp_id`),
[]string{
"id",
"resource_owner",
@@ -1058,34 +1059,34 @@ func Test_IDPPrepares(t *testing.T) {
prepare: prepareIDPsQuery,
want: want{
sqlExpectations: mockQueryErr(
regexp.QuoteMeta(`SELECT zitadel.projections.idps.id,`+
` zitadel.projections.idps.resource_owner,`+
` zitadel.projections.idps.creation_date,`+
` zitadel.projections.idps.change_date,`+
` zitadel.projections.idps.sequence,`+
` zitadel.projections.idps.state,`+
` zitadel.projections.idps.name,`+
` zitadel.projections.idps.styling_type,`+
` zitadel.projections.idps.owner_type,`+
` zitadel.projections.idps.auto_register,`+
` zitadel.projections.idps_oidc_config.idp_id,`+
` zitadel.projections.idps_oidc_config.client_id,`+
` zitadel.projections.idps_oidc_config.client_secret,`+
` zitadel.projections.idps_oidc_config.issuer,`+
` zitadel.projections.idps_oidc_config.scopes,`+
` zitadel.projections.idps_oidc_config.display_name_mapping,`+
` zitadel.projections.idps_oidc_config.username_mapping,`+
` zitadel.projections.idps_oidc_config.authorization_endpoint,`+
` zitadel.projections.idps_oidc_config.token_endpoint,`+
` zitadel.projections.idps_jwt_config.idp_id,`+
` zitadel.projections.idps_jwt_config.issuer,`+
` zitadel.projections.idps_jwt_config.keys_endpoint,`+
` zitadel.projections.idps_jwt_config.header_name,`+
` zitadel.projections.idps_jwt_config.endpoint,`+
regexp.QuoteMeta(`SELECT projections.idps.id,`+
` projections.idps.resource_owner,`+
` projections.idps.creation_date,`+
` projections.idps.change_date,`+
` projections.idps.sequence,`+
` projections.idps.state,`+
` projections.idps.name,`+
` projections.idps.styling_type,`+
` projections.idps.owner_type,`+
` projections.idps.auto_register,`+
` projections.idps_oidc_config.idp_id,`+
` projections.idps_oidc_config.client_id,`+
` projections.idps_oidc_config.client_secret,`+
` projections.idps_oidc_config.issuer,`+
` projections.idps_oidc_config.scopes,`+
` projections.idps_oidc_config.display_name_mapping,`+
` projections.idps_oidc_config.username_mapping,`+
` projections.idps_oidc_config.authorization_endpoint,`+
` projections.idps_oidc_config.token_endpoint,`+
` projections.idps_jwt_config.idp_id,`+
` projections.idps_jwt_config.issuer,`+
` projections.idps_jwt_config.keys_endpoint,`+
` projections.idps_jwt_config.header_name,`+
` projections.idps_jwt_config.endpoint,`+
` COUNT(*) OVER ()`+
` FROM zitadel.projections.idps`+
` LEFT JOIN zitadel.projections.idps_oidc_config ON zitadel.projections.idps.id = zitadel.projections.idps_oidc_config.idp_id`+
` LEFT JOIN zitadel.projections.idps_jwt_config ON zitadel.projections.idps.id = zitadel.projections.idps_jwt_config.idp_id`),
` FROM projections.idps`+
` LEFT JOIN projections.idps_oidc_config ON projections.idps.id = projections.idps_oidc_config.idp_id`+
` LEFT JOIN projections.idps_jwt_config ON projections.idps.id = projections.idps_jwt_config.idp_id`),
sql.ErrConnDone,
),
err: func(err error) (error, bool) {