import * as NodeServices from "@effect/platform-node/NodeServices"; import { assert, it } from "@effect/vitest"; import * as HostProcess from "@t3tools/shared/HostProcess"; import * as Effect from "effect/Effect"; import * as Exit from "effect/Exit"; import * as FileSystem from "effect/FileSystem"; import * as DesktopPreReadyFileSystem from "./DesktopPreReadyFileSystem.ts"; import * as DesktopUserData from "./DesktopUserData.ts"; const resolveWindowsUserData = (appDataDirectory: string) => DesktopUserData.resolveUserDataPath({ appDataDirectory, isDevelopment: false, platform: "win32", }).pipe(Effect.provide(DesktopPreReadyFileSystem.layer)); it.layer(NodeServices.layer)("DesktopPreReadyFileSystem", (it) => { it.effect.skipIf(HostProcess.Platform.defaultValue() === "win32" || process.getuid?.() === 0)( "fails instead of treating an unreadable profile as missing", () => Effect.gen(function* () { const fileSystem = yield* FileSystem.FileSystem; const root = yield* fileSystem.makeTempDirectoryScoped({ prefix: "t3-pre-ready-fs-" }); yield* fileSystem.chmod(root, 0o000); yield* Effect.addFinalizer(() => fileSystem.chmod(root, 0o700).pipe(Effect.orDie)); const exit = yield* Effect.exit(resolveWindowsUserData(root)); assert.isTrue(Exit.isFailure(exit)); }), ); });