mirror of
https://github.com/andwati/zitadel.git
synced 2026-10-24 00:02:15 +00:00
# Which Problems Are Solved Add projects to the relational tables # How the Problems Are Solved - Define table migrations - Define and implement Project and Project Role repositories. - Provide projection handlers to populate the relational tables. # Additional Changes - Statement Builder now has a constructor which allows setting of a base query with arguments. - Certain operations, like Get, Update and Delete require the Primary Key to be set as conditions. However, this requires knowledge of the implementation and table definition. This PR proposes an additional condition for repositories: `PrimaryKeyCondition`. This gives clarity on the required IDs for these operations. - Added couple of helpers to the repository package, to allow more DRY code. - getOne / getMany: generic functions for query execution and scanning. - checkRestrictingColumns, checkPkCondition: simplify condition checking, instead of using ladders of conditionals. - Added a couple of helpers to the repository test package: - Transaction, savepoint and rollback helpers. - Create instance and organization helpers for objects that depend on them (like projects). # Additional Context - after https://github.com/zitadel/zitadel/pull/10809 - closes #10765
90 lines
2.4 KiB
Go
90 lines
2.4 KiB
Go
//go:build integration
|
|
|
|
package events_test
|
|
|
|
import (
|
|
"context"
|
|
"log"
|
|
"os"
|
|
"testing"
|
|
"time"
|
|
|
|
"github.com/jackc/pgx/v5"
|
|
"github.com/jackc/pgx/v5/pgxpool"
|
|
|
|
"github.com/zitadel/zitadel/backend/v3/storage/database"
|
|
"github.com/zitadel/zitadel/backend/v3/storage/database/dialect/postgres"
|
|
"github.com/zitadel/zitadel/internal/integration"
|
|
"github.com/zitadel/zitadel/pkg/grpc/admin"
|
|
v2beta "github.com/zitadel/zitadel/pkg/grpc/instance/v2beta"
|
|
mgmt "github.com/zitadel/zitadel/pkg/grpc/management"
|
|
v2beta_org "github.com/zitadel/zitadel/pkg/grpc/org/v2beta"
|
|
v2beta_project "github.com/zitadel/zitadel/pkg/grpc/project/v2beta"
|
|
"github.com/zitadel/zitadel/pkg/grpc/system"
|
|
)
|
|
|
|
const ConnString = "host=localhost port=5432 user=zitadel password=zitadel dbname=zitadel sslmode=disable"
|
|
|
|
var (
|
|
dbPool *pgxpool.Pool
|
|
CTX context.Context
|
|
IAMCTX context.Context
|
|
Instance *integration.Instance
|
|
SystemClient system.SystemServiceClient
|
|
OrgClient v2beta_org.OrganizationServiceClient
|
|
ProjectClient v2beta_project.ProjectServiceClient
|
|
AdminClient admin.AdminServiceClient
|
|
MgmtClient mgmt.ManagementServiceClient
|
|
)
|
|
|
|
var pool database.Pool
|
|
|
|
func TestMain(m *testing.M) {
|
|
os.Exit(func() int {
|
|
ctx, cancel := context.WithTimeout(context.Background(), 15*time.Minute)
|
|
defer cancel()
|
|
|
|
CTX = integration.WithSystemAuthorization(ctx)
|
|
Instance = integration.NewInstance(CTX)
|
|
|
|
IAMCTX = Instance.WithAuthorization(ctx, integration.UserTypeIAMOwner)
|
|
SystemClient = integration.SystemClient()
|
|
OrgClient = Instance.Client.OrgV2beta
|
|
ProjectClient = Instance.Client.Projectv2Beta
|
|
AdminClient = Instance.Client.Admin
|
|
MgmtClient = Instance.Client.Mgmt
|
|
|
|
defer func() {
|
|
_, err := Instance.Client.InstanceV2Beta.DeleteInstance(CTX, &v2beta.DeleteInstanceRequest{
|
|
InstanceId: Instance.Instance.Id,
|
|
})
|
|
if err != nil {
|
|
log.Printf("Failed to delete instance on cleanup: %v\n", err)
|
|
}
|
|
}()
|
|
|
|
var err error
|
|
dbConfig, err := pgxpool.ParseConfig(ConnString)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
dbConfig.AfterConnect = func(ctx context.Context, conn *pgx.Conn) error {
|
|
orgState, err := conn.LoadType(ctx, "zitadel.organization_state")
|
|
if err != nil {
|
|
return err
|
|
}
|
|
conn.TypeMap().RegisterType(orgState)
|
|
return nil
|
|
}
|
|
|
|
dbPool, err = pgxpool.NewWithConfig(context.Background(), dbConfig)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
|
|
pool = postgres.PGxPool(dbPool)
|
|
|
|
return m.Run()
|
|
}())
|
|
}
|