assertTrue(Schema::hasColumn('documents', 'default_locale')); } public function test_documents_table_no_longer_has_translatable_columns(): void { $this->assertFalse(Schema::hasColumn('documents', 'title')); $this->assertFalse(Schema::hasColumn('documents', 'content')); $this->assertFalse(Schema::hasColumn('documents', 'rendered_html')); } public function test_document_translations_table_exists_with_required_columns(): void { $this->assertTrue(Schema::hasTable('document_translations')); foreach (['document_id', 'locale', 'title', 'content', 'rendered_html', 'created_by', 'updated_by', 'created_at', 'updated_at'] as $col) { $this->assertTrue( Schema::hasColumn('document_translations', $col), "document_translations missing column: $col" ); } } public function test_document_translations_unique_document_locale(): void { DB::table('documents')->insert([ 'path' => 'A.md', 'slug' => 'a', 'default_locale' => 'en', 'file_size' => 0, 'file_hash' => str_repeat('0', 64), 'file_modified_at' => now(), 'created_at' => now(), 'updated_at' => now(), ]); $docId = DB::table('documents')->where('slug', 'a')->value('id'); DB::table('document_translations')->insert([ 'document_id' => $docId, 'locale' => 'en', 'title' => 'A', 'content' => '...', 'rendered_html' => '
...
', 'created_at' => now(), 'updated_at' => now(), ]); $this->expectException(\Illuminate\Database\QueryException::class); DB::table('document_translations')->insert([ 'document_id' => $docId, 'locale' => 'en', 'title' => 'duplicate', 'content' => '...', 'rendered_html' => '...
', 'created_at' => now(), 'updated_at' => now(), ]); } public function test_existing_documents_data_is_copied_to_translations(): void { // Roll the new migration back so the legacy columns exist again \Illuminate\Support\Facades\Artisan::call('migrate:rollback', ['--step' => 1]); $this->assertTrue(\Illuminate\Support\Facades\Schema::hasColumn('documents', 'title')); // Seed a legacy document row directly \Illuminate\Support\Facades\DB::table('documents')->insert([ 'path' => 'Legacy.md', 'title' => 'Legacy Title', 'slug' => 'legacy-title', 'content' => '# Legacy body', 'rendered_html' => '