Sitelet https://github.com/Moonsong-Labs/moonwall/commit/d8ecdbfcf89e7f5417dc7a044fca1c21ad6b6f4c
Skip to content

Commit d8ecdbf

Browse files
timbrindedclaude
andcommitted
fix: clear process.env.CI in tests that exercise prompt paths
Tests for zombie/Docker prompt behavior (abort, kill, quit) need the non-CI code path. Save/restore CI env var with Effect.ensuring for safe cleanup. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
1 parent 543d262 commit d8ecdbf

1 file changed

Lines changed: 40 additions & 4 deletions

File tree

‎src/cli/internal/effect/__tests__/launcherCommon.test.ts‎

Lines changed: 40 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -110,16 +110,29 @@ describe("launcherCommon", () => {
110110
);
111111

112112
it.effect("should prompt when processes are found and user continues", () => {
113+
const savedCI = process.env.CI;
114+
delete process.env.CI;
115+
113116
const lsofOutput = "polkadot 100 user 20u IPv4 12345 0t0 TCP *:9944 (LISTEN)\n";
114117
const layers = Layer.mergeAll(
115118
runningProcessRunner("100\n", lsofOutput),
116119
makePrompter("continue")
117120
);
118121

119-
return zombieBinCheckEffect(["polkadot"]).pipe(Effect.provide(layers));
122+
return zombieBinCheckEffect(["polkadot"]).pipe(
123+
Effect.provide(layers),
124+
Effect.ensuring(
125+
Effect.sync(() => {
126+
if (savedCI !== undefined) process.env.CI = savedCI;
127+
})
128+
)
129+
);
120130
});
121131

122132
it.effect("should fail with UserAbortError when user aborts", () => {
133+
const savedCI = process.env.CI;
134+
delete process.env.CI;
135+
123136
const lsofOutput = "polkadot 100 user 20u IPv4 12345 0t0 TCP *:9944 (LISTEN)\n";
124137
const layers = Layer.mergeAll(
125138
runningProcessRunner("100\n", lsofOutput),
@@ -131,7 +144,12 @@ describe("launcherCommon", () => {
131144
Effect.flip,
132145
Effect.map((error) => {
133146
expect(error).toBeInstanceOf(UserAbortError);
134-
})
147+
}),
148+
Effect.ensuring(
149+
Effect.sync(() => {
150+
if (savedCI !== undefined) process.env.CI = savedCI;
151+
})
152+
)
135153
);
136154
});
137155
});
@@ -172,6 +190,9 @@ describe("launcherCommon", () => {
172190
});
173191

174192
it.effect("should prompt to kill containers when found (non-CI)", () => {
193+
const savedCI = process.env.CI;
194+
delete process.env.CI;
195+
175196
const containers = [{ Id: "abc123def456", Image: "moonbeam:latest", Ports: [] }];
176197
const env = makeDevEnv({ useDocker: true, binPath: "moonbeam:latest" });
177198

@@ -198,10 +219,20 @@ describe("launcherCommon", () => {
198219
NodeFileSystem.layer
199220
);
200221

201-
return devBinCheckEffect(env).pipe(Effect.provide(layers));
222+
return devBinCheckEffect(env).pipe(
223+
Effect.provide(layers),
224+
Effect.ensuring(
225+
Effect.sync(() => {
226+
if (savedCI !== undefined) process.env.CI = savedCI;
227+
})
228+
)
229+
);
202230
});
203231

204232
it.effect("should fail with UserAbortError when user quits", () => {
233+
const savedCI = process.env.CI;
234+
delete process.env.CI;
235+
205236
const containers = [{ Id: "abc123def456", Image: "moonbeam:latest", Ports: [] }];
206237
const env = makeDevEnv({ useDocker: true, binPath: "moonbeam:latest" });
207238
const layers = Layer.mergeAll(
@@ -216,7 +247,12 @@ describe("launcherCommon", () => {
216247
Effect.flip,
217248
Effect.map((error) => {
218249
expect(error).toBeInstanceOf(UserAbortError);
219-
})
250+
}),
251+
Effect.ensuring(
252+
Effect.sync(() => {
253+
if (savedCI !== undefined) process.env.CI = savedCI;
254+
})
255+
)
220256
);
221257
});
222258
});

0 commit comments

Comments
 (0)