单元测试: - SystemSettingServiceTest: 测试服务类方法 - SystemSettingServiceCacheTest: 测试缓存功能 功能测试: - SystemSettingsTest: 测试系统设置基础功能 - SystemSettingValidationTest: 测试表单验证规则 - ActivityLogTest: 测试操作日志功能 测试覆盖: - 配置的读取和保存 - 配置验证规则 - 缓存机制 - 日志自动记录 - 日志筛选功能 - 日志详情查看 所有测试通过 ✓
123 lines
3.9 KiB
PHP
123 lines
3.9 KiB
PHP
<?php
|
|
|
|
namespace Tests\Feature;
|
|
|
|
use App\Models\SystemSetting;
|
|
use App\Models\User;
|
|
use Illuminate\Foundation\Testing\RefreshDatabase;
|
|
use Tests\TestCase;
|
|
|
|
class SystemSettingsTest extends TestCase
|
|
{
|
|
use RefreshDatabase;
|
|
|
|
protected function setUp(): void
|
|
{
|
|
parent::setUp();
|
|
|
|
// 创建测试用户
|
|
$this->actingAs(User::factory()->create());
|
|
}
|
|
|
|
/** @test */
|
|
public function it_has_all_required_system_global_settings()
|
|
{
|
|
// 创建系统全局配置
|
|
$requiredSettings = [
|
|
'system.name' => ['name' => '知识库管理系统'],
|
|
'system.timeout' => ['timeout' => 60],
|
|
'system.max_retries' => ['max_retries' => 3],
|
|
'system.max_upload_size' => ['max_upload_size' => 10485760],
|
|
'system.allowed_file_types' => ['allowed_file_types' => ['pdf', 'docx', 'txt', 'md']],
|
|
];
|
|
|
|
foreach ($requiredSettings as $key => $value) {
|
|
SystemSetting::create([
|
|
'key' => $key,
|
|
'value' => $value,
|
|
'group' => 'system',
|
|
'description' => '测试配置',
|
|
]);
|
|
}
|
|
|
|
// 验证所有必需的系统全局配置都存在
|
|
$this->assertEquals(5, SystemSetting::where('group', 'system')->count());
|
|
|
|
// 验证每个配置都能正确读取
|
|
$this->assertNotNull(SystemSetting::where('key', 'system.name')->first());
|
|
$this->assertNotNull(SystemSetting::where('key', 'system.timeout')->first());
|
|
$this->assertNotNull(SystemSetting::where('key', 'system.max_retries')->first());
|
|
$this->assertNotNull(SystemSetting::where('key', 'system.max_upload_size')->first());
|
|
$this->assertNotNull(SystemSetting::where('key', 'system.allowed_file_types')->first());
|
|
}
|
|
|
|
/** @test */
|
|
public function it_can_read_system_settings_values()
|
|
{
|
|
// 创建测试配置
|
|
SystemSetting::create([
|
|
'key' => 'system.name',
|
|
'value' => ['name' => '测试系统'],
|
|
'group' => 'system',
|
|
'description' => '系统名称',
|
|
]);
|
|
|
|
SystemSetting::create([
|
|
'key' => 'system.timeout',
|
|
'value' => ['timeout' => 120],
|
|
'group' => 'system',
|
|
'description' => '超时时间',
|
|
]);
|
|
|
|
// 验证能正确读取配置值
|
|
$nameSetting = SystemSetting::where('key', 'system.name')->first();
|
|
$this->assertEquals('测试系统', $nameSetting->value['name']);
|
|
|
|
$timeoutSetting = SystemSetting::where('key', 'system.timeout')->first();
|
|
$this->assertEquals(120, $timeoutSetting->value['timeout']);
|
|
}
|
|
|
|
/** @test */
|
|
public function it_validates_system_settings_structure()
|
|
{
|
|
// 验证系统全局配置的结构
|
|
$settings = [
|
|
'system.name' => 'string',
|
|
'system.timeout' => 'integer',
|
|
'system.max_retries' => 'integer',
|
|
'system.max_upload_size' => 'integer',
|
|
'system.allowed_file_types' => 'array',
|
|
];
|
|
|
|
foreach ($settings as $key => $expectedType) {
|
|
$valueKey = explode('.', $key)[1];
|
|
|
|
SystemSetting::create([
|
|
'key' => $key,
|
|
'value' => [$valueKey => $this->getTestValue($expectedType)],
|
|
'group' => 'system',
|
|
'description' => '测试',
|
|
]);
|
|
|
|
$setting = SystemSetting::where('key', $key)->first();
|
|
$actualValue = $setting->value[$valueKey];
|
|
|
|
$this->assertEquals(
|
|
$expectedType,
|
|
gettype($actualValue),
|
|
"配置 {$key} 的类型应该是 {$expectedType}"
|
|
);
|
|
}
|
|
}
|
|
|
|
private function getTestValue(string $type)
|
|
{
|
|
return match($type) {
|
|
'string' => '测试值',
|
|
'integer' => 100,
|
|
'array' => ['test'],
|
|
default => null,
|
|
};
|
|
}
|
|
}
|