v7.0.0-beta.1 release

This commit is contained in:
HeuJung
2026-04-01 10:30:52 +09:00
commit 6595fd0eb5
3967 changed files with 1875383 additions and 0 deletions
@@ -0,0 +1,135 @@
<?php
namespace Tests\Unit\Requests;
use App\Http\Requests\Public\Module\ServeModuleAssetRequest;
use App\Rules\AllowedModuleFileType;
use App\Rules\SafeModulePath;
use Tests\TestCase;
class ServeModuleAssetRequestTest extends TestCase
{
/**
* authorize()가 항상 true를 반환하는지 테스트
*/
public function test_authorize_returns_true(): void
{
$request = new ServeModuleAssetRequest();
$this->assertTrue($request->authorize());
}
/**
* 검증 규칙이 올바르게 정의되어 있는지 테스트
*/
public function test_has_correct_validation_rules(): void
{
$request = new ServeModuleAssetRequest();
// 라우트 파라미터 시뮬레이션
$request->setRouteResolver(function () use ($request) {
$route = new \Illuminate\Routing\Route('GET', 'api/modules/assets/{identifier}/{path}', []);
$route->bind($request);
$route->setParameter('identifier', 'test-module');
$route->setParameter('path', 'dist/js/module.iife.js');
return $route;
});
$rules = $request->rules();
$this->assertArrayHasKey('identifier', $rules);
$this->assertArrayHasKey('path', $rules);
$this->assertContains('required', $rules['identifier']);
$this->assertContains('string', $rules['identifier']);
$this->assertContains('required', $rules['path']);
$this->assertContains('string', $rules['path']);
}
/**
* SafeModulePath Rule이 포함되어 있는지 테스트
*/
public function test_includes_safe_path_rule(): void
{
$request = new ServeModuleAssetRequest();
// 라우트 파라미터 시뮬레이션
$request->setRouteResolver(function () use ($request) {
$route = new \Illuminate\Routing\Route('GET', 'api/modules/assets/{identifier}/{path}', []);
$route->bind($request);
$route->setParameter('identifier', 'test-module');
$route->setParameter('path', 'dist/js/module.iife.js');
return $route;
});
$rules = $request->rules();
$hasSafePathRule = false;
foreach ($rules['path'] as $rule) {
if ($rule instanceof SafeModulePath) {
$hasSafePathRule = true;
break;
}
}
$this->assertTrue($hasSafePathRule, 'SafeModulePath rule should be included in path validation');
}
/**
* AllowedModuleFileType Rule이 포함되어 있는지 테스트
*/
public function test_includes_file_type_rule(): void
{
$request = new ServeModuleAssetRequest();
// 라우트 파라미터 시뮬레이션
$request->setRouteResolver(function () use ($request) {
$route = new \Illuminate\Routing\Route('GET', 'api/modules/assets/{identifier}/{path}', []);
$route->bind($request);
$route->setParameter('identifier', 'test-module');
$route->setParameter('path', 'dist/js/module.iife.js');
return $route;
});
$rules = $request->rules();
$hasFileTypeRule = false;
foreach ($rules['path'] as $rule) {
if ($rule instanceof AllowedModuleFileType) {
$hasFileTypeRule = true;
break;
}
}
$this->assertTrue($hasFileTypeRule, 'AllowedModuleFileType rule should be included in path validation');
}
/**
* prepareForValidation이 라우트 파라미터를 병합하는지 테스트
*/
public function test_merges_route_parameters(): void
{
$request = new ServeModuleAssetRequest();
// 라우트 파라미터 시뮬레이션
$request->setRouteResolver(function () use ($request) {
$route = new \Illuminate\Routing\Route('GET', 'api/modules/assets/{identifier}/{path}', []);
$route->bind($request);
$route->setParameter('identifier', 'test-module');
$route->setParameter('path', 'dist/js/module.iife.js');
return $route;
});
// prepareForValidation 호출
$reflection = new \ReflectionClass($request);
$method = $reflection->getMethod('prepareForValidation');
$method->setAccessible(true);
$method->invoke($request);
// 병합된 파라미터 확인
$this->assertEquals('test-module', $request->input('identifier'));
$this->assertEquals('dist/js/module.iife.js', $request->input('path'));
}
}