test: 添加系统设置和操作日志测试
单元测试: - SystemSettingServiceTest: 测试服务类方法 - SystemSettingServiceCacheTest: 测试缓存功能 功能测试: - SystemSettingsTest: 测试系统设置基础功能 - SystemSettingValidationTest: 测试表单验证规则 - ActivityLogTest: 测试操作日志功能 测试覆盖: - 配置的读取和保存 - 配置验证规则 - 缓存机制 - 日志自动记录 - 日志筛选功能 - 日志详情查看 所有测试通过 ✓
This commit is contained in:
122
tests/Feature/SystemSettingsTest.php
Normal file
122
tests/Feature/SystemSettingsTest.php
Normal file
@@ -0,0 +1,122 @@
|
||||
<?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,
|
||||
};
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user