mirror of
				https://github.com/actions/checkout.git
				synced 2025-10-31 10:08:37 +08:00 
			
		
		
		
	Updated tests for the differences in 2.48 behaviour
This commit is contained in:
		
							parent
							
								
									49528c1b57
								
							
						
					
					
						commit
						0548471950
					
				|  | @ -379,3 +379,225 @@ describe('Test fetchDepth and fetchTags options', () => { | ||||||
|     ) |     ) | ||||||
|   }) |   }) | ||||||
| }) | }) | ||||||
|  | 
 | ||||||
|  | describe('Test git 2.48 tag fetching behavior', () => { | ||||||
|  |   beforeEach(async () => { | ||||||
|  |     jest.spyOn(fshelper, 'fileExistsSync').mockImplementation(jest.fn()) | ||||||
|  |     jest.spyOn(fshelper, 'directoryExistsSync').mockImplementation(jest.fn()) | ||||||
|  |   }) | ||||||
|  | 
 | ||||||
|  |   afterEach(() => { | ||||||
|  |     jest.restoreAllMocks() | ||||||
|  |   }) | ||||||
|  | 
 | ||||||
|  |   it('should perform separate tag fetch for git 2.48 when fetchTags is true', async () => { | ||||||
|  |     mockExec.mockImplementation((path, args, options) => { | ||||||
|  |       if (args.includes('version')) { | ||||||
|  |         options.listeners.stdout(Buffer.from('2.48.1')) | ||||||
|  |       } | ||||||
|  |       return 0 | ||||||
|  |     }) | ||||||
|  |     jest.spyOn(exec, 'exec').mockImplementation(mockExec) | ||||||
|  | 
 | ||||||
|  |     const workingDirectory = 'test' | ||||||
|  |     const lfs = false | ||||||
|  |     const doSparseCheckout = false | ||||||
|  |     git = await commandManager.createCommandManager( | ||||||
|  |       workingDirectory, | ||||||
|  |       lfs, | ||||||
|  |       doSparseCheckout | ||||||
|  |     ) | ||||||
|  | 
 | ||||||
|  |     const refSpec = ['refspec1'] | ||||||
|  |     const options = { | ||||||
|  |       fetchTags: true | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     await git.fetch(refSpec, options) | ||||||
|  | 
 | ||||||
|  |     // First call: main fetch with --no-tags
 | ||||||
|  |     expect(mockExec).toHaveBeenNthCalledWith( | ||||||
|  |       2, // First call is version check
 | ||||||
|  |       expect.any(String), | ||||||
|  |       [ | ||||||
|  |         '-c', | ||||||
|  |         'protocol.version=2', | ||||||
|  |         'fetch', | ||||||
|  |         '--no-tags', | ||||||
|  |         '--prune', | ||||||
|  |         '--no-recurse-submodules', | ||||||
|  |         'origin', | ||||||
|  |         'refspec1' | ||||||
|  |       ], | ||||||
|  |       expect.any(Object) | ||||||
|  |     ) | ||||||
|  | 
 | ||||||
|  |     // Second call: separate tag fetch
 | ||||||
|  |     expect(mockExec).toHaveBeenNthCalledWith( | ||||||
|  |       3, | ||||||
|  |       expect.any(String), | ||||||
|  |       [ | ||||||
|  |         '-c', | ||||||
|  |         'protocol.version=2', | ||||||
|  |         'fetch', | ||||||
|  |         '--tags', | ||||||
|  |         '--prune', | ||||||
|  |         'origin' | ||||||
|  |       ], | ||||||
|  |       expect.any(Object) | ||||||
|  |     ) | ||||||
|  | 
 | ||||||
|  |     expect(mockExec).toHaveBeenCalledTimes(3) // version + main fetch + tag fetch
 | ||||||
|  |   }) | ||||||
|  | 
 | ||||||
|  |   it('should perform separate tag fetch with progress for git 2.48', async () => { | ||||||
|  |     mockExec.mockImplementation((path, args, options) => { | ||||||
|  |       if (args.includes('version')) { | ||||||
|  |         options.listeners.stdout(Buffer.from('2.48.0')) | ||||||
|  |       } | ||||||
|  |       return 0 | ||||||
|  |     }) | ||||||
|  |     jest.spyOn(exec, 'exec').mockImplementation(mockExec) | ||||||
|  | 
 | ||||||
|  |     const workingDirectory = 'test' | ||||||
|  |     const lfs = false | ||||||
|  |     const doSparseCheckout = false | ||||||
|  |     git = await commandManager.createCommandManager( | ||||||
|  |       workingDirectory, | ||||||
|  |       lfs, | ||||||
|  |       doSparseCheckout | ||||||
|  |     ) | ||||||
|  | 
 | ||||||
|  |     const refSpec = ['refspec1'] | ||||||
|  |     const options = { | ||||||
|  |       fetchTags: true, | ||||||
|  |       showProgress: true | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     await git.fetch(refSpec, options) | ||||||
|  | 
 | ||||||
|  |     // Main fetch with --no-tags and --progress
 | ||||||
|  |     expect(mockExec).toHaveBeenNthCalledWith( | ||||||
|  |       2, | ||||||
|  |       expect.any(String), | ||||||
|  |       [ | ||||||
|  |         '-c', | ||||||
|  |         'protocol.version=2', | ||||||
|  |         'fetch', | ||||||
|  |         '--no-tags', | ||||||
|  |         '--prune', | ||||||
|  |         '--no-recurse-submodules', | ||||||
|  |         '--progress', | ||||||
|  |         'origin', | ||||||
|  |         'refspec1' | ||||||
|  |       ], | ||||||
|  |       expect.any(Object) | ||||||
|  |     ) | ||||||
|  | 
 | ||||||
|  |     // Separate tag fetch with --progress
 | ||||||
|  |     expect(mockExec).toHaveBeenNthCalledWith( | ||||||
|  |       3, | ||||||
|  |       expect.any(String), | ||||||
|  |       [ | ||||||
|  |         '-c', | ||||||
|  |         'protocol.version=2', | ||||||
|  |         'fetch', | ||||||
|  |         '--tags', | ||||||
|  |         '--prune', | ||||||
|  |         '--progress', | ||||||
|  |         'origin' | ||||||
|  |       ], | ||||||
|  |       expect.any(Object) | ||||||
|  |     ) | ||||||
|  |   }) | ||||||
|  | 
 | ||||||
|  |   it('should NOT perform separate tag fetch for git 2.48 when fetchTags is false', async () => { | ||||||
|  |     mockExec.mockImplementation((path, args, options) => { | ||||||
|  |       if (args.includes('version')) { | ||||||
|  |         options.listeners.stdout(Buffer.from('2.48.1')) | ||||||
|  |       } | ||||||
|  |       return 0 | ||||||
|  |     }) | ||||||
|  |     jest.spyOn(exec, 'exec').mockImplementation(mockExec) | ||||||
|  | 
 | ||||||
|  |     const workingDirectory = 'test' | ||||||
|  |     const lfs = false | ||||||
|  |     const doSparseCheckout = false | ||||||
|  |     git = await commandManager.createCommandManager( | ||||||
|  |       workingDirectory, | ||||||
|  |       lfs, | ||||||
|  |       doSparseCheckout | ||||||
|  |     ) | ||||||
|  | 
 | ||||||
|  |     const refSpec = ['refspec1'] | ||||||
|  |     const options = { | ||||||
|  |       fetchTags: false | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     await git.fetch(refSpec, options) | ||||||
|  | 
 | ||||||
|  |     // Only one fetch call with --no-tags
 | ||||||
|  |     expect(mockExec).toHaveBeenNthCalledWith( | ||||||
|  |       2, | ||||||
|  |       expect.any(String), | ||||||
|  |       [ | ||||||
|  |         '-c', | ||||||
|  |         'protocol.version=2', | ||||||
|  |         'fetch', | ||||||
|  |         '--no-tags', | ||||||
|  |         '--prune', | ||||||
|  |         '--no-recurse-submodules', | ||||||
|  |         'origin', | ||||||
|  |         'refspec1' | ||||||
|  |       ], | ||||||
|  |       expect.any(Object) | ||||||
|  |     ) | ||||||
|  | 
 | ||||||
|  |     expect(mockExec).toHaveBeenCalledTimes(2) // version + single fetch only
 | ||||||
|  |   }) | ||||||
|  | 
 | ||||||
|  |   it('should use normal behavior for non-2.48 git versions', async () => { | ||||||
|  |     mockExec.mockImplementation((path, args, options) => { | ||||||
|  |       if (args.includes('version')) { | ||||||
|  |         options.listeners.stdout(Buffer.from('2.47.0')) | ||||||
|  |       } | ||||||
|  |       return 0 | ||||||
|  |     }) | ||||||
|  |     jest.spyOn(exec, 'exec').mockImplementation(mockExec) | ||||||
|  | 
 | ||||||
|  |     const workingDirectory = 'test' | ||||||
|  |     const lfs = false | ||||||
|  |     const doSparseCheckout = false | ||||||
|  |     git = await commandManager.createCommandManager( | ||||||
|  |       workingDirectory, | ||||||
|  |       lfs, | ||||||
|  |       doSparseCheckout | ||||||
|  |     ) | ||||||
|  | 
 | ||||||
|  |     const refSpec = ['refspec1'] | ||||||
|  |     const options = { | ||||||
|  |       fetchTags: true | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     await git.fetch(refSpec, options) | ||||||
|  | 
 | ||||||
|  |     // Single fetch with --tags
 | ||||||
|  |     expect(mockExec).toHaveBeenNthCalledWith( | ||||||
|  |       2, | ||||||
|  |       expect.any(String), | ||||||
|  |       [ | ||||||
|  |         '-c', | ||||||
|  |         'protocol.version=2', | ||||||
|  |         'fetch', | ||||||
|  |         '--tags', | ||||||
|  |         '--prune', | ||||||
|  |         '--no-recurse-submodules', | ||||||
|  |         'origin', | ||||||
|  |         'refspec1' | ||||||
|  |       ], | ||||||
|  |       expect.any(Object) | ||||||
|  |     ) | ||||||
|  | 
 | ||||||
|  |     expect(mockExec).toHaveBeenCalledTimes(2) // version + single fetch only
 | ||||||
|  |   }) | ||||||
|  | }) | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 Steven Van Ingelgem
						Steven Van Ingelgem