v7.0.0 release

This commit is contained in:
HeuJung committed 2026-07-01 10:30:32 +09:00
1 parent 0e7fa04b03
commit c4ea9a6cd1
3582 files changed
+626189 -160151

No files matched your search

+31 -7
View File
@@ -141,10 +141,14 @@ class OrderActivityLogListenerTest extends TestCase
---
## 확장 마이그레이션 자동 로드 (requiredExtensions)
## 확장 격리 (requiredExtensions)
코어 테스트에서 확장(모듈/플러그인)의 DB 테이블이 필요한 경우, `$requiredExtensions` 프로퍼티를 선언합니다.
`RefreshDatabase`의 `migrate:fresh` 실행 시 해당 확장의 마이그레이션도 함께 실행됩니다.
코어 테스트는 기본적으로 확장(모듈/플러그인)이 격리된 상태로 실행됩니다.
테스트가 특정 확장을 필요로 하면 `$requiredExtensions` 프로퍼티로 명시합니다.
이 선언은 두 가지를 동시에 수행합니다:
1. **마이그레이션 로드** — `RefreshDatabase`의 `migrate:fresh` 실행 시 해당 확장의 마이그레이션도 함께 실행
2. **확장 로딩 allowlist** — testing 환경에서 명시한 확장의 ServiceProvider / route 만 등록 허용
```php
class ResourceAbilitiesTest extends TestCase
@@ -152,7 +156,7 @@ class ResourceAbilitiesTest extends TestCase
use RefreshDatabase;
/**
* sirsoft-marketing 플러그인이 User 리소스 훅에 개입하므로 마이그레이션 필요
* sirsoft-marketing 플러그인이 User 리소스 훅에 개입하므로 명시
*/
protected array $requiredExtensions = [
'plugins/sirsoft-marketing',
@@ -160,6 +164,21 @@ class ResourceAbilitiesTest extends TestCase
}
```
### 격리 동작 (allowlist)
`$requiredExtensions` 미선언 코어 테스트는 어떤 모듈/플러그인의 ServiceProvider 도
등록되지 않습니다. 이로써 한 확장의 전역 미들웨어(예: GDPR `CookieConsentMiddleware`)가
무관한 코어 테스트에 개입하는 것을 차단합니다.
- 확장의 ServiceProvider 바인딩 / route / 전역 미들웨어가 필요한 테스트는
그 확장을 `$requiredExtensions` 에 명시해야 합니다.
- 확장 자체 테스트(`ModuleTestCase` / `PluginTestCase` 상속)는 테스트 파일 경로로
자기 확장을 자동 탐지(`selfExtension()`)하므로 별도 선언이 불필요합니다.
다른 확장에 의존하는 경우(예: 이커머스 테스트가 결제 플러그인 필요)만 명시합니다.
- 격리는 testing 환경에서만 동작합니다 — 운영/개발 환경의 확장 로딩은 영향받지 않습니다.
- `ModuleManager::loadModules` / `PluginManager::loadPlugins`(hook listener / config /
채널 등록 경로)에는 격리가 적용되지 않습니다.
### 경로 형식
프로젝트 루트 기준 상대 경로로, `database/migrations` 디렉토리가 자동 추가됩니다:
@@ -172,10 +191,15 @@ class ResourceAbilitiesTest extends TestCase
### 동작 원리
`TestCase::setUpTraits()`에서 `RefreshDatabase::refreshDatabase()` 호출 전에 확장 마이그레이션 경로를 `migrator`에 등록합니다:
마이그레이션 등록과 allowlist 주입은 서로 다른 훅 시점에 일어납니다:
1. `setUpTraits()` → `loadExtensionMigrations()` (확장 경로 등록)
2. `parent::setUpTraits()` → `RefreshDatabase::refreshDatabase()` → `migrate:fresh` (코어 + 확장 함께 실행)
- **allowlist 주입** — `TestCase::setUp()` 최상단에서 `ExtensionTestAllowlist::set()` 호출.
`parent::setUp()`의 `createApplication()`(= 모든 ServiceProvider register/boot)보다
먼저 실행되어야 provider 가드가 올바른 시점에 적용됩니다.
- **마이그레이션 등록** — `TestCase::setUpTraits()`에서 `RefreshDatabase::refreshDatabase()`
호출 전에 확장 마이그레이션 경로를 `migrator`에 등록:
1. `setUpTraits()` → `loadExtensionMigrations()` (확장 경로 등록)
2. `parent::setUpTraits()` → `RefreshDatabase::refreshDatabase()` → `migrate:fresh` (코어 + 확장 함께 실행)
### 주의사항