diff --git a/packages/blobs/src/main.test.ts b/packages/blobs/src/main.test.ts index 669d647eb..bfb56110e 100644 --- a/packages/blobs/src/main.test.ts +++ b/packages/blobs/src/main.test.ts @@ -4,7 +4,7 @@ import { env, version as nodeVersion } from 'node:process' import { MockFetch } from '@netlify/test-utils' import { base64Decode } from '@netlify/runtime-utils' import semver from 'semver' -import { describe, test, expect, beforeAll, afterEach } from 'vitest' +import { describe, test, expect, beforeAll, afterEach, vi } from 'vitest' import { base64Encode, streamToString } from '../test/util.js' @@ -30,6 +30,7 @@ beforeAll(async () => { afterEach(() => { delete env.NETLIFY_BLOBS_CONTEXT delete globalThis.netlifyBlobsContext + vi.useRealTimers() }) const deployID = '6527dfab35be400008332a1d' @@ -1145,6 +1146,8 @@ describe('set', () => { }) test('Retries failed operations', async () => { + vi.useFakeTimers() + const mockStore = new MockFetch() .put({ headers: { authorization: `Bearer ${apiToken}` }, @@ -1191,7 +1194,10 @@ describe('set', () => { siteID, }) - await blobs.set(key, value) + const operation = blobs.set(key, value) + + await vi.runAllTimersAsync() + await operation expect(mockStore.fulfilled).toBeTruthy() }) @@ -1252,6 +1258,8 @@ describe('set', () => { }) test('Retries failed operations', async () => { + vi.useFakeTimers() + const mockStore = new MockFetch() .put({ body: value, @@ -1286,7 +1294,10 @@ describe('set', () => { siteID, }) - await blobs.set(key, value) + const operation = blobs.set(key, value) + + await vi.runAllTimersAsync() + await operation expect(mockStore.fulfilled).toBeTruthy() }) diff --git a/packages/blobs/src/retry.test.ts b/packages/blobs/src/retry.test.ts new file mode 100644 index 000000000..e537082ae --- /dev/null +++ b/packages/blobs/src/retry.test.ts @@ -0,0 +1,13 @@ +import { afterEach, expect, test, vi } from 'vitest' + +afterEach(() => vi.unstubAllGlobals()) + +test('does not access the process environment during import', async () => { + vi.stubGlobal('process', { + get env() { + throw new Error('Environment access is not allowed') + }, + }) + + await expect(import('./retry.ts')).resolves.toHaveProperty('fetchAndRetry') +}) diff --git a/packages/blobs/src/retry.ts b/packages/blobs/src/retry.ts index 174aa03ae..336a6b530 100644 --- a/packages/blobs/src/retry.ts +++ b/packages/blobs/src/retry.ts @@ -1,8 +1,6 @@ -import { getEnvironment } from '@netlify/runtime-utils' - import type { Fetcher } from './types.ts' -const DEFAULT_RETRY_DELAY = getEnvironment().get('NODE_ENV') === 'test' ? 1 : 5000 +const DEFAULT_RETRY_DELAY = 5000 const MIN_RETRY_DELAY = 1000 const MAX_RETRY = 5 const RATE_LIMIT_HEADER = 'X-RateLimit-Reset'