@@ -12,12 +12,16 @@ import { LetterAlreadyExistsError } from "../letter-already-exists-error";
1212import { createTestLogger } from "./logs" ;
1313import { LetterDoesNotExistError } from "../letter-does-not-exist-error" ;
1414
15- function createLetter ( letterId = "letter1" ) : PendingLetterBase {
15+ function createLetter (
16+ overrides : Partial < PendingLetterBase > = { } ,
17+ ) : PendingLetterBase {
1618 return {
17- letterId,
19+ letterId : "letter1" ,
1820 supplierId : "supplier1" ,
1921 specificationId : "specification1" ,
2022 groupId : "group1" ,
23+ priority : 10 ,
24+ ...overrides ,
2125 } ;
2226}
2327
@@ -55,17 +59,42 @@ describe("LetterQueueRepository", () => {
5559 } ) ;
5660
5761 describe ( "putLetter" , ( ) => {
58- it ( "adds a letter to the database" , async ( ) => {
62+ beforeEach ( ( ) => {
5963 jest . useFakeTimers ( ) . setSystemTime ( new Date ( "2026-03-04T13:15:45.000Z" ) ) ;
64+ } ) ;
6065
66+ it ( "adds a letter to the database" , async ( ) => {
6167 const pendingLetter =
6268 await letterQueueRepository . putLetter ( createLetter ( ) ) ;
6369
6470 expect ( pendingLetter . queueTimestamp ) . toBe ( "2026-03-04T13:15:45.000Z" ) ;
6571 expect ( pendingLetter . ttl ) . toBe ( 1_772_633_745 ) ;
72+ expect ( pendingLetter . queueSortOrderSk ) . toBe (
73+ "10-2026-03-04T13:15:45.000Z" ,
74+ ) ;
6675 expect ( await letterExists ( db , "supplier1" , "letter1" ) ) . toBe ( true ) ;
6776 } ) ;
6877
78+ it ( "left-pads the priority with zeros in the sort key" , async ( ) => {
79+ const pendingLetter = await letterQueueRepository . putLetter (
80+ createLetter ( { priority : 5 } ) ,
81+ ) ;
82+
83+ expect ( pendingLetter . queueSortOrderSk ) . toBe (
84+ "05-2026-03-04T13:15:45.000Z" ,
85+ ) ;
86+ } ) ;
87+
88+ it ( "defaults a missing priority to 10 in the sort key" , async ( ) => {
89+ const pendingLetter = await letterQueueRepository . putLetter (
90+ createLetter ( { priority : undefined } ) ,
91+ ) ;
92+
93+ expect ( pendingLetter . queueSortOrderSk ) . toBe (
94+ "10-2026-03-04T13:15:45.000Z" ,
95+ ) ;
96+ } ) ;
97+
6998 it ( "throws LetterAlreadyExistsError when creating a letter which already exists" , async ( ) => {
7099 await letterQueueRepository . putLetter ( createLetter ( ) ) ;
71100
@@ -139,11 +168,21 @@ describe("LetterQueueRepository", () => {
139168 } ) ;
140169
141170 it ( "returns letters in timestamp order" , async ( ) => {
142- await letterQueueRepository . putLetter ( createLetter ( "first-letter" ) ) ;
143- await letterQueueRepository . putLetter ( createLetter ( "second-letter" ) ) ;
144- await letterQueueRepository . putLetter ( createLetter ( "third-letter" ) ) ;
145- await letterQueueRepository . putLetter ( createLetter ( "fourth-letter" ) ) ;
146- await letterQueueRepository . putLetter ( createLetter ( "fifth-letter" ) ) ;
171+ await letterQueueRepository . putLetter (
172+ createLetter ( { letterId : "first-letter" } ) ,
173+ ) ;
174+ await letterQueueRepository . putLetter (
175+ createLetter ( { letterId : "second-letter" } ) ,
176+ ) ;
177+ await letterQueueRepository . putLetter (
178+ createLetter ( { letterId : "third-letter" } ) ,
179+ ) ;
180+ await letterQueueRepository . putLetter (
181+ createLetter ( { letterId : "fourth-letter" } ) ,
182+ ) ;
183+ await letterQueueRepository . putLetter (
184+ createLetter ( { letterId : "fifth-letter" } ) ,
185+ ) ;
147186
148187 const letters = await letterQueueRepository . getLetters ( "supplier1" , 5 ) ;
149188
@@ -155,10 +194,18 @@ describe("LetterQueueRepository", () => {
155194 } ) ;
156195
157196 it ( "limits results to the supplied number" , async ( ) => {
158- await letterQueueRepository . putLetter ( createLetter ( "first-letter" ) ) ;
159- await letterQueueRepository . putLetter ( createLetter ( "second-letter" ) ) ;
160- await letterQueueRepository . putLetter ( createLetter ( "third-letter" ) ) ;
161- await letterQueueRepository . putLetter ( createLetter ( "fourth-letter" ) ) ;
197+ await letterQueueRepository . putLetter (
198+ createLetter ( { letterId : "first-letter" } ) ,
199+ ) ;
200+ await letterQueueRepository . putLetter (
201+ createLetter ( { letterId : "second-letter" } ) ,
202+ ) ;
203+ await letterQueueRepository . putLetter (
204+ createLetter ( { letterId : "third-letter" } ) ,
205+ ) ;
206+ await letterQueueRepository . putLetter (
207+ createLetter ( { letterId : "fourth-letter" } ) ,
208+ ) ;
162209
163210 const letters = await letterQueueRepository . getLetters ( "supplier1" , 3 ) ;
164211
@@ -179,6 +226,7 @@ describe("LetterQueueRepository", () => {
179226
180227 const letter = await getLetter ( db , "supplier1" , "letter1" ) ;
181228 expect ( letter ?. queueTimestamp ) . toBe ( "2026-03-04T13:15:45.000Z" ) ;
229+ expect ( letter ?. queueSortOrderSk ) . toBe ( "10-2026-03-04T13:15:45.000Z" ) ;
182230 } ) ;
183231
184232 it ( "does nothing when the letter does not exist" , async ( ) => {
0 commit comments