From 1c3d8c40fe1bd0c3e914b43583bd1d33e88b8531 Mon Sep 17 00:00:00 2001 From: Claude Date: Sat, 3 Oct 2026 20:26:52 +0000 Subject: [PATCH] test(updater): narrow optional workflow jobs and format the OTA assertion Co-Authored-By: Claude Opus 5.5 (1M context) Claude-Session: https://claude.ai/code/session_015mFCmHk4zPyWpD9yY2C3yJ --- infra/updater/src/ci-workflow.test.ts | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/infra/updater/src/ci-workflow.test.ts b/infra/updater/src/ci-workflow.test.ts index 54c87e6..ddbaae1 100644 --- a/infra/updater/src/ci-workflow.test.ts +++ b/infra/updater/src/ci-workflow.test.ts @@ -21,7 +21,7 @@ const workflow = parse(workflowText) as { describe("ci workflow merge gate", () => { it("aggregates only product jobs in Product CI", () => { const productGate = workflow.jobs["product-gate"]; - expect(productGate.needs).toEqual([ + expect(productGate?.needs).toEqual([ "lint", "check", "build", @@ -29,12 +29,12 @@ describe("ci workflow merge gate", () => { "test-integration", "test-e2e", ]); - expect(productGate.if).toBe("always()"); + expect(productGate?.if).toBe("always()"); }); it("soft-fails mobile OTA so missing Expo credentials do not fail the workflow", () => { const mobile = workflow.jobs["publish-mobile-update"]; - expect(mobile["continue-on-error"]).toBe(true); + expect(mobile?.["continue-on-error"]).toBe(true); expect(workflowText).toContain('echo "ready=false" >> "$GITHUB_OUTPUT"'); expect(workflowText).not.toMatch( /Check Expo automation token[\s\S]*?exit 1[\s\S]*?Require Expo/, @@ -42,8 +42,6 @@ describe("ci workflow merge gate", () => { expect(workflowText).not.toContain( "Add an EXPO_TOKEN repository secret with access to the inbox-zero/rakazo Expo project.", ); - expect(workflowText).toContain( - "steps.expo_token.outputs.ready == 'true'", - ); + expect(workflowText).toContain("steps.expo_token.outputs.ready == 'true'"); }); });