@@ -64,10 +64,41 @@ describe('LetterRepository', () => {
6464
6565 test ( 'adds a letter to the database' , async ( ) => {
6666 await letterRepository . putLetter ( createLetter ( 'supplier1' , 'letter1' ) ) ;
67-
6867 await checkLetterExists ( 'supplier1' , 'letter1' ) ;
6968 } ) ;
7069
70+ test ( 'fetches a letter by id' , async ( ) => {
71+ await letterRepository . putLetter ( createLetter ( 'supplier1' , 'letter1' ) ) ;
72+ const letter = await letterRepository . getLetterById ( 'supplier1' , 'letter1' ) ;
73+ expect ( letter ) . toEqual ( expect . objectContaining ( {
74+ id : 'letter1' ,
75+ supplierId : 'supplier1' ,
76+ specificationId : 'specification1' ,
77+ groupId : 'group1' ,
78+ status : 'PENDING'
79+ } ) ) ;
80+ } ) ;
81+
82+ test ( 'throws an error when fetching a letter that does not exist' , async ( ) => {
83+ await expect ( letterRepository . getLetterById ( 'supplier1' , 'letter1' ) )
84+ . rejects . toThrow ( "Letter with id letter1 not found for supplier supplier1" ) ;
85+ } ) ;
86+
87+ test ( 'throws an error when creating a letter which already exists' , async ( ) => {
88+ await letterRepository . putLetter ( createLetter ( 'supplier1' , 'letter1' ) ) ;
89+ await expect ( letterRepository . putLetter ( createLetter ( 'supplier1' , 'letter1' ) ) )
90+ . rejects . toThrow ( "Letter with id letter1 already exists for supplier supplier1" ) ;
91+ } ) ;
92+
93+ test ( 'rethrows errors from DynamoDB when creating a letter' , async ( ) => {
94+ const misconfiguredRepository = new LetterRepository ( db . docClient , logger , {
95+ ...db . config ,
96+ lettersTableName : 'nonexistent-table'
97+ } ) ;
98+ await expect ( misconfiguredRepository . putLetter ( createLetter ( 'supplier1' , 'letter1' ) ) )
99+ . rejects . toThrow ( 'Cannot do operations on a non-existent table' ) ;
100+ } ) ;
101+
71102 test ( 'updates a letter\'s status in the database' , async ( ) => {
72103 await letterRepository . putLetter ( createLetter ( 'supplier1' , 'letter1' , 'PENDING' ) ) ;
73104 await checkLetterStatus ( 'supplier1' , 'letter1' , 'PENDING' ) ;
@@ -90,9 +121,17 @@ describe('LetterRepository', () => {
90121 } ) ;
91122
92123 test ( 'can\t update a letter that does not exist' , async ( ) => {
93- await expect ( async ( ) => {
94- await letterRepository . updateLetterStatus ( 'supplier1' , 'letter1' , 'DELIVERED' ) ;
95- } ) . rejects . toThrow ( 'Letter with id letter1 not found for supplier supplier1' ) ;
124+ await expect ( letterRepository . updateLetterStatus ( 'supplier1' , 'letter1' , 'DELIVERED' ) )
125+ . rejects . toThrow ( 'Letter with id letter1 not found for supplier supplier1' ) ;
126+ } ) ;
127+
128+ test ( 'update letter status rethrows errors from DynamoDB' , async ( ) => {
129+ const misconfiguredRepository = new LetterRepository ( db . docClient , logger , {
130+ ...db . config ,
131+ lettersTableName : 'nonexistent-table'
132+ } ) ;
133+ await expect ( misconfiguredRepository . updateLetterStatus ( createLetter ( 'supplier1' , 'letter1' , 'DELIVERED' ) ) )
134+ . rejects . toThrow ( 'Cannot do operations on a non-existent table' ) ;
96135 } ) ;
97136
98137 test ( 'should return a list of letters matching status' , async ( ) => {
@@ -145,6 +184,12 @@ describe('LetterRepository', () => {
145184 expect ( secondPage . letters [ 48 ] . id ) . toBe ( 'letter099' ) ;
146185 } ) ;
147186
187+ test ( 'letter list should return empty when no letters match status' , async ( ) => {
188+ const page = await letterRepository . getLettersByStatus ( 'supplier1' , 'PENDING' ) ;
189+ expect ( page . letters ) . toHaveLength ( 0 ) ;
190+ expect ( page . lastEvaluatedKey ) . toBeUndefined ( ) ;
191+ } ) ;
192+
148193 test ( 'letter list should warn about invalid data' , async ( ) => {
149194 await letterRepository . putLetter ( createLetter ( 'supplier1' , 'letter1' ) ) ;
150195 await db . docClient . send ( new PutCommand ( {
0 commit comments