mirror of
https://code.forgejo.org/actions/checkout.git
synced 2024-12-27 04:55:52 +00:00
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/)
|
||
|
})
|
||
|
})
|