mirror of
				https://github.com/actions/setup-node.git
				synced 2025-10-31 23:43:33 +00:00 
			
		
		
		
	check- filaure fix
This commit is contained in:
		
							parent
							
								
									ce2cdf5444
								
							
						
					
					
						commit
						a2a7aa78ff
					
				| @ -12,8 +12,8 @@ import { | ||||
| import fs from 'fs'; | ||||
| import * as cacheUtils from '../src/cache-utils'; | ||||
| import * as glob from '@actions/glob'; | ||||
| import { Globber } from '@actions/glob'; | ||||
| import { MockGlobber } from './mock/glob-mock'; | ||||
| import {Globber} from '@actions/glob'; | ||||
| import {MockGlobber} from './mock/glob-mock'; | ||||
| 
 | ||||
| describe('cache-utils', () => { | ||||
|   const versionYarn1 = '1.2.3'; | ||||
| @ -26,26 +26,32 @@ describe('cache-utils', () => { | ||||
|   let fsRealPathSyncSpy: jest.SpyInstance; | ||||
| 
 | ||||
|   beforeEach(() => { | ||||
|     console.log('::stop-commands::stoptoken'); | ||||
|     process.env['GITHUB_WORKSPACE'] = path.join(__dirname, 'data'); | ||||
|     debugSpy = jest.spyOn(core, 'debug'); | ||||
|     debugSpy.mockImplementation(() => {}); | ||||
|     debugSpy.mockImplementation(msg => {}); | ||||
| 
 | ||||
|     info = jest.spyOn(core, 'info'); | ||||
|     warningSpy = jest.spyOn(core, 'warning'); | ||||
| 
 | ||||
|     isFeatureAvailable = jest.spyOn(cache, 'isFeatureAvailable'); | ||||
| 
 | ||||
|     getCommandOutputSpy = jest.spyOn(utils, 'getCommandOutput'); | ||||
| 
 | ||||
|     fsRealPathSyncSpy = jest.spyOn(fs, 'realpathSync'); | ||||
|     fsRealPathSyncSpy.mockImplementation(dirName => dirName); | ||||
|     fsRealPathSyncSpy.mockImplementation(dirName => { | ||||
|       return dirName; | ||||
|     }); | ||||
|   }); | ||||
| 
 | ||||
|   afterEach(() => { | ||||
|     jest.resetAllMocks(); | ||||
|     process.env['GITHUB_SERVER_URL'] = ''; // Ensure environment variables are cleaned up
 | ||||
|     jest.clearAllMocks(); | ||||
|     //jest.restoreAllMocks();
 | ||||
|   }); | ||||
| 
 | ||||
|   afterAll(async () => { | ||||
|     console.log('::stoptoken::'); | ||||
|     jest.restoreAllMocks(); | ||||
|   }, 100000); | ||||
| 
 | ||||
| @ -59,7 +65,9 @@ describe('cache-utils', () => { | ||||
|       ['npm7', null] | ||||
|     ])('getPackageManagerInfo for %s is %o', async (packageManager, result) => { | ||||
|       getCommandOutputSpy.mockImplementationOnce(() => versionYarn1); | ||||
|       await expect(utils.getPackageManagerInfo(packageManager)).resolves.toBe(result); | ||||
|       await expect(utils.getPackageManagerInfo(packageManager)).resolves.toBe( | ||||
|         result | ||||
|       ); | ||||
|     }); | ||||
|   }); | ||||
| 
 | ||||
| @ -73,7 +81,7 @@ describe('cache-utils', () => { | ||||
|     ); | ||||
|   }); | ||||
| 
 | ||||
|   it('isCacheFeatureAvailable for GHES has an internal error', () => { | ||||
|   it('isCacheFeatureAvailable for GHES has an interhal error', () => { | ||||
|     isFeatureAvailable.mockImplementation(() => false); | ||||
|     process.env['GITHUB_SERVER_URL'] = ''; | ||||
|     isCacheFeatureAvailable(); | ||||
| @ -88,6 +96,12 @@ describe('cache-utils', () => { | ||||
|     expect(isCacheFeatureAvailable()).toStrictEqual(true); | ||||
|   }); | ||||
| 
 | ||||
|   afterEach(() => { | ||||
|     process.env['GITHUB_SERVER_URL'] = ''; | ||||
|     jest.resetAllMocks(); | ||||
|     jest.clearAllMocks(); | ||||
|   }); | ||||
| 
 | ||||
|   describe('getCacheDirectoriesPaths', () => { | ||||
|     let existsSpy: jest.SpyInstance; | ||||
|     let lstatSpy: jest.SpyInstance; | ||||
| @ -103,8 +117,10 @@ describe('cache-utils', () => { | ||||
|       })); | ||||
| 
 | ||||
|       globCreateSpy = jest.spyOn(glob, 'create'); | ||||
| 
 | ||||
|       globCreateSpy.mockImplementation( | ||||
|         (pattern: string): Promise<Globber> => MockGlobber.create(['/foo', '/bar']) | ||||
|         (pattern: string): Promise<Globber> => | ||||
|           MockGlobber.create(['/foo', '/bar']) | ||||
|       ); | ||||
| 
 | ||||
|       resetProjectDirectoriesMemoized(); | ||||
| @ -123,18 +139,29 @@ describe('cache-utils', () => { | ||||
|       [supportedPackageManagers.pnpm, ''], | ||||
|       [supportedPackageManagers.pnpm, '/dir/file.lock'], | ||||
|       [supportedPackageManagers.pnpm, '/**/file.lock'] | ||||
|     ])('getCacheDirectoriesPaths should return one dir for non yarn', async (packageManagerInfo, cacheDependency) => { | ||||
|       getCommandOutputSpy.mockImplementation(() => 'foo'); | ||||
|     ])( | ||||
|       'getCacheDirectoriesPaths should return one dir for non yarn', | ||||
|       async (packageManagerInfo, cacheDependency) => { | ||||
|         getCommandOutputSpy.mockImplementation(() => 'foo'); | ||||
| 
 | ||||
|       const dirs = await cacheUtils.getCacheDirectories(packageManagerInfo, cacheDependency); | ||||
|       expect(dirs).toEqual(['foo']); | ||||
|       expect(getCommandOutputSpy).toHaveBeenCalledTimes(1); | ||||
|     }); | ||||
|         const dirs = await cacheUtils.getCacheDirectories( | ||||
|           packageManagerInfo, | ||||
|           cacheDependency | ||||
|         ); | ||||
|         expect(dirs).toEqual(['foo']); | ||||
|         // to do not call for a version
 | ||||
|         // call once for get cache folder
 | ||||
|         expect(getCommandOutputSpy).toHaveBeenCalledTimes(1); | ||||
|       } | ||||
|     ); | ||||
| 
 | ||||
|     it('getCacheDirectoriesPaths should return one dir for yarn without cacheDependency', async () => { | ||||
|       getCommandOutputSpy.mockImplementation(() => 'foo'); | ||||
| 
 | ||||
|       const dirs = await cacheUtils.getCacheDirectories(supportedPackageManagers.yarn, ''); | ||||
|       const dirs = await cacheUtils.getCacheDirectories( | ||||
|         supportedPackageManagers.yarn, | ||||
|         '' | ||||
|       ); | ||||
|       expect(dirs).toEqual(['foo']); | ||||
|     }); | ||||
| 
 | ||||
| @ -148,124 +175,189 @@ describe('cache-utils', () => { | ||||
|       [supportedPackageManagers.yarn, ''], | ||||
|       [supportedPackageManagers.yarn, '/dir/file.lock'], | ||||
|       [supportedPackageManagers.yarn, '/**/file.lock'] | ||||
|     ])('getCacheDirectoriesPaths should throw for getCommandOutput returning empty', async (packageManagerInfo, cacheDependency) => { | ||||
|       getCommandOutputSpy.mockImplementation((command: string) => | ||||
|         command.includes('version') ? '1.' : '' | ||||
|       ); | ||||
|     ])( | ||||
|       'getCacheDirectoriesPaths should throw for getCommandOutput returning empty', | ||||
|       async (packageManagerInfo, cacheDependency) => { | ||||
|         getCommandOutputSpy.mockImplementation((command: string) => | ||||
|           // return empty string to indicate getCacheFolderPath failed
 | ||||
|           //        --version still works
 | ||||
|           command.includes('version') ? '1.' : '' | ||||
|         ); | ||||
| 
 | ||||
|       await expect(cacheUtils.getCacheDirectories(packageManagerInfo, cacheDependency)).rejects.toThrow(); | ||||
|     }); | ||||
|         await expect( | ||||
|           cacheUtils.getCacheDirectories(packageManagerInfo, cacheDependency) | ||||
|         ).rejects.toThrow(); //'Could not get cache folder path for /dir');
 | ||||
|       } | ||||
|     ); | ||||
| 
 | ||||
|     it.each([ | ||||
|       [supportedPackageManagers.yarn, '/dir/file.lock'], | ||||
|       [supportedPackageManagers.yarn, '/**/file.lock'] | ||||
|     ])('getCacheDirectoriesPaths should not throw in case of having no directories', async (packageManagerInfo, cacheDependency) => { | ||||
|       lstatSpy.mockImplementation(arg => ({ | ||||
|         isDirectory: () => false | ||||
|       })); | ||||
|     ])( | ||||
|       'getCacheDirectoriesPaths should nothrow in case of having not directories', | ||||
|       async (packageManagerInfo, cacheDependency) => { | ||||
|         lstatSpy.mockImplementation(arg => ({ | ||||
|           isDirectory: () => false | ||||
|         })); | ||||
| 
 | ||||
|       await cacheUtils.getCacheDirectories(packageManagerInfo, cacheDependency); | ||||
|       expect(warningSpy).toHaveBeenCalledTimes(1); | ||||
|       expect(warningSpy).toHaveBeenCalledWith( | ||||
|         `No existing directories found containing cache-dependency-path="${cacheDependency}"` | ||||
|       ); | ||||
|     }); | ||||
|         await cacheUtils.getCacheDirectories( | ||||
|           packageManagerInfo, | ||||
|           cacheDependency | ||||
|         ); | ||||
|         expect(warningSpy).toHaveBeenCalledTimes(1); | ||||
|         expect(warningSpy).toHaveBeenCalledWith( | ||||
|           `No existing directories found containing cache-dependency-path="${cacheDependency}"` | ||||
|         ); | ||||
|       } | ||||
|     ); | ||||
| 
 | ||||
|     it.each(['1.1.1', '2.2.2'])('getCacheDirectoriesPaths yarn v%s should return one dir without cacheDependency', async version => { | ||||
|       getCommandOutputSpy.mockImplementationOnce(() => version); | ||||
|       getCommandOutputSpy.mockImplementationOnce(() => `foo${version}`); | ||||
|     it.each(['1.1.1', '2.2.2'])( | ||||
|       'getCacheDirectoriesPaths yarn v%s should return one dir without cacheDependency', | ||||
|       async version => { | ||||
|         getCommandOutputSpy.mockImplementationOnce(() => version); | ||||
|         getCommandOutputSpy.mockImplementationOnce(() => `foo${version}`); | ||||
| 
 | ||||
|       const dirs = await cacheUtils.getCacheDirectories(supportedPackageManagers.yarn, ''); | ||||
|       expect(dirs).toEqual([`foo${version}`]); | ||||
|     }); | ||||
|         const dirs = await cacheUtils.getCacheDirectories( | ||||
|           supportedPackageManagers.yarn, | ||||
|           '' | ||||
|         ); | ||||
|         expect(dirs).toEqual([`foo${version}`]); | ||||
|       } | ||||
|     ); | ||||
| 
 | ||||
|     it.each(['1.1.1', '2.2.2'])('getCacheDirectoriesPaths yarn v%s should return 2 dirs with globbed cacheDependency', async version => { | ||||
|       let dirNo = 1; | ||||
|       getCommandOutputSpy.mockImplementation((command: string) => | ||||
|         command.includes('version') ? version : `file_${version}_${dirNo++}` | ||||
|       ); | ||||
|       globCreateSpy.mockImplementation( | ||||
|         (pattern: string): Promise<Globber> => MockGlobber.create(['/tmp/dir1/file', '/tmp/dir2/file']) | ||||
|       ); | ||||
|     it.each(['1.1.1', '2.2.2'])( | ||||
|       'getCacheDirectoriesPaths yarn v%s should return 2 dirs with globbed cacheDependency', | ||||
|       async version => { | ||||
|         let dirNo = 1; | ||||
|         getCommandOutputSpy.mockImplementation((command: string) => | ||||
|           command.includes('version') ? version : `file_${version}_${dirNo++}` | ||||
|         ); | ||||
|         globCreateSpy.mockImplementation( | ||||
|           (pattern: string): Promise<Globber> => | ||||
|             MockGlobber.create(['/tmp/dir1/file', '/tmp/dir2/file']) | ||||
|         ); | ||||
| 
 | ||||
|       const dirs = await cacheUtils.getCacheDirectories(supportedPackageManagers.yarn, '/tmp/**/file'); | ||||
|       expect(dirs).toEqual([`file_${version}_1`, `file_${version}_2`]); | ||||
|     }); | ||||
|         const dirs = await cacheUtils.getCacheDirectories( | ||||
|           supportedPackageManagers.yarn, | ||||
|           '/tmp/**/file' | ||||
|         ); | ||||
|         expect(dirs).toEqual([`file_${version}_1`, `file_${version}_2`]); | ||||
|       } | ||||
|     ); | ||||
| 
 | ||||
|     it.each(['1.1.1', '2.2.2'])('getCacheDirectoriesPaths yarn v%s should return 2 dirs with globbed cacheDependency expanding to duplicates', async version => { | ||||
|       let dirNo = 1; | ||||
|       getCommandOutputSpy.mockImplementation((command: string) => | ||||
|         command.includes('version') ? version : `file_${version}_${dirNo++}` | ||||
|       ); | ||||
|       globCreateSpy.mockImplementation( | ||||
|         (pattern: string): Promise<Globber> => MockGlobber.create([ | ||||
|           '/tmp/dir1/file', | ||||
|           '/tmp/dir2/file', | ||||
|           '/tmp/dir1/file' | ||||
|         ]) | ||||
|       ); | ||||
|     it.each(['1.1.1', '2.2.2'])( | ||||
|       'getCacheDirectoriesPaths yarn v%s should return 2 dirs  with globbed cacheDependency expanding to duplicates', | ||||
|       async version => { | ||||
|         let dirNo = 1; | ||||
|         getCommandOutputSpy.mockImplementation((command: string) => | ||||
|           command.includes('version') ? version : `file_${version}_${dirNo++}` | ||||
|         ); | ||||
|         globCreateSpy.mockImplementation( | ||||
|           (pattern: string): Promise<Globber> => | ||||
|             MockGlobber.create([ | ||||
|               '/tmp/dir1/file', | ||||
|               '/tmp/dir2/file', | ||||
|               '/tmp/dir1/file' | ||||
|             ]) | ||||
|         ); | ||||
| 
 | ||||
|       const dirs = await cacheUtils.getCacheDirectories(supportedPackageManagers.yarn, '/tmp/**/file'); | ||||
|       expect(dirs).toEqual([`file_${version}_1`, `file_${version}_2`]); | ||||
|     }); | ||||
|         const dirs = await cacheUtils.getCacheDirectories( | ||||
|           supportedPackageManagers.yarn, | ||||
|           '/tmp/**/file' | ||||
|         ); | ||||
|         expect(dirs).toEqual([`file_${version}_1`, `file_${version}_2`]); | ||||
|       } | ||||
|     ); | ||||
| 
 | ||||
|     it.each(['1.1.1', '2.2.2'])('getCacheDirectoriesPaths yarn v%s should return 2 unique dirs despite duplicate cache directories', async version => { | ||||
|       let dirNo = 1; | ||||
|       getCommandOutputSpy.mockImplementation((command: string) => | ||||
|         command.includes('version') ? version : `file_${version}_${dirNo++ % 2}` | ||||
|       ); | ||||
|       globCreateSpy.mockImplementation( | ||||
|         (pattern: string): Promise<Globber> => MockGlobber.create([ | ||||
|           '/tmp/dir1/file', | ||||
|           '/tmp/dir2/file', | ||||
|           '/tmp/dir3/file' | ||||
|         ]) | ||||
|       ); | ||||
|     it.each(['1.1.1', '2.2.2'])( | ||||
|       'getCacheDirectoriesPaths yarn v%s should return 2 uniq dirs despite duplicate cache directories', | ||||
|       async version => { | ||||
|         let dirNo = 1; | ||||
|         getCommandOutputSpy.mockImplementation((command: string) => | ||||
|           command.includes('version') | ||||
|             ? version | ||||
|             : `file_${version}_${dirNo++ % 2}` | ||||
|         ); | ||||
|         globCreateSpy.mockImplementation( | ||||
|           (pattern: string): Promise<Globber> => | ||||
|             MockGlobber.create([ | ||||
|               '/tmp/dir1/file', | ||||
|               '/tmp/dir2/file', | ||||
|               '/tmp/dir3/file' | ||||
|             ]) | ||||
|         ); | ||||
| 
 | ||||
|       const dirs = await cacheUtils.getCacheDirectories(supportedPackageManagers.yarn, '/tmp/**/file'); | ||||
|       expect(dirs).toEqual([`file_${version}_1`, `file_${version}_0`]); | ||||
|       expect(getCommandOutputSpy).toHaveBeenCalledTimes(6); | ||||
|       expect(getCommandOutputSpy).toHaveBeenCalledWith('yarn --version', '/tmp/dir1'); | ||||
|       expect(getCommandOutputSpy).toHaveBeenCalledWith('yarn --version', '/tmp/dir2'); | ||||
|       expect(getCommandOutputSpy).toHaveBeenCalledWith('yarn --version', '/tmp/dir3'); | ||||
|       expect(getCommandOutputSpy).toHaveBeenCalledWith( | ||||
|         version.startsWith('1.') ? 'yarn cache dir' : 'yarn config get cacheFolder', | ||||
|         '/tmp/dir1' | ||||
|       ); | ||||
|       expect(getCommandOutputSpy).toHaveBeenCalledWith( | ||||
|         version.startsWith('1.') ? 'yarn cache dir' : 'yarn config get cacheFolder', | ||||
|         '/tmp/dir2' | ||||
|       ); | ||||
|       expect(getCommandOutputSpy).toHaveBeenCalledWith( | ||||
|         version.startsWith('1.') ? 'yarn cache dir' : 'yarn config get cacheFolder', | ||||
|         '/tmp/dir3' | ||||
|       ); | ||||
|     }); | ||||
|         const dirs = await cacheUtils.getCacheDirectories( | ||||
|           supportedPackageManagers.yarn, | ||||
|           '/tmp/**/file' | ||||
|         ); | ||||
|         expect(dirs).toEqual([`file_${version}_1`, `file_${version}_0`]); | ||||
|         expect(getCommandOutputSpy).toHaveBeenCalledTimes(6); | ||||
|         expect(getCommandOutputSpy).toHaveBeenCalledWith( | ||||
|           'yarn --version', | ||||
|           '/tmp/dir1' | ||||
|         ); | ||||
|         expect(getCommandOutputSpy).toHaveBeenCalledWith( | ||||
|           'yarn --version', | ||||
|           '/tmp/dir2' | ||||
|         ); | ||||
|         expect(getCommandOutputSpy).toHaveBeenCalledWith( | ||||
|           'yarn --version', | ||||
|           '/tmp/dir3' | ||||
|         ); | ||||
|         expect(getCommandOutputSpy).toHaveBeenCalledWith( | ||||
|           version.startsWith('1.') | ||||
|             ? 'yarn cache dir' | ||||
|             : 'yarn config get cacheFolder', | ||||
|           '/tmp/dir1' | ||||
|         ); | ||||
|         expect(getCommandOutputSpy).toHaveBeenCalledWith( | ||||
|           version.startsWith('1.') | ||||
|             ? 'yarn cache dir' | ||||
|             : 'yarn config get cacheFolder', | ||||
|           '/tmp/dir2' | ||||
|         ); | ||||
|         expect(getCommandOutputSpy).toHaveBeenCalledWith( | ||||
|           version.startsWith('1.') | ||||
|             ? 'yarn cache dir' | ||||
|             : 'yarn config get cacheFolder', | ||||
|           '/tmp/dir3' | ||||
|         ); | ||||
|       } | ||||
|     ); | ||||
| 
 | ||||
|     it.each(['1.1.1', '2.2.2'])('getCacheDirectoriesPaths yarn v%s should return 4 dirs with multiple globs', async version => { | ||||
|       const cacheDependencyPath = `/tmp/dir1/file
 | ||||
|         /tmp/dir2/file | ||||
|     it.each(['1.1.1', '2.2.2'])( | ||||
|       'getCacheDirectoriesPaths yarn v%s should return 4 dirs with multiple globs', | ||||
|       async version => { | ||||
|         // simulate wrong indents
 | ||||
|         const cacheDependencyPath = `/tmp/dir1/file
 | ||||
|           /tmp/dir2/file | ||||
| /tmp/**/file | ||||
|       `;
 | ||||
|       globCreateSpy.mockImplementation( | ||||
|         (pattern: string): Promise<Globber> => MockGlobber.create([ | ||||
|           '/tmp/dir1/file', | ||||
|           '/tmp/dir2/file', | ||||
|           '/tmp/dir3/file', | ||||
|           '/tmp/dir4/file' | ||||
|         ]) | ||||
|       ); | ||||
|       let dirNo = 1; | ||||
|       getCommandOutputSpy.mockImplementation((command: string) => | ||||
|         command.includes('version') ? version : `file_${version}_${dirNo++}` | ||||
|       ); | ||||
|       const dirs = await cacheUtils.getCacheDirectories(supportedPackageManagers.yarn, cacheDependencyPath); | ||||
|       expect(dirs).toEqual([ | ||||
|         `file_${version}_1`, | ||||
|         `file_${version}_2`, | ||||
|         `file_${version}_3`, | ||||
|         `file_${version}_4` | ||||
|       ]); | ||||
|     }); | ||||
|           `;
 | ||||
|         globCreateSpy.mockImplementation( | ||||
|           (pattern: string): Promise<Globber> => | ||||
|             MockGlobber.create([ | ||||
|               '/tmp/dir1/file', | ||||
|               '/tmp/dir2/file', | ||||
|               '/tmp/dir3/file', | ||||
|               '/tmp/dir4/file' | ||||
|             ]) | ||||
|         ); | ||||
|         let dirNo = 1; | ||||
|         getCommandOutputSpy.mockImplementation((command: string) => | ||||
|           command.includes('version') ? version : `file_${version}_${dirNo++}` | ||||
|         ); | ||||
|         const dirs = await cacheUtils.getCacheDirectories( | ||||
|           supportedPackageManagers.yarn, | ||||
|           cacheDependencyPath | ||||
|         ); | ||||
|         expect(dirs).toEqual([ | ||||
|           `file_${version}_1`, | ||||
|           `file_${version}_2`, | ||||
|           `file_${version}_3`, | ||||
|           `file_${version}_4` | ||||
|         ]); | ||||
|       } | ||||
|     ); | ||||
|   }); | ||||
| }); | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user