test(tenant): cover split website types and migration

This commit is contained in:
2026-09-17 14:25:54 -03:00
parent 6bc784519f
commit 486129a92f
36 changed files with 335 additions and 307 deletions

View File

@@ -5,8 +5,8 @@ namespace Tests\Unit;
use App\Domains\Integration\Models\ClientIntegration;
use App\Domains\Integration\Models\Integration;
use App\Domains\Integration\Models\IntegrationInstance;
use App\Domains\Integration\Models\WebsiteTypeIntegration;
use App\Domains\Tenant\Models\WebsiteType;
use App\Domains\Integration\Models\AdminWebsiteTypeIntegration;
use App\Domains\Tenant\Models\AdminWebsiteType;
use Illuminate\Config\Repository;
use Illuminate\Container\Container;
use Illuminate\Database\Capsule\Manager;
@@ -75,10 +75,21 @@ class IntegrationInstanceSchemaTest extends TestCase
$db->table('client_integrations')->insert([
'client_id' => 1, 'integration_code' => 'email', 'integration_data' => 'existing-ciphertext',
]);
$this->migrations = array_map(fn (string $file) => require $file, glob(__DIR__.'/../../database/migrations/2026_09_04_*.php'));
$migrationDir = __DIR__.'/../../database/migrations/';
$this->migrations = array_map(fn (string $file) => require $migrationDir.$file, [
'2026_09_04_000000_create_integration_instances_table.php',
'2026_09_04_000001_move_client_configuration_to_integration_instances.php',
'2026_09_04_000002_create_website_type_integrations_table.php',
'2026_09_04_000003_rename_integration_configuration_requirement.php',
]);
foreach ($this->migrations as $migration) {
$migration->up();
}
$schema->rename('website_type', 'admin_website_types');
$schema->rename('website_type_integrations', 'admin_website_type_integrations');
$schema->table('admin_website_type_integrations', function (Blueprint $table): void {
$table->renameColumn('website_type_code', 'admin_website_type_code');
});
}
protected function tearDown(): void
@@ -97,6 +108,13 @@ class IntegrationInstanceSchemaTest extends TestCase
self::assertSame('existing-ciphertext', $db->table('integration_instances')->where('id', $association->integration_instance_id)->value('integration_data'));
self::assertFalse($db->getSchemaBuilder()->hasColumn('client_integrations', 'integration_data'));
$schema = $db->getSchemaBuilder();
$schema->table('admin_website_type_integrations', function (Blueprint $table): void {
$table->renameColumn('admin_website_type_code', 'website_type_code');
});
$schema->rename('admin_website_type_integrations', 'website_type_integrations');
$schema->rename('admin_website_types', 'website_type');
foreach (array_reverse($this->migrations) as $migration) {
$migration->down();
}
@@ -111,11 +129,11 @@ class IntegrationInstanceSchemaTest extends TestCase
self::assertNotSame('private-value', $instance->getRawOriginal('integration_data'));
self::assertSame(['password' => 'private-value'], $instance->fresh()->integration_data);
self::assertArrayNotHasKey('integration_data', $instance->toArray());
WebsiteTypeIntegration::create([
'website_type_code' => 'onticket', 'integration_code' => 'email', 'integration_instance_id' => $instance->id,
AdminWebsiteTypeIntegration::create([
'admin_website_type_code' => 'onticket', 'integration_code' => 'email', 'integration_instance_id' => $instance->id,
]);
self::assertTrue(ClientIntegration::firstOrFail()->integrationInstance->is($instance));
self::assertTrue(WebsiteType::firstOrFail()->integrations->first()->integrationInstance->is($instance));
self::assertTrue(AdminWebsiteType::firstOrFail()->integrations->first()->integrationInstance->is($instance));
self::assertSame(1, $instance->clientIntegrations()->count());
self::assertSame(1, $instance->websiteTypeIntegrations()->count());
self::assertTrue(Integration::where('integration_code', 'email')->firstOrFail()->instances->first()->is($instance));
@@ -147,8 +165,8 @@ class IntegrationInstanceSchemaTest extends TestCase
public function test_association_rejects_an_instance_from_another_integration(): void
{
$this->expectException(QueryException::class);
WebsiteTypeIntegration::create([
'website_type_code' => 'onticket', 'integration_code' => 'telepagos', 'integration_instance_id' => IntegrationInstance::firstOrFail()->id,
AdminWebsiteTypeIntegration::create([
'admin_website_type_code' => 'onticket', 'integration_code' => 'telepagos', 'integration_instance_id' => IntegrationInstance::firstOrFail()->id,
]);
}
@@ -161,13 +179,13 @@ class IntegrationInstanceSchemaTest extends TestCase
public function test_website_type_cannot_have_two_instances_of_the_same_integration(): void
{
WebsiteTypeIntegration::create([
'website_type_code' => 'onticket', 'integration_code' => 'email', 'integration_instance_id' => IntegrationInstance::firstOrFail()->id,
AdminWebsiteTypeIntegration::create([
'admin_website_type_code' => 'onticket', 'integration_code' => 'email', 'integration_instance_id' => IntegrationInstance::firstOrFail()->id,
]);
$instance = IntegrationInstance::create(['integration_code' => 'email', 'name' => 'Second']);
$this->expectException(QueryException::class);
WebsiteTypeIntegration::create([
'website_type_code' => 'onticket', 'integration_code' => 'email', 'integration_instance_id' => $instance->id,
AdminWebsiteTypeIntegration::create([
'admin_website_type_code' => 'onticket', 'integration_code' => 'email', 'integration_instance_id' => $instance->id,
]);
}
}