test(updater): narrow optional workflow jobs and format the OTA assertion

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015mFCmHk4zPyWpD9yY2C3yJ
This commit is contained in:
Claude 2026-10-03 20:26:52 +00:00
parent 80c56eef36
commit 1c3d8c40fe
No known key found for this signature in database

View File

@ -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'");
});
});