diff --git a/src/helpers.ts b/src/helpers.ts index 796ba4c..9526e04 100644 --- a/src/helpers.ts +++ b/src/helpers.ts @@ -29,7 +29,7 @@ export function sanitizeGithubWorkflowName(name: string) { const nameTruncated = nameWithoutSpecialCharacters.slice(0, MAX_TAG_VALUE_LENGTH); return nameTruncated; } - +/* c8 ignore start */ export function errorMessage(error: unknown) { return error instanceof Error ? error.message : String(error); } @@ -37,8 +37,9 @@ export function errorMessage(error: unknown) { export function isDefined(i: T | undefined | null): i is T { return i !== undefined && i !== null; } +/* c8 ignore stop */ -function defaultSleep(ms: number) { +export function defaultSleep(ms: number) { return new Promise((resolve) => setTimeout(resolve, ms)); } let sleep = defaultSleep; diff --git a/test/helpers.test.ts b/test/helpers.test.ts new file mode 100644 index 0000000..452d0a6 --- /dev/null +++ b/test/helpers.test.ts @@ -0,0 +1,26 @@ +import * as helpers from '../src/helpers'; +describe('helpers', () => { + beforeEach(() => { + jest.resetModules(); + jest.clearAllMocks(); + }); + + test('removes brackets from GitHub Actor', () => { + expect(helpers.sanitizeGithubActor('foo[bot]')).toEqual('foo_bot_'); + }); + + test('removes special characters from worflow names', () => { + expect(helpers.sanitizeGithubWorkflowName('sdf234@#$%$^&*()_+{}|:"<>?')).toEqual('sdf234@__________+___:_<>?'); + }); + + test('can sleep', async () => { + const sleep = helpers.defaultSleep(10); + await expect(Promise.race([sleep, new Promise((_res, rej) => setTimeout(rej, 20))])).resolves; + }); + + test("backoff function doesn't retry non-retryable errors", async () => { + const fn = jest.fn().mockRejectedValue('i am not retryable'); + await expect(helpers.retryAndBackoff(fn, false)).rejects.toMatch('i am not retryable'); + expect(fn).toHaveBeenCalledTimes(1); + }); +});