요구 (caret) → true 통과 * 4. requireVersion=null → 검증 생략 true 통과 */ class PluginManagerVersionCheckTest extends TestCase { private ?string $originalEnvVersion = null; protected function setUp(): void { parent::setUp(); $this->originalEnvVersion = $_ENV['APP_VERSION'] ?? null; unset($_ENV['APP_VERSION'], $_SERVER['APP_VERSION']); putenv('APP_VERSION'); config()->set('app.version', '7.0.0-beta.1'); } protected function tearDown(): void { unset($_ENV['APP_VERSION'], $_SERVER['APP_VERSION']); if ($this->originalEnvVersion !== null) { $_ENV['APP_VERSION'] = $this->originalEnvVersion; $_SERVER['APP_VERSION'] = $this->originalEnvVersion; putenv('APP_VERSION='.$this->originalEnvVersion); } else { putenv('APP_VERSION'); } parent::tearDown(); } public function test_incompatible_required_version_throws_with_plugin_payload(): void { try { CoreVersionChecker::validateExtension('>=7.1.0', 'sirsoft-payment', 'plugin'); $this->fail('CoreVersionMismatchException 이 발생해야 합니다.'); } catch (CoreVersionMismatchException $e) { $payload = $e->getPayload(); $this->assertSame('plugin', $payload['extension_type']); $this->assertSame('sirsoft-payment', $payload['identifier']); $this->assertSame('>=7.1.0', $payload['required_core_version']); $this->assertSame('7.0.0-beta.1', $payload['current_core_version']); $this->assertSame('/admin/core/update', $payload['guide_url']); } } public function test_compatible_when_required_constraint_is_satisfied_loose(): void { config()->set('app.version', '7.1.0'); $this->assertTrue(CoreVersionChecker::isCompatible('>=7.0.0')); $this->assertTrue(CoreVersionChecker::validateExtension('>=7.0.0', 'sirsoft-payment', 'plugin')); } public function test_compatible_when_caret_constraint_with_higher_patch(): void { config()->set('app.version', '7.0.5'); $this->assertTrue(CoreVersionChecker::isCompatible('^7.0.0')); } public function test_null_required_version_skips_validation(): void { $this->assertTrue(CoreVersionChecker::isCompatible(null)); $this->assertTrue(CoreVersionChecker::validateExtension(null, 'sirsoft-payment', 'plugin')); } public function test_env_app_version_overrides_config_for_plugin_check(): void { config()->set('app.version', '7.0.0-beta.1'); $_ENV['APP_VERSION'] = '7.2.0'; $this->assertTrue(CoreVersionChecker::isCompatible('>=7.1.0')); } }