mirror of https://github.com/actions/checkout.git
				
				
				
			
		
			
				
	
	
		
			89 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
			
		
		
	
	
			89 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
| const mockCore = jest.genMockFromModule('@actions/core') as any
 | |
| mockCore.info = (message: string) => {
 | |
|   info.push(message)
 | |
| }
 | |
| let info: string[]
 | |
| let retryHelper: any
 | |
| 
 | |
| describe('retry-helper tests', () => {
 | |
|   beforeAll(() => {
 | |
|     // Mocks
 | |
|     jest.setMock('@actions/core', mockCore)
 | |
| 
 | |
|     // Now import
 | |
|     const retryHelperModule = require('../lib/retry-helper')
 | |
|     retryHelper = new retryHelperModule.RetryHelper(3, 0, 0)
 | |
|   })
 | |
| 
 | |
|   beforeEach(() => {
 | |
|     // Reset info
 | |
|     info = []
 | |
|   })
 | |
| 
 | |
|   afterAll(() => {
 | |
|     // Reset modules
 | |
|     jest.resetModules()
 | |
|   })
 | |
| 
 | |
|   it('first attempt succeeds', async () => {
 | |
|     const actual = await retryHelper.execute(async () => {
 | |
|       return 'some result'
 | |
|     })
 | |
|     expect(actual).toBe('some result')
 | |
|     expect(info).toHaveLength(0)
 | |
|   })
 | |
| 
 | |
|   it('second attempt succeeds', async () => {
 | |
|     let attempts = 0
 | |
|     const actual = await retryHelper.execute(() => {
 | |
|       if (++attempts == 1) {
 | |
|         throw new Error('some error')
 | |
|       }
 | |
| 
 | |
|       return Promise.resolve('some result')
 | |
|     })
 | |
|     expect(attempts).toBe(2)
 | |
|     expect(actual).toBe('some result')
 | |
|     expect(info).toHaveLength(2)
 | |
|     expect(info[0]).toBe('some error')
 | |
|     expect(info[1]).toMatch(/Waiting .+ seconds before trying again/)
 | |
|   })
 | |
| 
 | |
|   it('third attempt succeeds', async () => {
 | |
|     let attempts = 0
 | |
|     const actual = await retryHelper.execute(() => {
 | |
|       if (++attempts < 3) {
 | |
|         throw new Error(`some error ${attempts}`)
 | |
|       }
 | |
| 
 | |
|       return Promise.resolve('some result')
 | |
|     })
 | |
|     expect(attempts).toBe(3)
 | |
|     expect(actual).toBe('some result')
 | |
|     expect(info).toHaveLength(4)
 | |
|     expect(info[0]).toBe('some error 1')
 | |
|     expect(info[1]).toMatch(/Waiting .+ seconds before trying again/)
 | |
|     expect(info[2]).toBe('some error 2')
 | |
|     expect(info[3]).toMatch(/Waiting .+ seconds before trying again/)
 | |
|   })
 | |
| 
 | |
|   it('all attempts fail succeeds', async () => {
 | |
|     let attempts = 0
 | |
|     let error: Error = (null as unknown) as Error
 | |
|     try {
 | |
|       await retryHelper.execute(() => {
 | |
|         throw new Error(`some error ${++attempts}`)
 | |
|       })
 | |
|     } catch (err) {
 | |
|       error = err
 | |
|     }
 | |
|     expect(error.message).toBe('some error 3')
 | |
|     expect(attempts).toBe(3)
 | |
|     expect(info).toHaveLength(4)
 | |
|     expect(info[0]).toBe('some error 1')
 | |
|     expect(info[1]).toMatch(/Waiting .+ seconds before trying again/)
 | |
|     expect(info[2]).toBe('some error 2')
 | |
|     expect(info[3]).toMatch(/Waiting .+ seconds before trying again/)
 | |
|   })
 | |
| })
 |