@@ -4,6 +4,7 @@ import * as Effect from "effect/Effect";
44import * as FileSystem from "effect/FileSystem" ;
55import * as Layer from "effect/Layer" ;
66import * as Option from "effect/Option" ;
7+ import * as PlatformError from "effect/PlatformError" ;
78
89import type * as Electron from "electron" ;
910
@@ -105,6 +106,7 @@ const withIdentity = <A, E, R>(
105106 readonly calls ?: ElectronAppCalls ;
106107 readonly environment ?: TestEnvironmentInput ;
107108 readonly legacyPathExists ?: boolean ;
109+ readonly legacyPathProbeError ?: PlatformError . PlatformError ;
108110 readonly packageJson ?: string ;
109111 readonly pngIconPath ?: Option . Option < string > ;
110112 } = { } ,
@@ -121,7 +123,11 @@ const withIdentity = <A, E, R>(
121123 Layer . provideMerge (
122124 FileSystem . layerNoop ( {
123125 exists : ( path ) =>
124- Effect . succeed ( input . legacyPathExists === true && path . includes ( "T3 Code (Alpha)" ) ) ,
126+ input . legacyPathProbeError
127+ ? Effect . fail ( input . legacyPathProbeError )
128+ : Effect . succeed (
129+ input . legacyPathExists === true && path . includes ( "T3 Code (Alpha)" ) ,
130+ ) ,
125131 readFileString : ( ) =>
126132 Effect . succeed ( input . packageJson ?? '{"t3codeCommitHash":"abcdef1234567890"}' ) ,
127133 } ) ,
@@ -147,6 +153,33 @@ describe("DesktopAppIdentity", () => {
147153 ) ,
148154 ) ;
149155
156+ it . effect ( "preserves failures while inspecting the legacy userData path" , ( ) => {
157+ const legacyPath = "/Users/alice/Library/Application Support/T3 Code (Alpha)" ;
158+ const cause = PlatformError . systemError ( {
159+ _tag : "PermissionDenied" ,
160+ module : "FileSystem" ,
161+ method : "exists" ,
162+ description : "permission denied" ,
163+ pathOrDescriptor : legacyPath ,
164+ } ) ;
165+
166+ return withIdentity (
167+ Effect . gen ( function * ( ) {
168+ const identity = yield * DesktopAppIdentity . DesktopAppIdentity ;
169+ const error = yield * identity . resolveUserDataPath . pipe ( Effect . flip ) ;
170+
171+ assert . instanceOf ( error , DesktopAppIdentity . DesktopUserDataPathResolutionError ) ;
172+ assert . equal ( error . legacyPath , legacyPath ) ;
173+ assert . strictEqual ( error . cause , cause ) ;
174+ assert . equal (
175+ error . message ,
176+ `Failed to inspect legacy desktop user-data path at "${ legacyPath } ".` ,
177+ ) ;
178+ } ) ,
179+ { legacyPathProbeError : cause } ,
180+ ) ;
181+ } ) ;
182+
150183 it . effect ( "configures app identity from the environment commit override" , ( ) => {
151184 const calls : ElectronAppCalls = {
152185 setAboutPanelOptions : [ ] ,
0 commit comments