1
0
Fork 0
mirror of https://github.com/archtechx/tenancy.git synced 2025-12-12 14:14:04 +00:00

Switch to using MySQL for tests, resolve FK constraint issues

This commit is contained in:
Samuel Štancl 2020-06-07 10:28:55 +02:00
parent 616c5983a4
commit 6735d0a589
4 changed files with 24 additions and 8 deletions

View file

@ -579,7 +579,7 @@ class ResourceTenant extends Tenant
{ {
public function users() public function users()
{ {
return $this->belongsToMany(CentralUser::class, 'tenant_users', 'tenant_id', 'global_user_id') return $this->belongsToMany(CentralUser::class, 'tenant_users', 'tenant_id', 'global_user_id', 'id', 'global_id')
->using(TenantPivot::class); ->using(TenantPivot::class);
} }
} }
@ -594,7 +594,7 @@ class CentralUser extends Model implements SyncMaster
public function tenants(): BelongsToMany public function tenants(): BelongsToMany
{ {
return $this->belongsToMany(ResourceTenant::class, 'tenant_users', 'global_user_id', 'tenant_id') return $this->belongsToMany(ResourceTenant::class, 'tenant_users', 'global_user_id', 'tenant_id', 'global_id')
->using(TenantPivot::class); ->using(TenantPivot::class);
} }

View file

@ -9,7 +9,6 @@ use Illuminate\Database\QueryException;
use Illuminate\Database\Schema\Blueprint; use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema; use Illuminate\Support\Facades\Schema;
use Illuminate\Support\Facades\Validator; use Illuminate\Support\Facades\Validator;
use Illuminate\Validation\Rules\Unique;
use Stancl\Tenancy\Database\Concerns\BelongsToPrimaryModel; use Stancl\Tenancy\Database\Concerns\BelongsToPrimaryModel;
use Stancl\Tenancy\Database\Concerns\BelongsToTenant; use Stancl\Tenancy\Database\Concerns\BelongsToTenant;
use Stancl\Tenancy\Database\Concerns\HasScopedValidationRules; use Stancl\Tenancy\Database\Concerns\HasScopedValidationRules;
@ -36,7 +35,7 @@ class SingleDatabaseTenancyTest extends TestCase
$table->increments('id'); $table->increments('id');
$table->string('text'); $table->string('text');
$table->string('post_id'); $table->unsignedInteger('post_id');
$table->foreign('post_id')->references('id')->on('posts')->onUpdate('cascade')->onDelete('cascade'); $table->foreign('post_id')->references('id')->on('posts')->onUpdate('cascade')->onDelete('cascade');
}); });
@ -236,6 +235,7 @@ class SingleDatabaseTenancyTest extends TestCase
{ {
BelongsToTenant::$tenantIdColumn = 'team_id'; BelongsToTenant::$tenantIdColumn = 'team_id';
Schema::drop('comments');
Schema::drop('posts'); Schema::drop('posts');
Schema::create('posts', function (Blueprint $table) { Schema::create('posts', function (Blueprint $table) {
$table->increments('id'); $table->increments('id');

View file

@ -62,7 +62,7 @@ class TenantModelTest extends TestCase
$this->assertSame(null, $tenant->data); $this->assertSame(null, $tenant->data);
// Low level test to assert database structure // Low level test to assert database structure
$this->assertSame(json_encode(['foo' => 'bar']), DB::table('tenants')->where('id', $tenant->id)->first()->data); $this->assertSame(['foo' => 'bar'], json_decode(DB::table('tenants')->where('id', $tenant->id)->first()->data, true));
$this->assertSame(null, DB::table('tenants')->where('id', $tenant->id)->first()->foo ?? null); $this->assertSame(null, DB::table('tenants')->where('id', $tenant->id)->first()->foo ?? null);
// Model has the correct structure when retrieved // Model has the correct structure when retrieved
@ -105,6 +105,7 @@ class TenantModelTest extends TestCase
/** @test */ /** @test */
public function autoincrement_ids_are_supported() public function autoincrement_ids_are_supported()
{ {
Schema::drop('domains');
Schema::table('tenants', function (Blueprint $table) { Schema::table('tenants', function (Blueprint $table) {
$table->bigIncrements('id')->change(); $table->bigIncrements('id')->change();
}); });

View file

@ -5,6 +5,7 @@ declare(strict_types=1);
namespace Stancl\Tenancy\Tests; namespace Stancl\Tenancy\Tests;
use Illuminate\Support\Facades\Redis; use Illuminate\Support\Facades\Redis;
use PDO;
use Stancl\Tenancy\Tests\Etc\Tenant; use Stancl\Tenancy\Tests\Etc\Tenant;
abstract class TestCase extends \Orchestra\Testbench\TestCase abstract class TestCase extends \Orchestra\Testbench\TestCase
@ -56,9 +57,23 @@ abstract class TestCase extends \Orchestra\Testbench\TestCase
'database.redis.default.host' => env('TENANCY_TEST_REDIS_HOST', '127.0.0.1'), 'database.redis.default.host' => env('TENANCY_TEST_REDIS_HOST', '127.0.0.1'),
'database.redis.options.prefix' => 'foo', 'database.redis.options.prefix' => 'foo',
'database.connections.central' => [ 'database.connections.central' => [
'driver' => 'sqlite', 'driver' => 'mysql',
'database' => database_path('central.sqlite'), 'url' => env('DATABASE_URL'),
// 'database' => ':memory:', 'host' => 'mysql',
'port' => env('DB_PORT', '3306'),
'database' => 'main',
'username' => env('DB_USERNAME', 'forge'),
'password' => env('DB_PASSWORD', ''),
'unix_socket' => env('DB_SOCKET', ''),
'charset' => 'utf8mb4',
'collation' => 'utf8mb4_unicode_ci',
'prefix' => '',
'prefix_indexes' => true,
'strict' => true,
'engine' => null,
'options' => extension_loaded('pdo_mysql') ? array_filter([
PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'),
]) : [],
], ],
'database.connections.sqlite.database' => ':memory:', 'database.connections.sqlite.database' => ':memory:',
'database.connections.mysql.host' => env('TENANCY_TEST_MYSQL_HOST', '127.0.0.1'), 'database.connections.mysql.host' => env('TENANCY_TEST_MYSQL_HOST', '127.0.0.1'),