feat(companies): add kvk_number column for B2B identity binding (WS-6)
WS-6 binding-target registry references company.kvk_number as a B2B identity-key candidate. The column needed to exist on the model before the registry could legitimately reference it. Nullable because not every Company has a registered KvK (foreign companies, partners, agencies); identity-key publish guards enforce presence where required, not at schema level. Changes: - New migration `2026_04_28_140000_add_kvk_number_to_companies_table` adds nullable string column + index after `type`. - Company::$fillable expanded. - CompanyFactory generates an 8-digit KvK by default. - CompanyKvkNumberTest covers attribute persistence, nullability, and information_schema-verified index existence. - SCHEMA.md → v2.8 with the new column row + indexes line. - Schema dump regenerated (CI fast-path). Migration step counts in 5 backfill tests bumped +1 (the new migration sits at the top of the migration stack): - FormFieldBindingMigrationTest: 18→19, 16→17 - ConditionalLogicBackfillTest: 7→8 - FormFieldConfigBackfillAndDropTest: 13→14 - FormFieldOptionsBackfillTest: 3→4 - FormFieldValidationRuleBackfillTest: 16→17 Refs: WS-6 sessie 3a binding-target drift audit Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
36
api/tests/Unit/Models/CompanyKvkNumberTest.php
Normal file
36
api/tests/Unit/Models/CompanyKvkNumberTest.php
Normal file
@@ -0,0 +1,36 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Tests\Unit\Models;
|
||||
|
||||
use App\Models\Company;
|
||||
use Illuminate\Foundation\Testing\RefreshDatabase;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use Tests\TestCase;
|
||||
|
||||
final class CompanyKvkNumberTest extends TestCase
|
||||
{
|
||||
use RefreshDatabase;
|
||||
|
||||
public function test_company_has_kvk_number_attribute(): void
|
||||
{
|
||||
$company = Company::factory()->create(['kvk_number' => '12345678']);
|
||||
$this->assertSame('12345678', $company->fresh()->kvk_number);
|
||||
}
|
||||
|
||||
public function test_kvk_number_is_nullable(): void
|
||||
{
|
||||
$company = Company::factory()->create(['kvk_number' => null]);
|
||||
$this->assertNull($company->fresh()->kvk_number);
|
||||
}
|
||||
|
||||
public function test_kvk_number_is_indexed(): void
|
||||
{
|
||||
$row = DB::selectOne(
|
||||
'SELECT INDEX_NAME FROM information_schema.STATISTICS '
|
||||
."WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'companies' AND COLUMN_NAME = 'kvk_number'"
|
||||
);
|
||||
$this->assertNotNull($row, 'Expected index on companies.kvk_number');
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user