@@ -144,6 +144,39 @@ describe("GET /api/gigs", () => {
144144 expect ( json . pagination . totalPages ) . toBe ( 3 ) ;
145145 } ) ;
146146
147+ it ( "truncates fractional page and limit values before querying" , async ( ) => {
148+ const chain = chainResult ( { data : null , error : null } ) ;
149+ chain . select = vi . fn ( ) . mockReturnValue ( chain ) ;
150+ chain . range = vi . fn ( ) . mockResolvedValue ( { data : [ ] , error : null , count : 30 } ) ;
151+
152+ mockFrom . mockReturnValue ( chain ) ;
153+
154+ const res = await GET ( makeGetRequest ( { page : "2.9" , limit : "5.9" } ) ) ;
155+ const json = await res . json ( ) ;
156+
157+ expect ( res . status ) . toBe ( 200 ) ;
158+ expect ( chain . range ) . toHaveBeenCalledWith ( 5 , 9 ) ;
159+ expect ( json . pagination . page ) . toBe ( 2 ) ;
160+ expect ( json . pagination . limit ) . toBe ( 5 ) ;
161+ expect ( json . pagination . totalPages ) . toBe ( 6 ) ;
162+ } ) ;
163+
164+ it ( "defaults invalid and non-positive pagination values before querying" , async ( ) => {
165+ const chain = chainResult ( { data : null , error : null } ) ;
166+ chain . select = vi . fn ( ) . mockReturnValue ( chain ) ;
167+ chain . range = vi . fn ( ) . mockResolvedValue ( { data : [ ] , error : null , count : 0 } ) ;
168+
169+ mockFrom . mockReturnValue ( chain ) ;
170+
171+ const res = await GET ( makeGetRequest ( { page : "-10" , limit : "abc" } ) ) ;
172+ const json = await res . json ( ) ;
173+
174+ expect ( res . status ) . toBe ( 200 ) ;
175+ expect ( chain . range ) . toHaveBeenCalledWith ( 0 , 19 ) ;
176+ expect ( json . pagination . page ) . toBe ( 1 ) ;
177+ expect ( json . pagination . limit ) . toBe ( 20 ) ;
178+ } ) ;
179+
147180 it ( "filters by listing_type when provided" , async ( ) => {
148181 const chain = chainResult ( { data : null , error : null } ) ;
149182 chain . select = vi . fn ( ) . mockReturnValue ( chain ) ;
0 commit comments