@@ -174,21 +174,27 @@ describe("LetterQueueRepository", () => {
174174 } ) ;
175175
176176 it ( "returns letters in timestamp order" , async ( ) => {
177+ jest . useFakeTimers ( ) . setSystemTime ( new Date ( ) ) ;
177178 await letterQueueRepository . putLetter (
178179 createLetter ( { letterId : "first-letter" } ) ,
179180 ) ;
181+ jest . advanceTimersByTime ( 1 ) ;
180182 await letterQueueRepository . putLetter (
181183 createLetter ( { letterId : "second-letter" } ) ,
182184 ) ;
185+ jest . advanceTimersByTime ( 1 ) ;
183186 await letterQueueRepository . putLetter (
184187 createLetter ( { letterId : "third-letter" } ) ,
185188 ) ;
189+ jest . advanceTimersByTime ( 1 ) ;
186190 await letterQueueRepository . putLetter (
187191 createLetter ( { letterId : "fourth-letter" } ) ,
188192 ) ;
193+ jest . advanceTimersByTime ( 1 ) ;
189194 await letterQueueRepository . putLetter (
190195 createLetter ( { letterId : "fifth-letter" } ) ,
191196 ) ;
197+ jest . advanceTimersByTime ( 1 ) ;
192198
193199 const letters = await letterQueueRepository . getLetters ( "supplier1" , 5 ) ;
194200
@@ -218,6 +224,80 @@ describe("LetterQueueRepository", () => {
218224 expect ( letters ) . toHaveLength ( 3 ) ;
219225 expect ( letters [ 2 ] . letterId ) . toBe ( "third-letter" ) ;
220226 } ) ;
227+
228+ it ( "applies the limit after filtering on supplier" , async ( ) => {
229+ await letterQueueRepository . putLetter (
230+ createLetter ( { letterId : "first-letter" } ) ,
231+ ) ;
232+ await letterQueueRepository . putLetter (
233+ createLetter ( { letterId : "second-letter" , supplierId : "supplier2" } ) ,
234+ ) ;
235+ await letterQueueRepository . putLetter (
236+ createLetter ( { letterId : "third-letter" } ) ,
237+ ) ;
238+ await letterQueueRepository . putLetter (
239+ createLetter ( { letterId : "fourth-letter" } ) ,
240+ ) ;
241+
242+ const letters = await letterQueueRepository . getLetters ( "supplier1" , 3 ) ;
243+
244+ expect ( letters ) . toHaveLength ( 3 ) ;
245+ expect ( letters [ 2 ] . letterId ) . toBe ( "fourth-letter" ) ;
246+ } ) ;
247+
248+ it ( "applies the limit after filtering on visibilityTimestamp" , async ( ) => {
249+ await letterQueueRepository . putLetter (
250+ createLetter ( { letterId : "first-letter" } ) ,
251+ ) ;
252+ await letterQueueRepository . putLetter (
253+ createLetter ( { letterId : "second-letter" } ) ,
254+ ) ;
255+ await letterQueueRepository . putLetter (
256+ createLetter ( { letterId : "third-letter" } ) ,
257+ ) ;
258+ await letterQueueRepository . putLetter (
259+ createLetter ( { letterId : "fourth-letter" } ) ,
260+ ) ;
261+ await letterQueueRepository . updateVisibilityTimestamp (
262+ createLetter ( { letterId : "second-letter" } ) ,
263+ new Date ( Date . now ( ) + 600_000 ) ,
264+ ) ;
265+
266+ const letters = await letterQueueRepository . getLetters ( "supplier1" , 3 ) ;
267+
268+ expect ( letters ) . toHaveLength ( 3 ) ;
269+ expect ( letters [ 2 ] . letterId ) . toBe ( "fourth-letter" ) ;
270+ } ) ;
271+
272+ it ( "paginates through multiple DynamoDB pages to reach the limit" , async ( ) => {
273+ await letterQueueRepository . putLetter (
274+ createLetter ( { letterId : "first-letter" } ) ,
275+ ) ;
276+ await letterQueueRepository . putLetter (
277+ createLetter ( { letterId : "second-letter" } ) ,
278+ ) ;
279+ await letterQueueRepository . putLetter (
280+ createLetter ( { letterId : "third-letter" } ) ,
281+ ) ;
282+
283+ const pagedRepository = new LetterQueueRepository ( db . docClient , logger , {
284+ ...db . config ,
285+ queryPageSize : 1 ,
286+ } ) ;
287+
288+ const letters = await pagedRepository . getLetters ( "supplier1" , 3 ) ;
289+
290+ expect ( letters ) . toHaveLength ( 3 ) ;
291+ expect ( letters [ 0 ] . letterId ) . toBe ( "first-letter" ) ;
292+ expect ( letters [ 1 ] . letterId ) . toBe ( "second-letter" ) ;
293+ expect ( letters [ 2 ] . letterId ) . toBe ( "third-letter" ) ;
294+ } ) ;
295+
296+ it ( "returns an empty array if no items found" , async ( ) => {
297+ const letters = await letterQueueRepository . getLetters ( "supplier1" , 3 ) ;
298+
299+ expect ( letters ) . toHaveLength ( 0 ) ;
300+ } ) ;
221301 } ) ;
222302
223303 describe ( "updateVisibilityTimestamp" , ( ) => {
0 commit comments