@@ -3,9 +3,15 @@ import { describe, it, expect, beforeEach, jest, mock } from 'bun:test'
33// Create mock functions
44const execMock = jest . fn ( ) . mockResolvedValue ( 0 )
55const whichMock = jest . fn ( ) . mockResolvedValue ( '/usr/local/bin/elide' )
6- const downloadToolMock = jest . fn ( ) . mockResolvedValue ( '/tmp/install.sh ' )
6+ const downloadToolMock = jest . fn ( ) . mockResolvedValue ( '/tmp/elide.pkg ' )
77const obtainVersionMock = jest . fn ( ) . mockResolvedValue ( '1.0.0' )
8- const addPathMock = jest . fn ( )
8+ const buildCdnAssetUrlMock = jest
9+ . fn ( )
10+ . mockReturnValue (
11+ new URL (
12+ 'https://elide.zip/artifacts/nightly/latest/elide.macos-arm64.pkg?source=gha'
13+ )
14+ )
915const infoMock = jest . fn ( )
1016const debugMock = jest . fn ( )
1117
@@ -27,9 +33,10 @@ mock.module('@actions/core', () => ({
2733 error : jest . fn ( ) ,
2834 warning : jest . fn ( ) ,
2935 getInput : jest . fn ( ) . mockReturnValue ( '' ) ,
36+ getBooleanInput : jest . fn ( ) . mockReturnValue ( true ) ,
3037 setFailed : jest . fn ( ) ,
3138 setOutput : jest . fn ( ) ,
32- addPath : addPathMock
39+ addPath : jest . fn ( )
3340} ) )
3441mock . module ( '@actions/tool-cache' , ( ) => ( {
3542 downloadTool : downloadToolMock ,
@@ -42,70 +49,76 @@ mock.module('../src/command', () => ({
4249 obtainVersion : obtainVersionMock ,
4350 elideInfo : jest . fn ( )
4451} ) )
52+ mock . module ( '../src/releases' , ( ) => ( {
53+ buildCdnAssetUrl : buildCdnAssetUrlMock
54+ } ) )
4555
46- const { installViaScript } = await import ( '../src/install-script ' )
56+ const { installViaPkg } = await import ( '../src/install-pkg ' )
4757const { default : buildOptions } = await import ( '../src/options' )
4858
49- describe ( 'install-script ' , ( ) => {
59+ describe ( 'install-pkg ' , ( ) => {
5060 beforeEach ( ( ) => {
5161 execMock . mockClear ( )
5262 whichMock . mockClear ( )
5363 downloadToolMock . mockClear ( )
5464 obtainVersionMock . mockClear ( )
55- addPathMock . mockClear ( )
65+ buildCdnAssetUrlMock . mockClear ( )
5666 infoMock . mockClear ( )
5767 debugMock . mockClear ( )
5868
59- downloadToolMock . mockResolvedValue ( '/tmp/install.sh ' )
69+ downloadToolMock . mockResolvedValue ( '/tmp/elide.pkg ' )
6070 execMock . mockResolvedValue ( 0 )
6171 whichMock . mockResolvedValue ( '/usr/local/bin/elide' )
6272 obtainVersionMock . mockResolvedValue ( '1.0.0' )
73+ buildCdnAssetUrlMock . mockReturnValue (
74+ new URL (
75+ 'https://elide.zip/artifacts/nightly/latest/elide.macos-arm64.pkg?source=gha'
76+ )
77+ )
6378 } )
6479
65- it ( 'should download and execute the install script ' , async ( ) => {
80+ it ( 'should construct the URL correctly via buildCdnAssetUrl ' , async ( ) => {
6681 const options = buildOptions ( {
6782 os : 'darwin' ,
6883 arch : 'aarch64' ,
6984 version : 'latest'
7085 } )
71- const result = await installViaScript ( options )
86+ await installViaPkg ( options )
7287
73- expect ( downloadToolMock ) . toHaveBeenCalledWith (
74- 'https://dl.elide.dev/cli/install.sh'
75- )
76- expect ( execMock ) . toHaveBeenCalledWith ( 'bash' , [ '/tmp/install.sh' ] )
77- expect ( result . elidePath ) . toBe ( '/usr/local/bin/elide' )
78- expect ( result . version . tag_name ) . toBe ( '1.0.0' )
88+ expect ( buildCdnAssetUrlMock ) . toHaveBeenCalledWith ( options , 'pkg' )
7989 } )
8090
81- it ( 'should pass --version when a specific version is requested ' , async ( ) => {
91+ it ( 'should call sudo installer -pkg with the downloaded path ' , async ( ) => {
8292 const options = buildOptions ( {
83- os : 'linux ' ,
84- arch : 'amd64 ' ,
85- version : '1.2.3 '
93+ os : 'darwin ' ,
94+ arch : 'aarch64 ' ,
95+ version : 'latest '
8696 } )
87- await installViaScript ( options )
97+ await installViaPkg ( options )
8898
89- expect ( execMock ) . toHaveBeenCalledWith ( 'bash' , [
90- '/tmp/install.sh' ,
91- '--version' ,
92- '1.2.3'
99+ expect ( downloadToolMock ) . toHaveBeenCalledWith (
100+ 'https://elide.zip/artifacts/nightly/latest/elide.macos-arm64.pkg?source=gha'
101+ )
102+ expect ( execMock ) . toHaveBeenCalledWith ( 'sudo' , [
103+ 'installer' ,
104+ '-pkg' ,
105+ '/tmp/elide.pkg' ,
106+ '-target' ,
107+ '/'
93108 ] )
94109 } )
95110
96- it ( 'should fall back to ~/.elide/bin if which fails initially' , async ( ) => {
97- whichMock
98- . mockRejectedValueOnce ( new Error ( 'not found' ) )
99- . mockResolvedValueOnce ( '/home/runner/.elide/bin/elide' )
100-
111+ it ( 'should return the correct elidePath and version' , async ( ) => {
101112 const options = buildOptions ( {
102- os : 'linux ' ,
103- arch : 'amd64 ' ,
113+ os : 'darwin ' ,
114+ arch : 'aarch64 ' ,
104115 version : 'latest'
105116 } )
106- const result = await installViaScript ( options )
117+ const result = await installViaPkg ( options )
107118
108- expect ( addPathMock ) . toHaveBeenCalled ( )
109- expect ( result . elidePath ) . toBe ( '/home/runner/.elide/bin/elide' )
119+ expect ( result . elidePath ) . toBe ( '/usr/local/bin/elide' )
120+ expect ( result . version . tag_name ) . toBe ( '1.0.0' )
121+ expect ( result . elideBin ) . toBe ( '/usr/local/bin' )
122+ expect ( result . elideHome ) . toBe ( '/usr/local/bin' )
110123 } )
111124} )
0 commit comments