Files
KnowledgeBase/tests/Feature/GroupDeletionTest.php
Knowledge Base System acf549c43c feat: 初始化知识库系统项目
- 实现基于 Laravel 11 和 Filament 3.X 的文档管理系统
- 添加用户认证和分组管理功能
- 实现文档上传、分类和权限控制
- 集成 Word 文档自动转换为 Markdown
- 集成 Meilisearch 全文搜索引擎
- 实现文档在线预览功能
- 添加安全日志和审计功能
- 完整的简体中文界面
- 包含完整的项目文档和部署指南

技术栈:
- Laravel 11.x
- Filament 3.X
- Meilisearch 1.5+
- Pandoc 文档转换
- Redis 队列系统
- Pest PHP 测试框架
2025-12-05 14:44:44 +08:00

99 lines
3.1 KiB
PHP

<?php
use App\Models\Document;
use App\Models\Group;
use App\Models\User;
use Illuminate\Foundation\Testing\RefreshDatabase;
uses(RefreshDatabase::class);
test('删除分组时将关联的专用文档设置为孤立状态', function () {
// 创建测试数据
$user = User::factory()->create();
$group = Group::factory()->create(['name' => '测试分组']);
// 创建属于该分组的专用文档
$document1 = Document::factory()->create([
'type' => 'dedicated',
'group_id' => $group->id,
'uploaded_by' => $user->id,
'title' => '专用文档1',
]);
$document2 = Document::factory()->create([
'type' => 'dedicated',
'group_id' => $group->id,
'uploaded_by' => $user->id,
'title' => '专用文档2',
]);
// 创建全局文档(不应受影响)
$globalDocument = Document::factory()->create([
'type' => 'global',
'group_id' => null,
'uploaded_by' => $user->id,
'title' => '全局文档',
]);
// 验证文档初始状态
expect($document1->fresh()->group_id)->toBe($group->id);
expect($document2->fresh()->group_id)->toBe($group->id);
expect($globalDocument->fresh()->group_id)->toBeNull();
// 删除分组
$group->delete();
// 验证专用文档的 group_id 已被设置为 null
expect($document1->fresh()->group_id)->toBeNull();
expect($document2->fresh()->group_id)->toBeNull();
// 验证全局文档不受影响
expect($globalDocument->fresh()->group_id)->toBeNull();
// 验证文档本身没有被删除
expect(Document::find($document1->id))->not->toBeNull();
expect(Document::find($document2->id))->not->toBeNull();
expect(Document::find($globalDocument->id))->not->toBeNull();
});
test('删除分组不影响其他分组的文档', function () {
// 创建测试数据
$user = User::factory()->create();
$group1 = Group::factory()->create(['name' => '分组1']);
$group2 = Group::factory()->create(['name' => '分组2']);
// 创建属于分组1的文档
$document1 = Document::factory()->create([
'type' => 'dedicated',
'group_id' => $group1->id,
'uploaded_by' => $user->id,
]);
// 创建属于分组2的文档
$document2 = Document::factory()->create([
'type' => 'dedicated',
'group_id' => $group2->id,
'uploaded_by' => $user->id,
]);
// 删除分组1
$group1->delete();
// 验证分组1的文档变为孤立状态
expect($document1->fresh()->group_id)->toBeNull();
// 验证分组2的文档不受影响
expect($document2->fresh()->group_id)->toBe($group2->id);
});
test('删除没有文档的分组不会出错', function () {
// 创建一个没有文档的分组
$group = Group::factory()->create(['name' => '空分组']);
// 删除分组应该成功且不抛出异常
expect(fn() => $group->delete())->not->toThrow(Exception::class);
// 验证分组已被删除
expect(Group::find($group->id))->toBeNull();
});