@@ -3,9 +3,12 @@ import { describe, test, expect } from 'bun:test'
33import {
44 isOutOfCreditsError ,
55 isFreeModeUnavailableError ,
6+ isFreeModeRateLimitedError ,
7+ isRateLimitError ,
68 getCountryBlockFromFreeModeError ,
79 OUT_OF_CREDITS_MESSAGE ,
810 FREE_MODE_UNAVAILABLE_MESSAGE ,
11+ FREEBUFF_RATE_LIMIT_MESSAGE ,
912 createErrorMessage ,
1013} from '../error-handling'
1114
@@ -115,6 +118,42 @@ describe('error-handling', () => {
115118 } )
116119 } )
117120
121+ describe ( 'isRateLimitError' , ( ) => {
122+ test ( 'returns true for error with statusCode 429' , ( ) => {
123+ const error = { statusCode : 429 , message : 'Too Many Requests' }
124+ expect ( isRateLimitError ( error ) ) . toBe ( true )
125+ } )
126+
127+ test ( 'returns true for thrown API error with status 429' , ( ) => {
128+ const error = { status : 429 , message : 'Too Many Requests' }
129+ expect ( isRateLimitError ( error ) ) . toBe ( true )
130+ } )
131+
132+ test ( 'returns false for non-429 status codes' , ( ) => {
133+ expect ( isRateLimitError ( { statusCode : 402 } ) ) . toBe ( false )
134+ expect ( isRateLimitError ( { statusCode : 500 } ) ) . toBe ( false )
135+ } )
136+
137+ test ( 'returns false for string statusCode' , ( ) => {
138+ expect ( isRateLimitError ( { statusCode : '429' } ) ) . toBe ( false )
139+ } )
140+ } )
141+
142+ describe ( 'isFreeModeRateLimitedError' , ( ) => {
143+ test ( 'returns true for typed free mode rate limit errors' , ( ) => {
144+ expect (
145+ isFreeModeRateLimitedError ( {
146+ statusCode : 429 ,
147+ error : 'free_mode_rate_limited' ,
148+ } ) ,
149+ ) . toBe ( true )
150+ } )
151+
152+ test ( 'returns false for untyped provider rate limit errors' , ( ) => {
153+ expect ( isFreeModeRateLimitedError ( { statusCode : 429 } ) ) . toBe ( false )
154+ } )
155+ } )
156+
118157 describe ( 'getCountryBlockFromFreeModeError' , ( ) => {
119158 test ( 'extracts country block details from free-mode unavailable errors' , ( ) => {
120159 const error = {
@@ -177,6 +216,15 @@ describe('error-handling', () => {
177216 } )
178217 } )
179218
219+ describe ( 'FREEBUFF_RATE_LIMIT_MESSAGE' , ( ) => {
220+ test ( 'encourages retry without mentioning credits or payment' , ( ) => {
221+ const message = FREEBUFF_RATE_LIMIT_MESSAGE . toLowerCase ( )
222+ expect ( message ) . toContain ( 'try again' )
223+ expect ( message ) . not . toContain ( 'credit' )
224+ expect ( message ) . not . toContain ( 'pay' )
225+ } )
226+ } )
227+
180228 describe ( 'createErrorMessage' , ( ) => {
181229 test ( 'creates message from Error object' , ( ) => {
182230 const error = new Error ( 'Something went wrong' )
0 commit comments