Skip to content

Commit 1e9a71f

Browse files
fix(testing): align capability-aware config mocks
1 parent a3d7f63 commit 1e9a71f

7 files changed

Lines changed: 38 additions & 5 deletions

File tree

apps/sim/executor/handlers/pi/babysit-backend.test.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
/**
22
* @vitest-environment node
33
*/
4-
import { beforeEach, describe, expect, it, vi } from 'vitest'
4+
import { resetEnvMock, setEnv } from '@sim/testing'
5+
import { afterAll, beforeEach, describe, expect, it, vi } from 'vitest'
56

67
const {
78
mockWithPiSandbox,
@@ -68,6 +69,8 @@ import { BABYSIT_ROUND_PATH } from '@/executor/handlers/pi/babysit-round'
6869
import type { PiBabysitContinuationParams } from '@/executor/handlers/pi/backend'
6970
import { DIFF_PATH } from '@/executor/handlers/pi/cloud-shared'
7071

72+
afterAll(resetEnvMock)
73+
7174
const OLD_SHA = 'a'.repeat(40)
7275
const NEW_SHA = 'c'.repeat(40)
7376
const SECOND_SHA = 'd'.repeat(40)
@@ -235,6 +238,7 @@ function makeRunner(options: {
235238
describe('runBabysitPiWithOptions', () => {
236239
beforeEach(() => {
237240
vi.clearAllMocks()
241+
setEnv({ SANDBOX_PROVIDER: 'e2b' })
238242
mockWithPiSandbox.mockReset()
239243
mockFetchSnapshot.mockReset()
240244
mockFetchThreads.mockReset()

apps/sim/lib/execution/event-buffer.test.ts

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
/**
22
* @vitest-environment node
33
*/
4-
import { redisConfigMockFns, resetRedisConfigMock } from '@sim/testing'
4+
import { redisConfigMockFns, resetEnvMock, resetRedisConfigMock, setEnv } from '@sim/testing'
55
import { sleep } from '@sim/utils/helpers'
66
import { afterAll, beforeEach, describe, expect, it, vi } from 'vitest'
77
import type { ExecutionEventEntry } from '@/lib/execution/event-buffer'
@@ -26,7 +26,10 @@ const { mockRedis, persistedEntries } = vi.hoisted(() => {
2626

2727
const mockGetRedisClient = redisConfigMockFns.mockGetRedisClient
2828

29-
afterAll(resetRedisConfigMock)
29+
afterAll(() => {
30+
resetEnvMock()
31+
resetRedisConfigMock()
32+
})
3033

3134
import {
3235
createExecutionEventWriter,
@@ -77,6 +80,7 @@ function countOccurrences(haystack: string, needle: string): number {
7780
describe('execution event buffer', () => {
7881
beforeEach(() => {
7982
vi.clearAllMocks()
83+
setEnv({ REDIS_URL: 'redis://localhost:6379' })
8084
persistedEntries.length = 0
8185
mockGetRedisClient.mockReturnValue(mockRedis)
8286
mockRedis.get.mockResolvedValue(null)

apps/sim/lib/execution/remote-sandbox/conformance.test.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ const {
3737
mockEnv: {
3838
SANDBOX_PROVIDER: 'e2b' as string | undefined,
3939
PI_SANDBOX_LIFETIME_MS: undefined as string | undefined,
40+
E2B_ENABLED: 'true',
4041
E2B_API_KEY: 'test-key',
4142
MOTHERSHIP_E2B_TEMPLATE_ID: 'mothership-shell',
4243
MOTHERSHIP_E2B_DOC_TEMPLATE_ID: 'mothership-docs',

packages/testing/src/mocks/env.mock.test.ts

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,16 @@ describe('env mock', () => {
3636
expect(envMock.getEnv('SOME_UNPINNED_TEST_VAR')).toBe('from-process-env')
3737
})
3838

39+
it('does not inherit process.env for pinned capability defaults', () => {
40+
vi.stubEnv('REDIS_URL', 'redis://localhost:6379')
41+
vi.stubEnv('STORAGE_PROVIDER', 's3')
42+
resetEnvMock()
43+
expect(envMock.env.REDIS_URL).toBeUndefined()
44+
expect(envMock.getEnv('REDIS_URL')).toBeUndefined()
45+
expect(envMock.env.STORAGE_PROVIDER).toBe('local')
46+
expect(envMock.getEnv('STORAGE_PROVIDER')).toBe('local')
47+
})
48+
3949
it('pins explicitly-undefined overrides without process.env fallback', () => {
4050
vi.stubEnv('NEXT_PUBLIC_APP_URL', 'https://shadowed.example.com')
4151
setEnv({ NEXT_PUBLIC_APP_URL: undefined })

packages/testing/src/mocks/env.mock.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,12 @@ export const defaultMockEnv = {
2525
EMAIL_DOMAIN: 'test.sim.ai',
2626
PERSONAL_EMAIL_FROM: 'Test <test@test.sim.ai>',
2727

28+
// Cache
29+
REDIS_URL: undefined,
30+
31+
// Storage
32+
STORAGE_PROVIDER: 'local',
33+
2834
// URLs
2935
NEXT_PUBLIC_APP_URL: 'https://test.sim.ai',
3036
}

packages/testing/src/mocks/redis-config.mock.test.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ describe('redis-config mock', () => {
77
})
88

99
it('defaults to the Redis-unavailable behavior of the real module', async () => {
10+
expect(redisConfigMock.getConfiguredRedisUrl()).toBeNull()
1011
expect(redisConfigMock.getRedisClient()).toBeNull()
1112
await expect(redisConfigMock.acquireLock('k', 'v', 10)).resolves.toBe(true)
1213
await expect(redisConfigMock.releaseLock('k', 'v')).resolves.toBe(true)
@@ -24,12 +25,15 @@ describe('redis-config mock', () => {
2425

2526
it('resetRedisConfigMock restores defaults after overrides', async () => {
2627
const fakeClient = { ping: () => 'PONG' }
28+
redisConfigMockFns.mockGetConfiguredRedisUrl.mockReturnValue('redis://localhost:6379')
2729
redisConfigMockFns.mockGetRedisClient.mockReturnValue(fakeClient)
2830
redisConfigMockFns.mockAcquireLock.mockResolvedValue(false)
31+
expect(redisConfigMock.getConfiguredRedisUrl()).toBe('redis://localhost:6379')
2932
expect(redisConfigMock.getRedisClient()).toBe(fakeClient)
3033
await expect(redisConfigMock.acquireLock('k', 'v', 10)).resolves.toBe(false)
3134

3235
resetRedisConfigMock()
36+
expect(redisConfigMock.getConfiguredRedisUrl()).toBeNull()
3337
expect(redisConfigMock.getRedisClient()).toBeNull()
3438
await expect(redisConfigMock.acquireLock('k', 'v', 10)).resolves.toBe(true)
3539
})

packages/testing/src/mocks/redis-config.mock.ts

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,8 +45,9 @@ function getRedisConnectionDefaultsImpl(url?: string): {
4545

4646
/**
4747
* Controllable mock functions for `@/lib/core/config/redis`.
48-
* Default: `getRedisClient` returns `null` (tests that need a client override
49-
* it), matching the real module's behavior when `REDIS_URL` is unset.
48+
* Default: `getConfiguredRedisUrl` and `getRedisClient` return `null` (tests
49+
* that need Redis override them), matching the real module's database-cache
50+
* behavior.
5051
* `acquireLock`/`releaseLock`/`extendLock` default to succeeding (`true`),
5152
* matching the real module's Redis-unavailable no-op path.
5253
* {@link resetRedisConfigMock} restores the default behaviors.
@@ -59,6 +60,7 @@ function getRedisConnectionDefaultsImpl(url?: string): {
5960
* ```
6061
*/
6162
export const redisConfigMockFns = {
63+
mockGetConfiguredRedisUrl: vi.fn().mockReturnValue(null),
6264
mockGetRedisClient: vi.fn().mockReturnValue(null),
6365
mockGetRedisConnectionDefaults: vi.fn(getRedisConnectionDefaultsImpl),
6466
mockOnRedisReconnect: vi.fn(),
@@ -73,6 +75,7 @@ export const redisConfigMockFns = {
7375
* Restores every redis-config mock function to its default behavior.
7476
*/
7577
export function resetRedisConfigMock(): void {
78+
redisConfigMockFns.mockGetConfiguredRedisUrl.mockReset().mockReturnValue(null)
7679
redisConfigMockFns.mockGetRedisClient.mockReset().mockReturnValue(null)
7780
redisConfigMockFns.mockGetRedisConnectionDefaults
7881
.mockReset()
@@ -95,6 +98,7 @@ export function resetRedisConfigMock(): void {
9598
* ```
9699
*/
97100
export const redisConfigMock = {
101+
getConfiguredRedisUrl: redisConfigMockFns.mockGetConfiguredRedisUrl,
98102
getRedisClient: redisConfigMockFns.mockGetRedisClient,
99103
getRedisConnectionDefaults: redisConfigMockFns.mockGetRedisConnectionDefaults,
100104
onRedisReconnect: redisConfigMockFns.mockOnRedisReconnect,

0 commit comments

Comments
 (0)