Files
Gnuboard7/tests/Unit/Http/Requests/PerformExtensionUpdateRequestTest.php
T
2026-04-20 20:37:49 +09:00

102 lines
3.4 KiB
PHP

<?php
namespace Tests\Unit\Http\Requests;
use App\Http\Requests\Module\PerformModuleUpdateRequest;
use App\Http\Requests\Plugin\PerformPluginUpdateRequest;
use Illuminate\Support\Facades\Validator;
use Tests\TestCase;
/**
* 모듈/플러그인 업데이트 요청 검증 규칙 테스트.
*
* layout_strategy 와 vendor_mode 가 유효한 값만 수용하는지 확인.
*/
class PerformExtensionUpdateRequestTest extends TestCase
{
/**
* @dataProvider validLayoutStrategyProvider
*/
public function test_module_update_request_accepts_valid_layout_strategy(string $strategy): void
{
$rules = (new PerformModuleUpdateRequest())->rules();
$validator = Validator::make(['layout_strategy' => $strategy], $rules);
$this->assertFalse($validator->fails(), "layout_strategy={$strategy} 은 유효해야 합니다");
}
/**
* @dataProvider validLayoutStrategyProvider
*/
public function test_plugin_update_request_accepts_valid_layout_strategy(string $strategy): void
{
$rules = (new PerformPluginUpdateRequest())->rules();
$validator = Validator::make(['layout_strategy' => $strategy], $rules);
$this->assertFalse($validator->fails(), "layout_strategy={$strategy} 은 유효해야 합니다");
}
public function test_module_update_request_rejects_invalid_layout_strategy(): void
{
$rules = (new PerformModuleUpdateRequest())->rules();
$validator = Validator::make(['layout_strategy' => 'invalid'], $rules);
$this->assertTrue($validator->fails());
$this->assertArrayHasKey('layout_strategy', $validator->errors()->toArray());
}
public function test_plugin_update_request_rejects_invalid_layout_strategy(): void
{
$rules = (new PerformPluginUpdateRequest())->rules();
$validator = Validator::make(['layout_strategy' => 'invalid'], $rules);
$this->assertTrue($validator->fails());
$this->assertArrayHasKey('layout_strategy', $validator->errors()->toArray());
}
public function test_module_update_request_layout_strategy_is_optional(): void
{
$rules = (new PerformModuleUpdateRequest())->rules();
$validator = Validator::make([], $rules);
$this->assertFalse($validator->fails(), 'layout_strategy 미지정 시에도 통과해야 함');
}
/**
* @dataProvider validVendorModeProvider
*/
public function test_module_update_request_accepts_valid_vendor_mode(string $mode): void
{
$rules = (new PerformModuleUpdateRequest())->rules();
$validator = Validator::make(['vendor_mode' => $mode], $rules);
$this->assertFalse($validator->fails(), "vendor_mode={$mode} 은 유효해야 합니다");
}
public function test_plugin_update_request_rejects_invalid_vendor_mode(): void
{
$rules = (new PerformPluginUpdateRequest())->rules();
$validator = Validator::make(['vendor_mode' => 'invalid'], $rules);
$this->assertTrue($validator->fails());
$this->assertArrayHasKey('vendor_mode', $validator->errors()->toArray());
}
public static function validLayoutStrategyProvider(): array
{
return [
'overwrite' => ['overwrite'],
'keep' => ['keep'],
];
}
public static function validVendorModeProvider(): array
{
return [
'auto' => ['auto'],
'composer' => ['composer'],
'bundled' => ['bundled'],
];
}
}