Skip to content

Commit 415161c

Browse files
committed
Stabilize free-mode rate limit test
1 parent d5aed7b commit 415161c

1 file changed

Lines changed: 47 additions & 33 deletions

File tree

web/src/app/api/v1/chat/completions/__tests__/completions.test.ts

Lines changed: 47 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,7 @@ import {
88
isFreebuffDeploymentHours,
99
} from '@codebuff/common/constants/freebuff-models'
1010
import { formatQuotaResetCountdown, postChatCompletions } from '../_post'
11-
import {
12-
checkFreeModeRateLimit,
13-
resetFreeModeRateLimits,
14-
} from '../free-mode-rate-limiter'
11+
import { resetFreeModeRateLimits } from '../free-mode-rate-limiter'
1512

1613
import type { TrackEventFn } from '@codebuff/common/types/contracts/analytics'
1714
import type { InsertMessageBigqueryFn } from '@codebuff/common/types/contracts/bigquery'
@@ -49,6 +46,10 @@ describe('/api/v1/chat/completions POST endpoint', () => {
4946
id: 'user-new-free-gemini',
5047
banned: false,
5148
},
49+
'test-api-key-reviewer-rate-limit': {
50+
id: 'user-reviewer-rate-limit',
51+
banned: false,
52+
},
5253
}
5354

5455
const mockGetUserInfoFromApiKey: GetUserInfoFromApiKeyFn = async ({
@@ -1006,36 +1007,49 @@ describe('/api/v1/chat/completions POST endpoint', () => {
10061007
expect(body.error).toBe('free_mode_invalid_agent_hierarchy')
10071008
})
10081009

1009-
it('counts child reviewer Gemini requests toward the free-mode request limit', async () => {
1010-
const response = await postChatCompletions({
1011-
req: new NextRequest('http://localhost:3000/api/v1/chat/completions', {
1012-
method: 'POST',
1013-
headers: allowedFreeModeHeaders('test-api-key-new-free-gemini'),
1014-
body: JSON.stringify({
1015-
model: FREEBUFF_GEMINI_PRO_MODEL_ID,
1016-
stream: false,
1017-
codebuff_metadata: {
1018-
run_id: 'run-reviewer-child',
1019-
client_id: 'test-client-id-123',
1020-
cost_mode: 'free',
1021-
},
1022-
}),
1023-
}),
1024-
getUserInfoFromApiKey: mockGetUserInfoFromApiKey,
1025-
logger: mockLogger,
1026-
trackEvent: mockTrackEvent,
1027-
getUserUsageData: mockGetUserUsageData,
1028-
getAgentRunFromId: mockGetAgentRunFromId,
1029-
fetch: mockFetch,
1030-
insertMessageBigquery: mockInsertMessageBigquery,
1031-
loggerWithContext: mockLoggerWithContext,
1032-
checkSessionAdmissible: mockCheckSessionAdmissibleAllow,
1033-
})
1010+
it(
1011+
'counts child reviewer Gemini requests toward the free-mode request limit',
1012+
async () => {
1013+
const createRequest = () =>
1014+
new NextRequest('http://localhost:3000/api/v1/chat/completions', {
1015+
method: 'POST',
1016+
headers: allowedFreeModeHeaders('test-api-key-reviewer-rate-limit'),
1017+
body: JSON.stringify({
1018+
model: FREEBUFF_GEMINI_PRO_MODEL_ID,
1019+
stream: false,
1020+
codebuff_metadata: {
1021+
run_id: 'run-reviewer-child',
1022+
client_id: 'test-client-id-123',
1023+
cost_mode: 'free',
1024+
},
1025+
}),
1026+
})
10341027

1035-
expect(response.status).toBe(200)
1036-
expect(checkFreeModeRateLimit('user-new-free-gemini').limited).toBe(false)
1037-
expect(checkFreeModeRateLimit('user-new-free-gemini').limited).toBe(true)
1038-
})
1028+
const createPostParams = () => ({
1029+
req: createRequest(),
1030+
getUserInfoFromApiKey: mockGetUserInfoFromApiKey,
1031+
logger: mockLogger,
1032+
trackEvent: mockTrackEvent,
1033+
getUserUsageData: mockGetUserUsageData,
1034+
getAgentRunFromId: mockGetAgentRunFromId,
1035+
fetch: mockFetch,
1036+
insertMessageBigquery: mockInsertMessageBigquery,
1037+
loggerWithContext: mockLoggerWithContext,
1038+
checkSessionAdmissible: mockCheckSessionAdmissibleAllow,
1039+
})
1040+
1041+
const firstResponse = await postChatCompletions(createPostParams())
1042+
const secondResponse = await postChatCompletions(createPostParams())
1043+
const limitedResponse = await postChatCompletions(createPostParams())
1044+
1045+
expect(firstResponse.status).toBe(200)
1046+
expect(secondResponse.status).toBe(200)
1047+
expect(limitedResponse.status).toBe(429)
1048+
const body = await limitedResponse.json()
1049+
expect(body.error).toBe('free_mode_rate_limited')
1050+
},
1051+
FETCH_PATH_TEST_TIMEOUT_MS,
1052+
)
10391053

10401054
it(
10411055
'skips credit check when in FREE mode even with 0 credits',

0 commit comments

Comments
 (0)