|
|
@@ -923,6 +923,31 @@ it.effect("does not try to install dependencies in read-only OPENCODE_CONFIG_DIR
|
|
|
}).pipe(Effect.provide(testInstanceStoreLayer), Effect.provide(LayerNode.compile(CrossSpawnSpawner.node))),
|
|
|
)
|
|
|
|
|
|
+it.effect("ignores an inaccessible OPENCODE_CONFIG_DIR", () =>
|
|
|
+ Effect.gen(function* () {
|
|
|
+ if (process.platform === "win32") return
|
|
|
+
|
|
|
+ const dir = yield* tmpdirScoped()
|
|
|
+ const configDir = path.join(dir, "inaccessible")
|
|
|
+ yield* FSUtil.use.ensureDir(configDir)
|
|
|
+ yield* FSUtil.use.chmod(configDir, 0o000)
|
|
|
+ yield* Effect.addFinalizer(() => FSUtil.use.chmod(configDir, 0o755).pipe(Effect.ignore))
|
|
|
+
|
|
|
+ yield* withProcessEnv("OPENCODE_CONFIG_DIR", configDir, Config.use.get().pipe(provideInstanceEffect(dir)))
|
|
|
+ }).pipe(Effect.provide(testInstanceStoreLayer), Effect.provide(LayerNode.compile(CrossSpawnSpawner.node))),
|
|
|
+)
|
|
|
+
|
|
|
+it.effect("creates a missing OPENCODE_CONFIG_DIR", () =>
|
|
|
+ Effect.gen(function* () {
|
|
|
+ const dir = yield* tmpdirScoped()
|
|
|
+ const configDir = path.join(dir, "configdir")
|
|
|
+
|
|
|
+ yield* withProcessEnv("OPENCODE_CONFIG_DIR", configDir, Config.use.get().pipe(provideInstanceEffect(dir)))
|
|
|
+
|
|
|
+ expect(yield* FSUtil.use.readFileString(path.join(configDir, ".gitignore"))).toContain("node_modules")
|
|
|
+ }).pipe(Effect.provide(testInstanceStoreLayer), Effect.provide(LayerNode.compile(CrossSpawnSpawner.node))),
|
|
|
+)
|
|
|
+
|
|
|
it.effect("installs dependencies in writable OPENCODE_CONFIG_DIR", () =>
|
|
|
Effect.gen(function* () {
|
|
|
const dir = yield* tmpdirScoped()
|