1
0
Fork 0
mirror of https://github.com/archtechx/tenancy.git synced 2026-02-04 19:24:02 +00:00

Revert beforeEach cleanup (tests fail in CI)

This commit is contained in:
lukinovec 2023-05-31 14:02:54 +02:00
parent b964aa90d3
commit 3738d2885c

View file

@ -28,17 +28,54 @@ beforeEach(function () {
config(['tenancy.bootstrappers' => [PostgresSingleDatabaseBootstrapper::class]]);
config(['database.connections.central' => config('database.connections.pgsql')]);
config(['tenancy.models.tenant_key_column' => 'tenant_id']);
config(['tenancy.models.tenant' => Tenant::class]);
config(['tenancy.models.tenant' => $tenantClass = Tenant::class]);
config(['tenancy.models.rls' => [
Post::class, // Primary model (directly belongs to tenant)
ScopedComment::class, // Secondary model (belongs to tenant through a primary model)
$primaryModelClass = Post::class, // Primary model (directly belongs to tenant)
$secondaryModelClass = ScopedComment::class, // Secondary model (belongs to tenant through a primary model)
]]);
// Drop all existing policies
DB::transaction(function () {
$tenantModel = new $tenantClass;
$primaryModel = new $primaryModelClass;
$secondaryModel = new $secondaryModelClass;
$tenantTable = $tenantModel->getTable();
DB::transaction(function () use ($tenantTable, $primaryModel, $secondaryModel) {
// Drop all existing policies
foreach (DB::select('select * from pg_policies') as $policy) {
DB::statement("DROP POLICY IF EXISTS {$policy->policyname} ON {$policy->tablename}");
}
// Drop tables of the tenant, primary and secondary model
Schema::dropIfExists('domains');
DB::statement("DROP TABLE IF EXISTS {$secondaryModel->getTable()} CASCADE");
DB::statement("DROP TABLE IF EXISTS {$primaryModel->getTable()} CASCADE");
DB::statement("DROP TABLE IF EXISTS $tenantTable CASCADE");
// Manually create tables for the models
Schema::create($tenantTable, function (Blueprint $table) {
$table->string('id')->primary();
$table->timestamps();
$table->json('data')->nullable();
});
Schema::create($primaryModel->getTable(), function (Blueprint $table) {
$table->id();
$table->string('text');
$table->string($tenantKeyColumn = config('tenancy.models.tenant_key_column'));
$table->timestamps();
$table->foreign($tenantKeyColumn)->references(tenancy()->model()->getKeyName())->on(tenancy()->model()->getTable())->onUpdate('cascade')->onDelete('cascade');
});
Schema::create($secondaryModel->getTable(), function (Blueprint $table) use ($primaryModel) {
$table->id();
$table->string('text');
$table->unsignedBigInteger($primaryModel->getForeignKey());
$table->timestamps();
$table->foreign($primaryModel->getForeignKey())->references($primaryModel->getKeyName())->on($primaryModel->getTable())->onUpdate('cascade')->onDelete('cascade');
});
});
});