| 1 | import { assert, describe, it } from "@effect/vitest"; |
| 2 | import * as Effect from "effect/Effect"; |
| 3 | import * as Layer from "effect/Layer"; |
| 4 | |
| 5 | import * as DesktopEnvironment from "../../app/DesktopEnvironment.ts"; |
| 6 | import * as DesktopLifecycle from "../../app/DesktopLifecycle.ts"; |
| 7 | import * as DesktopShutdown from "../../app/DesktopShutdown.ts"; |
| 8 | import * as DesktopState from "../../app/DesktopState.ts"; |
| 9 | import * as ElectronApp from "../../electron/ElectronApp.ts"; |
| 10 | import * as ElectronTheme from "../../electron/ElectronTheme.ts"; |
| 11 | import * as DesktopAppSettings from "../../settings/DesktopAppSettings.ts"; |
| 12 | import * as DesktopWindow from "../../window/DesktopWindow.ts"; |
| 13 | import { getLocalEnvironmentEnabled, setLocalEnvironmentEnabled } from "./localEnvironment.ts"; |
| 14 | |
| 15 | // `relaunch` declares the lifecycle runtime services as requirements even |
| 16 | // though the mocked relaunch never touches them. |
| 17 | const layerUnusedLifecycleRuntime = Layer.mergeAll( |
| 18 | DesktopShutdown.layer, |
| 19 | DesktopState.layer, |
| 20 | Layer.succeed( |
| 21 | DesktopEnvironment.DesktopEnvironment, |
| 22 | DesktopEnvironment.DesktopEnvironment.of( |
| 23 | {} as DesktopEnvironment.DesktopEnvironment["Service"], |
| 24 | ), |
| 25 | ), |
| 26 | Layer.mock(DesktopWindow.DesktopWindow, {}), |
| 27 | Layer.mock(ElectronApp.ElectronApp, {}), |
| 28 | Layer.mock(ElectronTheme.ElectronTheme, {}), |
| 29 | ); |
| 30 | |
| 31 | describe("local environment IPC", () => { |
| 32 | it.effect("relaunches only when the setting changes and keeps other settings", () => { |
| 33 | const relaunchReasons: Array<string> = []; |
| 34 | const layer = Layer.mergeAll( |
| 35 | DesktopAppSettings.layerTest({ |
| 36 | ...DesktopAppSettings.DEFAULT_DESKTOP_SETTINGS, |
| 37 | wslBackendEnabled: true, |
| 38 | }), |
| 39 | Layer.mock(DesktopLifecycle.DesktopLifecycle, { |
| 40 | relaunch: (reason) => |
| 41 | Effect.sync(() => { |
| 42 | relaunchReasons.push(reason); |
| 43 | }), |
| 44 | }), |
| 45 | layerUnusedLifecycleRuntime, |
| 46 | ); |
| 47 | return Effect.gen(function* () { |
| 48 | yield* setLocalEnvironmentEnabled.handler(false); |
| 49 | assert.isFalse(yield* getLocalEnvironmentEnabled.handler()); |
| 50 | yield* setLocalEnvironmentEnabled.handler(false); |
| 51 | assert.deepEqual(relaunchReasons, ["localEnvironmentEnabled=false"]); |
| 52 | |
| 53 | yield* setLocalEnvironmentEnabled.handler(true); |
| 54 | assert.isTrue(yield* getLocalEnvironmentEnabled.handler()); |
| 55 | const appSettings = yield* DesktopAppSettings.DesktopAppSettings; |
| 56 | assert.isTrue((yield* appSettings.get).wslBackendEnabled); |
| 57 | assert.deepEqual(relaunchReasons, [ |
| 58 | "localEnvironmentEnabled=false", |
| 59 | "localEnvironmentEnabled=true", |
| 60 | ]); |
| 61 | }).pipe(Effect.provide(layer)); |
| 62 | }); |
| 63 | }); |